RiSE Reuse in Software Engineering Labs http://riselabs.dcc.ufba.br
http://wp.me/pmzba-6b 2
Engenharia de Domínio Conhecimento do domínio Análise de Domínio Novos requisitos Modelo do domínio Projeto do Domínio Arquitetura da família de sistemas Implem. do Domínio Linguagem específica do domínio Componentes Geradores Necessidades dos clientes Análise de Requisitos Novos requisitos Features Engenharia de Aplicação Configuração do Produto Customização Projeto Configuração do produto Integração e Testes Customização Desenvolvimento Produto [Czarnecki and Eisenecker, 2000] http://wp.me/pmzba-6b 3
Análise de Domínio Identificação das características que são comuns e das que são variáveis para aplicações de um domínio específico. É representado por feature, que é definida como uma característica de um sistema que é relevante e visível para o usuário final [Kang et al., 1990] Fases da análise de domínio RiDE Process (Almeida, 2007) Planejar domínio Modelar domínio Validar domínio Tipos de features Mandatórias Opcionais Alternativas Or Dependências Implicação Exclusão http://wp.me/pmzba-6b 4
http://wp.me/pmzba-6b 5
Objetivos Produzir a arquitetura de referência Como os requisitos [variabilidades] são refletidos na arquitetura Definir a estrutura do software Relacionamentos Requisitos do domínio Implementação do domínio Projeto da Aplicação Atividades Abstrair Modelar Prototipar Validar http://wp.me/pmzba-6b 6
Relacionamento entre o sub-processo Projetar Domínio e os demais sub-processos [Pohl et al., 2005] http://wp.me/pmzba-6b 7
http://wp.me/pmzba-6b 8
A atividade mais importante no desenvolvimento de um sistema é construir a arquitetura Determina a estrutura do software e as regras a serem aplicadas Atividades do arquiteto Abstração Reduzir a complexidade Modelagem Reasoning Simulação Execução de modelos para medir aspectos específicos do sistema Prototipação Parcial [fast] implementação Validação Aplicação das regras arquiteturais http://wp.me/pmzba-6b 9
Requisitos de qualidade guiam a arquitetura Qualidade do desenvolvimento Avaliação da arquitetura Meio de avaliar a arquitetura de acordo com atributos de qualidade pré-selecionados Alguns requisitos de qualidade só surgem a partir da SPLE Variabilidade (Configuração, Interna e Externa) Flexibilidade (Mudanças não intrusivas pelos sistemas Evolubilidade (Evoluir a arquitetura de acordo com as mudanças dos requisitos) Manutenibilidade (Facilidade em encontrar e corrigir erros) http://wp.me/pmzba-6b 10
[Pohl et al., 2005] Priorização dos Requisitos Mapeamento entre Requisitos e Projeto Interação dos requisitos Requisitos de linhas de produtos como flexibilidade e adaptabilidade Preparação para o futuro Frameworks de componentes Padrões Programação Orientada a Aspectos http://wp.me/pmzba-6b 11
Adicionando variabilidade no projeto Variabilidade interna Pontos de variação Tecnologias futuras Requisitos instáveis Independência de provedores [Pohl et al., 2005] http://wp.me/pmzba-6b 12
Features Alternativas Abstract Factory e Singleton Factory Method Strategy Template Method OR features Builder Decorator Observer Sugestão de leitura [Almeida et al. 2007] Designing Domain-Specific Software Architecture WICSA [Keepence and Mannion, 1999] Using Patterns to Model Variability in Product Families [Coplien et al., 1998] Commonality and Variability in Software Engineering http://wp.me/pmzba-6b 13
OR Features Builder Decorator Observer Or features Builder Exemplos Chain of responsability Or features http://wp.me/pmzba-6b 14
EXEMPLOS Optional Strategy http://wp.me/pmzba-6b 15
A arquitetura de referência é um grande número de componentes interconectados por meio das interfaces Uso de Framework de componentes restringe o número de configurações de componentes Configurações Componentes e interfaces Conectam-se a uma estrutura comum Componentes plug-in Frameworks externos Infra-estrutura, funcionalidades básicas http://wp.me/pmzba-6b 16
[Pohl et al., 2005] http://wp.me/pmzba-6b 17
Uso de componentes [plug-in] específicos da aplicação A arquitetura de referência determina quais assets reutilizáveis existem na linha de produtos Uso de aspectos Cross-cutting concerns Manutenibilidade Regras da estrutura arquitetural Regras de codificação Estilos Design patterns Frameworks http://wp.me/pmzba-6b 18
Validação da arquitetura da aplicação Consistência com a arquitetura de referência [estrutura] Validação dos assets do domínio [Pohl et al., 2005] Do interfaces carry the right functionality to the right level of abstraction? Are components and interfaces produced according to context? Does each component carry all its interfaces, and no more? Do components call only the required interfaces, and all of them? Testes de integração http://wp.me/pmzba-6b 19
Um software é composto por múltiplas estruturas Unidades de código, sua decomposição e dependências Processos e como eles se relacionam Como o software é implantado... Visões são representações de estruturas http://wp.me/pmzba-6b 20
A view is a representation of a set of system elements and the relations associated with them Não de todos os elementos, mas de parte deles Uma visão restringe os tipos de elementos e os tipos de relações a serem representadas naquela visão http://wp.me/pmzba-6b 21
Um arquiteto deve considerar pelo menos 4 Como as unidades de código estão estruturadas? Visão dos módulos Como os elementos de tempo de execução estão estrturados? Visão de runtime Como os artefatos estão organizados no arquivo de instalação do sistema e como o sistema é implantado? Visão de Implantação Qual a estrutura do repositório de dados? Modelo de Dados http://wp.me/pmzba-6b 22
http://www.rise.com.br/eventos/wire2008/arquivos/08.dsa-tutorial_-_paulo_merson_wire-2008.pdf http://wp.me/pmzba-6b 23
http://www.rise.com.br/eventos/wire2008/arquivos/08.dsa-tutorial_-_paulo_merson_wire-2008.pdf http://wp.me/pmzba-6b 24
Arquitetura de referência Customização em massa Partes reutilizáveis Em especificação Arquitetura de referência pode estar em especificação [variantes] Variabilidade Estrutura Aspectos comuns presentes em todas as aplicações Qualidade Evolução, flexibilidade e manutenibilidade http://wp.me/pmzba-6b 25
PLUS PROCESS [Gomaa, 2005] http://wp.me/pmzba-6b 26
Inputs Casos de uso Modelo de features (do domínio) Padrões arquiteturais (estrutura, comunicação, etc) GOMAA, Hassan. Designing Software Product Lines with UML: From Use Cases to Pattern-Based Software Architectures, Addison Wesley, pp. 736, 2004. http://wp.me/pmzba-6b 27
Separation of Concerns in Component Design Tornar os componentes auto-contidos, de forma que os conceitos sejam suportados por componentes diferentes Aggregate and Composite Subsystems Agrupar os componentes com funcionalidades similares Encapsular componentes internos, não adicionando novas funcionalidades Component Structuring Criteria Guidelines de como estruturar uma aplicação em componentes configuráveis Design of Component Interfaces Definir as interfaces providas e requeridas Design of Components Identificar tipo do componente: composite, plug-in e variáveis. http://wp.me/pmzba-6b 28
RiDE PROCESS [Almeida, 2007] ALMEIDA, Eduardo Santana de et al. A Systematic Approach to Design Domain-Specific Software Architectures, Journal of Software, 2(2):38-51, Academy Publisher, August 2007. Almeida, E. S. RiDE: The RiSE Process for Domain Engineering, Ph.D. Thesis, Federal University of Pernambuco, Recife, Pernambuco, Brazil, May, 2007. http://wp.me/pmzba-6b 29
DP1. Separation of Concerns and information hiding DP2. Paramerization DP3. Components isolated rom the conncetion mechanism DP4. Consistency DP5. Metrics DP6. Commonality and Variability DP7. Traceability DP8. Systematic sequence of activities http://wp.me/pmzba-6b 30
http://wp.me/pmzba-6b 31
Escolher o módulo a ser decomposto Inicialmente, todas as aplicações... Refinar o(s) módulo(s) de acordo com: Escolher os guias arquiteturais ( aplicável Requisitos, features, cenários (se ( aplicável Escolher o padrão arquitetural (se Alocar as funcionalidades usando visões GRASP Casos de Uso Features Representar as variabilidades http://wp.me/pmzba-6b 32
http://wp.me/pmzba-6b 33
Agrupar Componentes Aferir dependência funcional Clusterizar Casos de Uso Selecionar Componentes Candidatos Alocar Classes a Componentes Identificar Componente Especificar Componente Identificar Interfaces Identificar Core Classes Refinar a Especificação Representar a Arquitetura do Domínio http://wp.me/pmzba-6b 34
http://wp.me/pmzba-6b 35
[Gacek e Anastasopoules, 2001] e [Jacobson et al., 1997] linguagem de programação Documentação bem definida dos artefatos Técnicas de implementação [Gacek e Anastasopoules, 2001] Agregação/Delegação Objetos deleguem funcionalidades Funcionalidade obrigatória no objeto que delega e variante no objeto delegado Adequada para Features opcionais mas não recomendadas para features alternativas Alto número de variantes -> alto número de objetos Delegações combinadas http://wp.me/pmzba-6b 36
Técnicas de implementação [Gacek e Anastasopoules, 2001] Herança Funções básicas e especializadas as classes Parametrização Biblioteca de componentes parametrizados Comportamento determinado pelos parâmetros Replicação do código Centralização de decisões de projeto Melhora a reutilização e rastreamento de decisões de projeto http://wp.me/pmzba-6b 37
Técnicas de implementação [Gacek e Anastasopoules, 2001] Sobrecarga (Overloading) O mesmo nome de um elemento pode operar de maneiras diferentes Em tempo de execução Carga dinâmica de Classe Classes carregadas na memória Interessante para SPL Produto pode pesquisar seu contexto e decidir em tempo de execução qual classe carregar http://wp.me/pmzba-6b 38
Técnicas de implementação [Gacek e Anastasopoules, 2001] Compilação condicional Controle sobre os segmentos de código Diretivas marcam locais de variação Encapsulamento de múltiplas implementações Selecionada pela definição dos símbolos condicionais Compilação condicional conseguida antes do tempo de compilação Reflexão Manipular, na forma de dados, logo que representa o estado do programa Meta-programação Objetos em alto nível de abstração representam entidades Sistemas Operacionais e Linguagens de programação Padrões de Projeto Podem variar e fornecer soluções para o gerenciamento de variabilidades http://wp.me/pmzba-6b 39
Técnicas de implementação [Gacek e Anastasopoules, 2001] Orientação a aspectos Técnica desenvolvida na XEROX PARC e permite a modularização de crosscutting concerns, bem como a integração de pontos de junção O processo de integrar pontos de junção envolve descrever como os crosscutting concerns afetam o código em um ou mais pontos de junção Resolução de variabilidade em tempo de compilação (weaving) AspectJ é uma extensão orientada a aspectos de Java que permite que aspetos sejam reutilizados de forma hierárquica em termos de aspectos abstratos http://wp.me/pmzba-6b 40
Frameworks OO Representam uma técnica comum para implementar arquiteturas de família de sistemas e linha de produtos Cada framework OO define um conjunto de classes (concretas e abstratas) que colaboram entre si para implementar uma arquitetura para um dado domínio Cada framework possui: Uma parte fixa (frozen-spots) conjunto de classes que definem como as classes colaboram Uma parte variável (hot-spots): conjunto de classes/ interfaces abstratas que precisam ser estendidas para implementar o comportamento específico do framework http://wp.me/pmzba-6b 41
Frozen Spots Framework OO Hot Spots Hot Spot Instances Legenda: Classe Classe Abstrata ou Interface http://wp.me/pmzba-6b 42
Escopo FWs de infra-estrutura Simplificam o desenvolvimento de aplicações Hibernate, Struts, Java Communication and Threads APIs... FWs de Integração/Middleware Usados para integrar aplicações distribuídas CORBA, RMI, EJB FWs e aplicação Usados para construir aplicações de um domínio/ negócio específico http://wp.me/pmzba-6b 43
Técnica de Extensão Caixa-branca Usuário deve estender classes/interfaces abstratas para criar uma instância do mesmo (ex. JUnit) Caixa-preta Instâncias dos pontos flexíveis (hot-spots) já estão dispoíveis e o usuário deve apenas usar um script de configuração ou uma DSL para escolher as instências desejadas Caixa-cinza Mistura as duas técnicas anteriores (ex. Eclipse) http://wp.me/pmzba-6b 44
Frameworks e Padrões de projeto Padrões de projeto são mais abstratos que um framework Padrões de projeto podem ser, em geral, adaptados a diferentes domínios de aplicação. Enquanto que frameworks definem uma arquitetura específica para um dado domínio Padrões de projeto representam micro-arquiteturas para resolução de um dado problema de projeto de software O projeto e implementação de frameworks contém, em geral, vários padrões de projetos Sobretudo os pontos flexíveis do framework contém vários padrões de projeto (Strategy, Abstract Factory, Adapter, Decorator, Oberver, Proxy, State, etc) http://wp.me/pmzba-6b 45
Exemplos Junit Java Swing, Threads, Applets Struts, Hibernate, JPA Eclipse Workbench Enterprise Java Beans Outros exemplos? http://wp.me/pmzba-6b 46
Geradores de código são utilizados para melhorar a produtividade e qualidade de linhas de desenvolvimento de empresas O quê gerar? Código repetitivo que recorrentemente é reusado, reaproveitado (copy/paste) pelos desenvolvedores Componentes que precisam ser customizados de acordo com as especificidades de cada aplicação http://wp.me/pmzba-6b 47
Geração de código sempre parte de uma especificação de mais alto nível Dados específicos da aplicação são capturados/recolhidos por meio de: Modelos/Diagramas Wizards Diálogos Linguagens textuais (SQL) http://wp.me/pmzba-6b 48
DSLs (Wizards, Feature Models, etc) Arquitetura de referência (classes, arquivos de configuração, etc) Templates http://wp.me/pmzba-6b 49
Templates descrevem a estrutura e comportamento do código (ou arquivo) a ser gerado Várias tecnologias disponíveis Velocity XSLT JET/EMF; xpand/oaw; http://wp.me/pmzba-6b 50
Geradores de CRUD Geradores de código-fonte completo para operações de cadastro CRUD Geração é feita a partir de uma arquitetura de referência implementada com classes/componentes comuns + templates Cada template contém: Código comum na linguagem de programação usada Código variável a ser customizado a partir de informações do usuário (nomes e atributos de entidades) Vários geradores disponíveis na internet Appfuse, AndroMDA, Grails, Groovy www.codegeneration.net http://wp.me/pmzba-6b 51
JSF + Spring + Hibernate Struts 2 + Spring + Hibernate Spring MVC + Spring + Hibernate Tapestry + Spring + Hibernate http://wp.me/pmzba-6b 52
Model Driven Architecture (MDA) Models from UML tools will be transformed into deployable components for your favorite platform Spring EJB 2 / 3 Webservices Hibernate Struts JSF Java XSD http://wp.me/pmzba-6b 53
Definição de uma Arquitetura de Referência A partir da experiência de vários projetos, uma arquitetura de referência é definida São identificados Elementos comuns Classes existentes em cada camada (actions, services, daos, entidades, etc) Classes de serviço de apoio a cada camada (gerência de transações, gerência de sessões, pacote util) Elementos variáveis Componentes, classes ou parte específica deles cuja a implementação varia de uma aplicação para outra Em seguida, a arquitetura de referência deve usar alguma tecnologia para geração dos elementos variáveis Tecnologia de templates, em geral, é utilizada http://wp.me/pmzba-6b 54
GUI FrontEndServlet [Entidade].jsp [Entidade]StrutsAction IFachada[Sistema] Negócio [Entidade]ServiceImpl [Entidade] I[Entidade]DAO Dados [Entidade]DAOHibernate http://wp.me/pmzba-6b 55
GUI Aluno.jsp FrontEndServlet Professor.jsp IAlunoService AlunoStrutsAction ProfessorStrutsAction IProfessorService Negócio Aluno AlunoServiceImpl ProfessorServiceImpl Professor Dados IAlunoDAO AlunoDAOHibernate IProfessorDAO ProfessorDAOHibernate http://wp.me/pmzba-6b 56
GUI Contribuinte.jsp FrontEndServlet Imposto.jsp IContribuinteService ContribuinteStrutsAction ImpostoStrutsAction IImpostoService Negócio Contribuinte Contribuinte ServiceImpl Imposto ServiceImpl Imposto IContribuinteDAO IImpostoDAO Dados ContribuinteDAOHibernate ImpostoDAOHibernate http://wp.me/pmzba-6b 57
<%@ jet package="translated" imports="java.util.* org.cesar.sistemaacademico.util.* class="entityclass" %> <% Hashtable model = (Hashtable) argument;%> <% Entity entity = (Entity) model.get("entity");%> package business; /** * Classe: <%=entity.getname()%> * */ public class <%=entity.getname()%> { <% Attribute attributes[] = entity.getattribute(); for (int i=0;i < attributes.length; ++i){ Attribute attribute = attributes[i]; %> <%=attribute.gettype()%> <%=attribute.getname().tolowercase()%>; } <% %> } http://wp.me/pmzba-6b 58
Compilação condicional Controle sobre os segmentos de código Diretivas marcam locais de variação Encapsulamento de múltiplas implementações Selecionada pela definição dos símbolos condicionais Compilação condicional conseguida antes do tempo de compilação Bastante usado na implementação de jogos para celulares Exemplo: Meantime http://wp.me/pmzba-6b 59
Cada jogo é representado por um arquivo de propriedades que contém as features/funcionalidades que devem ser incluídas naquele aparelho. A partir de um arquivo de propriedade específico, um préprocessador inclui aqueles comandos que possuem diretivas #ifdef# relacionados as features/ funcionalidades presentes no jogo sendo gerado http://wp.me/pmzba-6b 60
ARQUITETURA DE LINHA DE PRODUTO DIFERENTES PRODUTOS BUILD FRAMEWORK CORE DO JOGO VARIAÇÕES (COMPILAÇÃ O ( CONDICIONAL ESCOLHA DE FEATURES ( ETC (DSLS, XML, http://wp.me/pmzba-6b 61
Jogo Rain of Fire / Meantime Framework Core Conjunto de classes que definem a máquina de estado com transições ocorrendo em função do tempo decorrido e interações com o usuário Exemplos de variações implementadas (dependem de recursos disponíveis memória, poder de processamento ou do dispositivo em questão) Imagens decorativas opcionais Carga de imagens por demanda ou na inicialização API de Manipulação de Imagens proprietária de diferentes dispositivos http://wp.me/pmzba-6b 62
public class GameScreen extends Screen {... public void paint(graphics g) { Enemy myenemy;... if (this.scroll.isscrolling) {... } else if(!isgameover){ if (!this.ispaused) { this.drawbk(g); this.drawrain(g); // #ifdef CLOUDS g.drawimage(resources.clouds01, clouds01_x, 87, g.top g.left); g.drawimage(resources.clouds02, clouds02_x, 66, g.top g.left); g.drawimage(resources.clouds03, clouds03_x, 31, g.top g.left); // #endif this.drawcity(g); this.drawcatapults(g); } }... } http://wp.me/pmzba-6b 63
Limitações da Orientação a Objetos Incapacidade de modularizar certos interesses (c) Copyright 1998-2002 Xerox Corporation linhas de código relevantes para a implementação do interesse Gerenciamento de Threads linhas de código relevantes para a implementação do interesse Logging http://wp.me/pmzba-6b 64
Separação avançada de interesses Modularização dos Interesses Transversais Nova abstração: aspecto Novas formas de composição e decomposição Interesse Transversal Aspecto Classes Classes http://wp.me/pmzba-6b 65
Linguagem de programação orientada a aspectos de propósito geral Extensão de Java Faz parte do projeto oficial do Eclipse AJDT AspectJ para Eclipse www.eclipse.org/ajdt www.eclipse.org/aspectj www.aosd.net http://wp.me/pmzba-6b 66
Pointcut Pontos de Junção Advice Método http://wp.me/pmzba-6b 67
Aspectos estão sendo explorados como tecnologia de implementação de arquiteturas de SPL para implementar variabilidades opcionais de integração existentes em: Software para celulares: tecnologia alternativa à compilação condicional (menos invasiva, mais fácil de gerenciar o código) Middleware: permitindo a customização das funcionalidades do middleware para diferentes usuários http://wp.me/pmzba-6b 68
ARQUITETURA DE LINHA DE PRODUTO ASPECTOS FRAMEWORK CORE DO JOGO DIFERENTES PRODUTOS BUILD ESCOLHA DE FEATURES ( ETC (DSLS, XML, http://wp.me/pmzba-6b 69
public aspect Clouds { private static Image clouds01 = null; private static Image clouds02 = null;... void around (GameScreen gs): (( GameScreen.updateClouds(GameScreen call(public void && this(gs); { updateclouds(gs); } void around (Graphics g): (( GameScreen.drawClouds(Graphics call(public void && args(g); { drawclouds(g); } protected void drawclouds(graphics g) { // draws the clouds. g.drawimage(clouds01, clouds01_x, 87, g.top g.left); g.drawimage(clouds02, clouds02_x, 66, g.top g.left); g.drawimage(clouds03, clouds03_x, 31, g.top g.left); }... } http://wp.me/pmzba-6b 70
http://wp.me/pmzba-6b 71
Objetivo Produzir a arquitetura da aplicação Especialização da arquitetura de referência [Pohl et al., 2005] http://wp.me/pmzba-6b 72
Especialização da arquitetura de referência Abstrações específicas da abstração Requisitos de qualidade da aplicação Features não providas pela SPL Modelos específicos da aplicação Comportamento específico Requisitos de qualidade específicos Simulação e prototipação http://wp.me/pmzba-6b 73
Binding das variações A forma como a customização em massa é incorporada; Abstrações utilizadas; Rastreabilidade entre as variabilidades e a arquitetura de referência Reuso dos artefatos do domínio Projetar artefatos para as novas variações Avaliar o esforço adicional Determinar a configuração propícia A configuração dos componentes é o resultado do binding dos pontos de variação com as variabilidades selecionadas Seleção consistente de variantes de componentes Impacto global das variantes Configuração específica de hardware http://wp.me/pmzba-6b 74
Aplicação como base de teste para o domínio Possibilidade de integração de artefatos da aplicação O gerente do produto decide sobre a integração de novos artefatos Substituição de artefatos não-reutilizáveis http://wp.me/pmzba-6b 75
Custo da realização Fatores de custo Número de novos componentes a serem realizados Número de interfaces a serem realizadas Números de pequenas adaptações de componentes e interfaces Realização de simulações Adaptações para aspectos entre-cortantes [cross-cutting aspects] Testes a serem realizados em componentes e configurações reutilizáveis Testes a serem realizados em novos componentes Estimativa de custos Padrões para se aplicar Novos projetos -> alto custo Amortização de custos para features reutilizáveis http://wp.me/pmzba-6b 76
Reuso da arquitetura de referência Rastreabilidade dos requisitos Regras comuns da estrutura Esforço reduzido http://wp.me/pmzba-6b 77
Considerando o modelo de features, requisitos e casos de uso, projete a arquitetura para o domínio de jogos arcade de atirador fixo que apresente os pontos de variação especificados anteriormente. Utilize os recursos apresentados em sala, especificando e justificando a sua escolha. Arquitetura de referência do Domínio (Sugestão: usar a proposta de Paulo Merson - link para os slides anteiormente- para documentação) http://wp.me/pmzba-6b 78
SPL [Almeida et al., 2007] Almeida, E. S., Alvaro, A., Garcia, V. C., Burégio, V. A. A., Mascena, J. C. C. P., Marques, L. N., Lucrédio, D., Meira, S. R. L. C.R.U.I.S.E: Component Reuse in Software Engineering", C.E.S.A.R book, 2007, pp. 219. [Clements and Northrop, 2001] Clements, P. and Northrop, L. Software Product Lines : Practices and Patterns, Addison-Wesley, 2001, pp. 608. [Pohl et al., 2005] Pohl, K. Bockle, G., Van Der Linden, F. Software Product Line Engineering, Springer-Verlag New York Inc, 2005, pp. 467. http://wp.me/pmzba-6b 79
MODEL-DRIVEN DEVELOPMENT, CODE GENERATORS [Czarnecki and Eisenecker, 2000] Czarnecki, K., Eisenecker, U.: Generative Programming: Methods, Tools, and Applications, Addison-Wesley, 2000. [Greenfield and Short, 2005] Greenfield, J., Short, K.: Software Factories: Assembling Applications with Patterns, Frameworks, Models and Tools, John Wiley and Sons, 2005. [Stahl and Voelter, 2006] Stahl, T., Voelter, M.: Model-Driven Software Development: Technology, Engineering, Management, Wiley, 2006. FRAMEWORKS [Fayad, et al 1999] FAYAD, M.; SCHMIDT, D.; and JOHNSON, R. Building Application Frameworks: Object-Oriented Foundations of Framework Design. 1999: John Wiley & Sons. [Roberts et al., 1998] Roberts, D., Johnson, R.: Evolving Frameworks: A Pattern Language for Developing Object-Oriented Frameworks In Martin, R., Riehle, D., Buschmann, F.: Pattern Languages of Program Design", Addison-Wesley, 3, 471-486, 1998. [Shavor 2003, et al] Shavor, S., D Anjou, J., Fairbrother, S., Kehn D., Kellerman, K., McCarthy, P.: The Java Developer s Guide to Eclipse Addison-Wesley, 2003. http://wp.me/pmzba-6b 80
ECLIPSE [Shavor 2003, et al] Shavor, S., D Anjou, J., Fairbrother, S., Kehn D., Kellerman, K., McCarthy, P.: The Java Developer s Guide to Eclipse Addison-Wesley, 2003. ASPECT-ORIENTED SOFTWARE DEVELOPMENT [Filman 2003, et al] Filman, R., Elrad, T., Clarke, S., Aksit, M. Aspect-Oriented Software Development. Addison- Wesley, 2005. [Laddad, R. 2003] Aspectj in Action: Practical Aspect- Oriented Programming. Manning Publications. [Colyer 2004] Colyer, A., Clement, A. Eclipse Aspectj: Aspect-Oriented Programming with Aspectj and the Eclipse Aspectj Development Tools. Addison-Wesley. [Johnson 2005, et al] Johnson, R., Hoeller, J., Arendsen, A., Risberg, T., Sampaleanu, C.: Professional Java Development with the Spring Framework, Wrox, 2005. http://wp.me/pmzba-6b 81