Uma abordagem modular para projeto de software orientado a aspectos
Texto
(2) Dósea, Marcos Barbosa Uma abordagem modular para projeto de software orientado a aspectos / Marcos Barbosa Dósea. – Recife : O Autor, 2008. xiii, 90 folhas : il., fig., tab. Dissertação (mestrado) – Universidade Federal de Pernambuco. CIn. Ciência da Computação, 2008. Inclui bibliografia e apêndices. 1. Engenharia de software. Título.. 005.1. CDD (22.ed.). MEI2008-047.
(3) UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO. MARCOS BARBOSA DÓSEA. “UMA ABORDAGEM MODULAR PARA PROJETO DE SOFTWARE ORIENTADO A ASPECTOS". ESTE TRABALHO FOI APRESENTADO À PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO.. ORIENTADOR: DR. PAULO HENRIQUE MONTEIRO BORBA CO-ORIENTADOR: DR SÉRGIO C. B. SOARES. RECIFE, 29 DE FEVEREIRO DE 2008.
(4)
(5) AGRADECIMENTOS Ao meu orientador, Prof. Paulo Borba, que mesmo no meio de tantas tarefas, sempre encontrava tempo para me ajudar com muita paciˆencia e dedica¸c˜ao na confec¸c˜ao deste projeto. Ao meu co-orientador, Prof. S´ergio Soares, pela disponibilidade e confian¸ca depositada nos v´arios trabalhos que me deu oportunidade de participar. Ao amigo e companheiro de trabalho Alberto Costa Neto, pela grande contribui¸c˜ao neste trabalho e significativas discuss˜oes. Aos amigos do SPG e de apartamento, pelas contribui¸co˜es, discuss˜oes, companheirismo e amizade. A minha noiva Elielma, pelo amor, carinho e paciˆencia nos momentos mais dif´ıceis. Aos meus pais, Messias e Maria, pela paciˆencia, apoio e pelo exemplo que s˜ao em minha vida. A Deus, meu grande companheiro e amigo durante todo o tempo.. iii.
(6)
(7) RESUMO O projeto de software visa descrever os principais aspectos do sistema a ser constru´ıdo atrav´es de mecanismos que ajudam a raciocinar sobre a complexidade. Dentre as atividades do projeto de software, destaca-se a elabora¸c˜ao e documenta¸ca˜o da arquitetura, um dos principais mecanismos para raciocinar e lidar com essa complexidade. Uma das principais metas do projeto da arquitetura ´e a modulariza¸ca˜o do sistema atrav´es do estabelecimento de design rules que dever˜ao ser obedecidas pelos desenvolvedores. Exemplos de design rules estabelecidas no projeto da arquitetura s˜ao os servi¸cos disponibilizados pelos componentes e as regras de comunica¸ca˜o entre estes. A modulariza¸ca˜o dos sistemas de software tamb´em motivou o surgimento da Programa¸c˜ao Orientada a Aspectos (POA). Entretanto estudos recentes mostraram que a utiliza¸c˜ao da POA apesar de ser um meio efetivo para modulariza¸ca˜o de interesses transversais, pode prejudicar a modularidade dos demais interesses se design rules n˜ao forem estabelecidas pelo projetista. Muitas das design rules necess´arias para melhorar a modularidade de sistemas orientados a aspectos s˜ao definidas na fase de projeto da arquitetura do software. Para cria¸ca˜o e documenta¸c˜ao do projeto da arquitetura uma das principais abordagens ´e a utiliza¸ca˜o de Linguagens de Descri¸ca˜o de Arquitetura (LDA), que permitem descrever a arquitetura de forma clara e n˜ao amb´ıgua, possibilitando a verifica¸c˜ao de uma s´erie de propriedades que antes s´o poderiam ser analisadas depois do implementa¸ca˜o do software. O problema na utiliza¸ca˜o desta abordagem ´e que o modelo de arquitetura utilizado pela maioria das LDAs, formado por abstra¸co˜es como componentes e conectores, ´e diferente do modelo baseado em objetos utilizado por muitas linguagens de programa¸c˜ao, tornado dif´ıcil o mapeamento e a consistˆencia entre essas fases do desenvolvimento. Entretanto, para garantir a modularidade do sistema e as propriedades arquiteturais obtidas atrav´es de uma LDA, ´e necess´ario apenas garantir que as design rules estabelecidas por esta s˜ao obedecidas pelo c´odigo desenvolvido. Neste trabalho propomos um mapeamento das design rules implicitamente definidas por uma linguagem de descri¸c˜ao arquitetural para uma linguagem de descri¸ca˜o de design rules, respons´avel por verificar se estas est˜ao sendo obedecidas no c´odigo desenvolvido. A verifica¸c˜ao das design rules permite garantir que a modularidade e as propriedades arquiteturais obtidas atrav´es do projeto da arquitetura sejam v´alidas no c´odigo desenvolvido. A LDA escolhida foi a linguagem AspectualAcme, que utiliza os conceitos da orienta¸c˜ao a aspectos, permitindo que as design rules geradas melhorem tamb´em a modularidade de sistemas orientados a aspectos. Para diminuir os custos com a tradu¸c˜ao, tamb´em foi constru´ıda uma ferramenta capaz de gerar automaticamente, a partir de uma especifica¸c˜ao v´alida em AspectualAcme, as regras na linguagem de descri¸ca˜o de design rules. Al´em da economia de tempo dos v.
(8) vi. RESUMO. desenvolvedores, o suporte autom´atico para tradu¸ca˜o evita que erros sejam cometidos ou que design rules sejam esquecidas, garantindo dessa forma as propriedades verificadas no modelo arquitetura e a modularidade do sistema. Palavras-chave: AspectualAcme, Mapeamento entre Modelos, Linguagem de Descri¸c˜ao de Design Rules, Projeto Modular.
(9) ABSTRACT Software design aims at describing the main aspects of a system through mechanisms that help to reason about complexity. When considering the software design activities, elaborating and documenting the architecture are essential activities to deal with such complexity. Architectural design aims at modularizing the system by establishing design rules that must be obeyed by the developers. Available component services and the communication rules among them are examples of such design rules. Aspect-Oriented Programming (AOP) has been proposed to improve the modularity of software systems. However, recent work has showed that, despite the modularization of crosscutting concerns supported by AOP, it may also break the modularity of other concerns if no design rules are established by the designer. Many required design rules to improve aspect-oriented systems’ modularity are specified at the architectural design phase. An existing approach for creating and documenting the architectural design is to employ Architecture Description Languages (ADLs), which allow designers to describe the architecture clearly and without ambiguities. This way, it is possible to verify properties that would be only possible to analyze after the software is implementated. The problem with this approach is that the architecture model - which consists of abstractions such as components and connectors - used by the majority of ADLs is different from the models based on objects used by the majority of programming languages. Threrefore, it is hard to map these development phases consistently. Nevertheless, in order to guarantee the modularity of the system and the architectural properties obtained through the use of an ADL, it is necessary to guarantee that the design rules established by the ADL are obeyed in the implemented code. In this work, we propose a set of mappings to translate design rules defined by an ADL to a language of design rules, responsible for verifying if these rules are obeyed at the source code level. Such verification may guarantee that both modularity and architectural properties obtained by the architecture design are valid in the implemented source code. In this context, we choose the AspectualAcme ADL, which uses aspect-oriented concepts, allowing the generated design rules to improve the modularity of aspect-oriented systems. To reduce the translation costs, we have also implemented a tool to automatically generate rules in a description language of design rules from a valid specification in AspectualAcme. Besides reducing the developers’ effort and the time required to perform the translation, supporting automated translation may avoid errors. In addition, the design rules are never forgotten, guaranteeing the verified properties of the architectural model and the system’s modularity. Keywords: Models Translation, Design Rules Description Language, Modular Design vii.
(10)
(11) ´ SUMARIO. ˜ Cap´ıtulo 1—INTRODUC ¸ AO 1.1 1.2 1.3 1.4. O Problema . . . Solu¸ca˜o Proposta Contribui¸c˜oes . . Organiza¸ca˜o desse. . . . . . . . . . . . . . . . . . . Trabalho. 1 . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. Cap´ıtulo 2—Projeto de Arquitetura de Software Orientado a Aspectos 2.1 2.2 2.3. 2.4. Programa¸ca˜o Orientada a Aspectos . . . Projeto de Software . . . . . . . . . . . . Projeto de Arquitetura de Software . . . 2.3.1 Estilos Arquiteturais . . . . . . . 2.3.1.1 Pipes e Filtros . . . . . 2.3.1.2 Camadas . . . . . . . . 2.3.1.3 Objetos . . . . . . . . . 2.3.1.4 Invoca¸c˜ao Impl´ıcita . . . 2.3.1.5 Quadro-Negro . . . . . . 2.3.1.6 Cliente-Servidor . . . . Linguagens de Descri¸c˜ao de Arquitetura 2.4.1 ACME . . . . . . . . . . . . . . . 2.4.2 AspectualAcme . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. 5 . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . .. Cap´ıtulo 3—A Linguagem de Especifica¸c˜ ao de Design Rules 3.1 3.2. 3.3. O Problema de Modularidade em Sistemas Orientado a Aspectos . A Linguagem para Especifica¸ca˜o de Design Rules . . . . . . . . . 3.2.1 Structural Rules . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Behavioral Rules . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 M´odulo de Configura¸c˜ao . . . . . . . . . . . . . . . . . . . 3.2.4 Parametriza¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . O Exemplo Display Update . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. As Regras de Tradu¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.2 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix. 5 9 10 12 13 13 14 14 14 15 15 17 20 23. Cap´ıtulo 4—Regras de Tradu¸c˜ ao de AspectualAcme para Design Rules 4.1. 2 2 3 3. 23 25 26 27 29 30 31 37 37 38 38.
(12) ´ SUMARIO. x 4.1.3 4.1.4 4.1.5. 4.2. Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connectors, Roles e Attachments . . . . . . . . . . . . . . . . . . Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.5.1 A Propriedade Provided . . . . . . . . . . . . . . . . . . 4.1.5.2 A Propriedade Provides . . . . . . . . . . . . . . . . . . 4.1.5.3 A Propriedade Required . . . . . . . . . . . . . . . . . . 4.1.5.4 A Propriedade Requires . . . . . . . . . . . . . . . . . . 4.1.6 Aspectual Connectors, Base Roles, Crosscutting Roles e Attachments 4.1.7 Representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . O Tradutor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 5—Avalia¸c˜ ao 5.1 5.2 5.3. 57. Crit´erios de Avalia¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cen´ario 1: Arquitetura do Compilador . . . . . . . . . . . . . . . . . . . Cen´ario 2: A Arquitetura do Sistema Health Watcher . . . . . . . . . . .. Cap´ıtulo 6—Conclus˜ oes 6.1. 6.2. Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . 6.1.1 Mapeamento de AspectualAcme para aSideUML . 6.1.2 Mapeamento de AspectualAcme para UML 2.0 . 6.1.3 Op¸co˜es de Mapeamento de Acme para UML . . . 6.1.4 ArchJava . . . . . . . . . . . . . . . . . . . . . . Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . .. 39 40 42 43 43 44 48 49 52 54. 57 57 63 69. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. 70 70 71 72 72 73. Apˆ endice A—Especifica¸c˜ ao em AspectualAcme do Sistema Health Watcher com Persistence Modelado como Interesse Transversal 75 Apˆ endice B—Especifica¸c˜ ao em AspectualAcme do Sistema Health Watcher com Persistence e Distribution Modelados como Crosscutting Concerns 79.
(13) LISTA DE FIGURAS. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12. Exemplos de Interesses num Sistema de Software [Lad03]. . . . . . Combina¸c˜ao Aspectual no Sistema Orientado a Aspectos [GW06]. Principais Artefatos do Projeto de Software. . . . . . . . . . . . . Combina¸c˜ao aspectual no sistema orientado a aspectos. . . . . . . Arquitetura do Compilador. . . . . . . . . . . . . . . . . . . . . . Arquitetura de de Internet TCP/IP. . . . . . . . . . . . . . . . . . Vis˜ao Componente e Conector [GMW97]. . . . . . . . . . . . . . . Vis˜ao Componente e Conector. . . . . . . . . . . . . . . . . . . . Ferramenta AcmeStudio. . . . . . . . . . . . . . . . . . . . . . . . Composis˜ao Aspectual. . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de Aspectual Connector. . . . . . . . . . . . . . . . . . . Exemplo de Composi¸ca˜o em AspectualAcme com Quantifica¸ca˜o. .. 3.1 3.2. Desenvolvedores de Classes e Aspectos usando Design Rules. . . . . . . . 24 Meta-Modelos do Linguagem de Design Rules e do M´odulo de Configura¸ca˜o 26. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10. Exemplo de Tradu¸ca˜o de um System para sua Design Rule . . . . . . . . Regra de Tradu¸ca˜o de System para Design Rule . . . . . . . . . . . . . . Exemplo de Tradu¸ca˜o de Components para sua Design Rule . . . . . . . Regra de Tradu¸ca˜o de Component para sua Respectiva Design Rule . . . Exemplo de Tradu¸ca˜o de Ports para sua Design Rule . . . . . . . . . . . Regra de Tradu¸ca˜o de Port para sua Respectiva Design Rule . . . . . . . Exemplo de Tradu¸ca˜o de Connectors e Rules para sua Design Rule . . . Regra de Tradu¸ca˜o de Connectors e Rules para sua Respectiva Design Rule Exemplo de Tradu¸ca˜o da Propriedade provided para sua Design Rule . . Regra de Tradu¸ca˜o quando a Propriedade provided ´e Utilizada em Apenas uma das Portas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de Tradu¸ca˜o da Propriedade Provides para sua Respectiva Design Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regra de Tradu¸ca˜o quando a Propriedade provides ´e Utilizada em Apenas uma das Portas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de Tradu¸ca˜o das Propriedades required e provided para a Design Rule Correspondente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regra de Tradu¸ca˜o das Propriedades required e provided para a Design Rule Correspondente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de Tradu¸ca˜o das Propriedades required e provides para a Design Rule Correspondente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4.11 4.12 4.13 4.14 4.15. xi. . . . . . . . . . . . .. . . . . . . . . . . . .. . . . . . . . . . . . .. . . . . . . . . . . . .. 6 7 9 11 13 14 16 19 20 21 21 22. 38 38 39 39 40 40 41 42 43 44 45 45 46 47 47.
(14) xii. LISTA DE FIGURAS 4.16 Regra de Tradu¸ca˜o das Propriedades required e provides para a Design Rule Correspondente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.17 Exemplo de Tradu¸c˜ao da Propriedade requires para sua Design Rule . . . 4.18 Regra de Tradu¸c˜ao da Propriedade requires para sua Design Rule . . . . 4.19 Exemplo de Tradu¸ca˜o de Aspectual Connectors, Base Roles e Crosscutting Roles para sua Design Rule Correspondente . . . . . . . . . . . . . . . . 4.20 Regra de Tradu¸ca˜o de Aspectual Connectors, Base Roles e Crosscutting Roles para sua Respectiva Design Rule com a Propriedade provided . . . 4.21 Regra de Tradu¸ca˜o de Aspectual Connectors, Base Roles e Crosscutting Roles para sua Respectiva Design Rule com a Propriedade required . . . 4.22 Exemplo de Tradu¸c˜ao de Component com Representation para sua Design Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.23 Regra de Tradu¸ca˜o de Component com Representation para sua Respectiva Design Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.24 Funcionamento do Tradutor . . . . . . . . . . . . . . . . . . . . . . . . . 4.25 Componentes do Tradutor . . . . . . . . . . . . . . . . . . . . . . . . . . 4.26 Funcionamento do Tradutor . . . . . . . . . . . . . . . . . . . . . . . . .. 48 49 50 50 51 52 53 54 55 55 56. 5.1 5.2 5.3. Arquitetura do Compilador [Men02]. . . . . . . . . . . . . . . . . . . . . 58 + Arquitetura do Health Watcher com o Interesse Transversal Persistence [BCG 06]. 64 Arquitetura do Health Watcher com o interesse transversal Persistence e Distribution [BCG+ 06]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67. 6.1. Exemplo de Mapeamento de uma Especifica¸ca˜o AspectualAcme para aSideUML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitetura do Sistema Health Watcher usando a Extens˜ao da UML 2.0.. 6.2. 70 71.
(15) LISTA DE TABELAS. 3.1. Behavioral Rules providas pela linguagem de especifica¸ca˜o de design rules.. xiii. 28.
(16)
(17) CAP´ITULO 1. ˜ INTRODUC ¸ AO A complexidade e o custo envolvidos no projeto e desenvolvimento de software aumentou muito nas u ´ltimas quatro d´ecadas, fazendo com que um projeto bem elaborado tivesse cada vez mais importˆancia. O projeto de software visa descrever os principais aspectos do sistema a ser constru´ıdo obtendo modelos que ir˜ao oferecer diferentes vis˜oes aos desenvolvedores. Dentre as atividades do projeto de software destacam-se a elabora¸c˜ao e documenta¸ca˜o da arquitetura como uma dos principais mecanismos para raciocinar e lidar com a complexidade. A arquitetura do software corresponde `as estruturas do sistema, que abrangem os componentes de software, as propriedades externas vis´ıveis a esses componentes e os relacionamentos entre estes [BCK03]. O projeto da arquitetura ´e importante por facilitar a comunica¸c˜ao entre os desenvolvedores, documentar as decis˜oes desde as fases iniciais do projeto, habilitar o efetivo particionamento e o desenvolvimento paralelo, al´em de constituir um modelo de como o sistema ´e estruturado que pode ser reutilizado por outros sistemas. O projeto da arquitetura visa, entre outras coisas, alcan¸car o que normalmente ´e considerado um dos principais atributos de qualidade de um sistema de software: a modularidade. Encontrar nota¸c˜oes que pudessem documentar a arquitetura de forma n˜ao-amb´ıgua e onde fosse poss´ıvel raciocinar sobre as propriedades desta tornou-se um grande desafio. Trabalhos iniciais usavam nota¸c˜oes visuais baseadas em objetos onde os componentes eram representados por classes e as intera¸co˜es entre esses componentes por associa¸c˜oes. Apesar de vantajosa pela familiaridade da nota¸ca˜o, essa abordagem dificultava a caracteriza¸c˜ao e an´alise de propriedades cr´ıticas dos sistemas, como por exemplo, performance e disponibilidade. Uma alternativa para a solu¸ca˜o desse problema foi a utiliza¸c˜ao de Linguagens de Descri¸c˜ ao de Arquitetura (LDA) [MT00] que permitem aos engenheiros raciocinar sobre a arquitetura e suas propriedades num alto n´ıvel de abstra¸c˜ao. N˜ao existe um consenso na comunidade cient´ıfica sobre as caracter´ısticas que uma LDA deve possuir, entretanto ´e quase unanimidade entre as LDAs a utiliza¸ca˜o do modelo de componentes e conectores para descri¸c˜ao da arquitetura. A melhoria da modularidade dos sistemas tamb´em motivou o surgimento da Programa¸c˜ao Orientada a Aspectos (POA) [KLM+ 97]. A POA cria uma nova abstra¸c˜ao denominada aspecto, cujo principal objetivo ´e modularizar certos interesses, denominados interesses transversais, que ficam espalhados e entrela¸cados pelo c´odigo. Entretanto, estudos recentes [SGCH01, SGS+ 05, GSS+ 06, RDB+ 07] mostraram que a utiliza¸ca˜o da POA apesar de ser um meio efetivo para modulariza¸ca˜o dos interesses transversais, pode prejudicar a modularidade dos demais interesses, exigindo aten¸ca˜o a forma como aspectos e c´odigo base interagem. Um mecanismo para lidar com esse problema ´e o estabelecimento de um conjunto de regras, denominadas design rules [BC00], pelo projetista do 1.
(18) ˜ INTRODUC ¸ AO. 2. sistema. Muitas dessas design rules necess´arias para garantir a modularidade de sistemas orientados a aspectos s˜ao definidas na fase de projeto de software, mais especificamente no projeto da arquitetura do software. 1.1. O PROBLEMA. O uso de linguagens de descri¸c˜ao de arquitetura permite descrever a arquitetura de forma clara e n˜ao-amb´ıgua, possibilitando a verifica¸c˜ao de uma s´erie de propriedades que antes s´o poderiam ser analisadas depois da implementa¸c˜ao do software. Essas linguagens estabelecem um importante conjunto de design rules, necess´arias para garantir as propriedades verificadas no modelo de arquitetura e a modularidade do sistema. Entretanto, o modelo de arquitetura utilizado pela maioria das linguagens de descri¸ca˜o de arquitetura, formado por abstra¸co˜es como componentes e conectores, ´e diferente do modelo baseado em objetos utilizado pelas maioria das linguagens de programa¸c˜ao e de descri¸c˜ao do projeto onde, por exemplo, n˜ao existe a abstra¸ca˜o de conector. Outro problema ´e que as abstra¸c˜oes utilizadas pelas LDAs podem ser implementadas de diferentes formas na fase de implementa¸ca˜o, por exemplo, um componente no modelo de arquitetura pode gerar v´arias classes no modelo de implementa¸c˜ao orientado a objetos, dificultando o mapeamento entre esses modelos. Entretanto, para garantir a validade das propriedades verificadas no modelo de arquitetura e a modularidade do sistema, as design rules estabelecidas pelo modelo de arquitetura precisam ser obedecidas tanto no modelo de projeto quanto no modelo de implementa¸ca˜o. Ambos refinam o modelo de arquitetura adicionando novas design rules. Para expressar de forma n˜ao-amb´ıgua as design rules estabelecidas pelo projetista, foi proposta em um trabalho anterior uma linguagem para descri¸c˜ao de design rules [DNBS07]. Al´em das design rules arquiteturais, a linguagem permite descrever outras design rules definidas em outras fases do projeto do software. Atrav´es de uma ferramenta de verifica¸ca˜o ´e poss´ıvel determinar se as design rules descritas pela linguagem est˜ao sendo obedecidas pelo c´odigo desenvolvido. A utiliza¸ca˜o da linguagem torna-se um meio efetivo para verificar se as design rules estabelecidas no modelo de arquitetura s˜ao obedecidas na fase de implementa¸c˜ao. Entretanto, n˜ao existe um mapeamento expl´ıcito e n˜ao-amb´ıguo entre o modelo de arquitetura, utilizado pelas LDAs, e a linguagem de descri¸ca˜o design rules. Isso possibilita que design rules sejam esquecidas ou ainda mal interpretadas, comprometendo a validade das propriedades verificadas no modelo de arquitetura e a modularidade do sistema. Al´em disso, a inexistˆencia de regras expl´ıcitas para o mapeamento impossibilita a cria¸ca˜o de mecanismos autom´aticos que permitam automatizar esse processo. 1.2. ˜ PROPOSTA SOLUC ¸ AO. Este trabalho define um mapeamento que traduz as design rules implicitamente definidas por uma linguagem de descri¸ca˜o arquitetural para a linguagem de descri¸c˜ao de design rules. A linguagem arquitetural escolhida foi a linguagem AspectualAcme [BCG+ 06], por ser uma linguagem simples, gen´erica e que utiliza os conceitos da orienta¸c˜ao a aspectos.
(19) ˜ 1.3 CONTRIBUIC ¸ OES. 3. para melhorar a modulariza¸c˜ao dos interesses transversais. A utiliza¸ca˜o de uma LDA orientada a aspectos permite que as design rules geradas melhorem a modularidade dos sistemas orientados a aspectos. As regras impl´ıcitas para gera¸c˜ao das design rules foram extra´ıdas da linguagem AspectualAcme observando-se basicamente a semˆantica das constru¸c˜oes dessa linguagem. Para diminuir os custos com a tradu¸c˜ao, construiu-se uma ferramenta capaz de gerar automaticamente, a partir de uma especifica¸c˜ao v´alida em AspectualAcme, as regras na linguagem de descri¸ca˜o de design rules. Al´em da economia de tempo dos desenvolvedores, o suporte autom´atico para tradu¸ca˜o evita que erros sejam cometidos ou que design rules sejam esquecidas, garantindo dessa forma as propriedades verificadas no modelo de arquitetura e melhorando a modularidade do sistema. 1.3. ˜ CONTRIBUIC ¸ OES. As principais contribui¸co˜es desse trabalho s˜ao: • Um mapeamento entre as design rules expressas na linguagem de descri¸ca˜o de arquitetura AspectualAcme para a linguagem de descri¸ca˜o de design rules. • A cria¸ca˜o de suporte autom´atico para traduzir especifica¸co˜es entre a linguagem de descri¸ca˜o arquitetural AspectualAcme e a linguagem de descri¸c˜ao de design rules. • A avalia¸ca˜o da proposta utilizando cen´arios de arquiteturas cl´assicas apresentadas na literatura. 1.4. ˜ DESSE TRABALHO ORGANIZAC ¸ AO. Neste Cap´ıtulo foi apresentada uma introdu¸c˜ao ao problema abordado neste trabalho e um resumo das principais contribui¸co˜es. No Cap´ıtulo 2 ´e discutida a importˆancia da arquitetura de software no contexto do projeto de software orientado a aspectos e s˜ao apresentados diversos conceitos sobre descri¸c˜ao de arquiteturas e algumas linguagens de descri¸ca˜o arquitetural. A linguagem Acme e sua extens˜ao AspectualAcme tamb´em s˜ao apresentadas em detalhes nesse cap´ıtulo. Para descrever de forma n˜ao amb´ıgua o conjunto de design rules necess´arias para modularizar um sistema orientado a aspectos no Cap´ıtulo 3 ´e apresentada a linguagem para descri¸c˜ao de design rules. Nesse cap´ıtulo s˜ao discutidos os problemas de modularidade existentes em sistemas orientado a aspectos, as principais constru¸co˜es da linguagem e um exemplo de como a linguagem poderia ser utilizada para melhorar a modularidade. As regras de transforma¸co˜es entre o modelo de arquitetura descritas atrav´es da linguagem AspectualAcme e a linguagem de design rules s˜ao apresentadas no Cap´ıtulo 4. Nesse cap´ıtulo s˜ao discutidas ainda a arquitetura e a implementa¸c˜ao da ferramenta constru´ıda para provˆe o suporte autom´atico para essas transforma¸co˜es. No Cap´ıtulo 5 a abordagem proposta ´e avaliada. S˜ao utilizados exemplos de estilos arquiteturais cl´assicos e tamb´em sistemas reais para mostrar como as design rules presentes na especifica¸ca˜o desses sistemas em AspectualAcme s˜ao geradas automaticamente para a linguagem de design rules..
(20) 4. ˜ INTRODUC ¸ AO. Finalmente, no Cap´ıtulo 6 s˜ao apresentadas as conclus˜oes, os principais trabalhos relacionados e alguns trabalhos futuros. Com rela¸ca˜o ao padr˜ao de escrita, foram adotadas as seguintes conven¸co˜es: • Fontes em it´alico s˜ao utilizadas para representar termos em l´ınguas estrangeiras e palavras ou express˜oes com ˆenfase; • A fonte Courier New ´e utilizada na representa¸ca˜o do c´odigo fonte e termos que representam tipos e constru¸c˜oes de linguagens de programa¸ca˜o..
(21) CAP´ITULO 2. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. O Desenvolvimento de Software Orientado a Aspectos (DSOA) [FF05] ´e uma nova abordagem que vem se destacando para resolver problemas de outras abordagens, entre elas a programa¸c˜ao orientada a objetos, provendo suporte sistem´atico para identifica¸ca˜o, modulariza¸c˜ao, e composi¸c˜ao de interesses transversais atrav´es de todo ciclo de vida do software. No n´ıvel do projeto da arquitetura, um interesse transversal pode ser qualquer interesse que n˜ao pode ser efetivamente modularizado com as abstra¸co˜es providas para esta tarefa. Dentre as v´arias formas de cria¸c˜ao do projeto arquitetural, destaca-se a utiliza¸ca˜o de Linguagens de Descri¸c˜ao de Arquitetura (LDA) [MT00] como mecanismo para a descri¸c˜ao n˜ao-amb´ıgua da arquitetura. Atrav´es do emprego dessas linguagens, propriedades inerentes `a arquitetura, como desempenho e disponibilidade, podem ser analisadas antes da implementa¸ca˜o concreta do software. Recentemente algumas LDAs vem propondo mecanismos para modelagem de interesses transversais. Neste cap´ıtulo s˜ao descritos os principais conceitos referentes `a programa¸ca˜o orientada `a aspectos e em seguida ´e discutido como esta vem influenciando as t´ecnicas para o projeto de arquitetura de software. Ainda nesse cap´ıtulo s˜ao apresentadas em detalhes as linguagens de descri¸ca˜o de arquitetura Acme e sua extens˜ao orientada a aspectos AspectualAcme. 2.1. ˜ ORIENTADA A ASPECTOS PROGRAMAC ¸ AO. A programa¸c˜ao orientada a aspectos (POA)[KLM+ 97] foi criada com o objetivo de separar os interesses centrais dos interesses transversais, de uma forma bem definida e centralizada, possibilitando um n´ıvel maior de abstra¸ca˜o e uma separa¸c˜ao bem definida de cada um dos componentes. Um interesse ´e um requisito espec´ıfico ou uma considera¸ca˜o que deve ser tratada para satisfazer os objetivos do sistema. Um sistema de software ´e composto por um conjunto de interesses. Na Figura 2.1 temos exemplos de trˆes interesses: Business logic ´e um exemplo de interesse n˜ao-transversal por capturar a funcionalidade principal do m´odulo e Persistence e Logging s˜ao exemplos de interesses transversais por capturar requisitos que podem se espalhar em m´ ultiplos m´odulos. A identifica¸c˜ao de cada um desses interesses permite focar em cada um separadamente, reduzindo a complexidade e aumentando as possibilidades de reuso. Segundo Goetten [GW06] a orienta¸ca˜o a aspectos possui quatro conceitos fundamentais: 5.
(22) 6. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. Figura 2.1 Exemplos de Interesses num Sistema de Software [Lad03].. • pontos de jun¸c˜ ao: s˜ao locais bem definidos na execu¸ca˜o de um programa, como por exemplo, a chamada a um m´etodo ou a ocorrˆencia de uma exce¸c˜ao. Todos os pontos de jun¸ca˜o possuem um contexto associado, por exemplo, durante a chamada de um m´etodo o objeto chamador, o objeto alvo e os argumentos est˜ao dispon´ıveis no contexto. • conjuntos de pontos de jun¸c˜ ao: s˜ao elementos do programa usados para definir um ponto de jun¸ca˜o, atrav´es da cria¸ca˜o de regras gen´ericas que definem quais os eventos ser˜ao considerados pontos de jun¸ca˜o, sem precisar defini-los individualmente. • adendos: s˜ao partes da implementa¸ca˜o de um aspecto executados em pontos bem definidos do programa principal. S˜ao compostos por duas partes: a primeira define o conjunto de pontos de jun¸c˜ao que define as regras de captura dos pontos de jun¸ca˜o; a segunda ´e o c´odigo que ser´a executado quando ocorrer um ponto de jun¸ca˜o definido pela primeira parte. • aspecto: ´e um mecanismo disponibilizado para agrupar fragmentos de c´odigo referentes aos interesses transversais em uma unidade do sistema, evitando c´odigo espalhado e entrela¸cado. Dessa forma, os aspectos n˜ao podem existir sozinhos. Eles precisam das classes onde s˜ao implementados os interesses centrais. A combina¸c˜ao aspectual ´e o processo respons´avel por combinar os elementos escritos em linguagem de componentes, na qual as classes do sistema s˜ao escritas, com os elementos escritos em linguagem de aspectos. As classes referentes aos interesses n˜aotransversais n˜ao sofrem qualquer altera¸ca˜o para dar suportar `a programa¸ca˜o orientada a aspectos. A Figura 2.2 demonstra o processo de combina¸ca˜o aspectual onde os interesses centrais escritos numa linguagem de componentes s˜ao combinados com os interesses transversais.
(23) ˜ ORIENTADA A ASPECTOS 2.1 PROGRAMAC ¸ AO. 7. Figura 2.2 Combina¸c˜ao Aspectual no Sistema Orientado a Aspectos [GW06].. escritos numa linguagem de aspectos. Como sa´ıda obt´em-se o c´odigo combinado entre programas escritos em linguagem de componentes e programas escritos em linguagem de aspectos. Atualmente uma das linguagens de aspectos mais popular ´e o AspectJ [Tea07], uma extens˜ao da linguagem Java que implementa os conceitos da orienta¸ca˜o a aspectos citados anteriormente. Para exemplificar os conceitos apresentados, utilizaremos um pequeno exemplo que modulariza o interesses transversal de gerenciamento de transa¸co˜es de um sistema. Listing 2.1 Facade OO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23. public c l a s s Facade { public void i n s e r t ( Employee employee ) { try { getPm ( ) . b e g i n T r a n s a c t i o n ( ) ; employeeRecord . i n s e r t ( employee ) ; getPm ( ) . co mm itT ra n sa ctio n ( ) ; } catch ( E x c e p t i o n e ) { getPm ( ) . r o l l b a c k T r a n s a c t i o n ( ) ; } } public void update ( Employee employee ) { try { getPm ( ) . b e g i n T r a n s a c t i o n ( ) ; employeeRecord . update ( employee ) ; getPm ( ) . co mm it Tra nsa ct io n ( ) ; } catch ( E x c e p t i o n e ) { getPm ( ) . r o l l b a c k T r a n s a c t i o n ( ) ; } } ... }. Na Listagem 2.1 temos um fragmento de c´odigo de uma fachada onde alguns dos seus m´etodos precisam realizar gerenciamento transacional. Nos dois m´etodos percebe-se que.
(24) 8. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. o c´odigo relativo ao in´ıcio do gerenciamento transacional (Linhas 5 e 15), a grava¸ca˜o das mudan¸cas realizadas (Linhas 7 e 17) e o retorno ao estado anterior em caso de falhas (Linhas 9 e 19) ´e igual e est´a entrele¸cado com o interesse central dos m´etodos que ´e realizar as opera¸co˜es de inser¸ca˜o e atualiza¸c˜ao. O c´odigo tamb´em esta espalhado, caracter´ısticas que definem um interesse transversal. Para modularizar esse interesses utilizaremos a orienta¸c˜ao a aspectos atrav´es dos mecanismos providos pela linguagem AspectJ. Listing 2.2 Facade OO Modularizada 1 2 3 4 5 6 7 8 9 10 11. public c l a s s Facade { public void i n s e r t ( Employee employee ) { employeeRecord . i n s e r t ( employee ) ; } public void update ( Employee employee ) { employeeRecord . update ( employee ) ; } ... }. Para modularizar o interesse transversal de gerenciamento transacional, inicialmente implementamos na fachada apenas o c´odigo referente ao interesse central, no exemplo as rotinas de inser¸c˜ao e atualiza¸ca˜o. Na Listagem 2.2 apresentamos como ficaria a fachada apenas com as rotinas de inser¸ca˜o, sem a presen¸ca do interesse transversal de gerenciamento de transa¸co˜es. Essa implementa¸c˜ao deixa a fachada mais flex´ıvel e com maior possibilidade de reutiliza¸ca˜o, por exemplo por um sistema onde o gerenciamento transacional n˜ao fosse requerido. Listing 2.3 Aspecto Respons´avel pelo Gerenciamento de Transa¸c˜ oes de Facade 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16. public aspect TransactionManagement { pointcut t r a n s a c t i o n a l M e t h o d s ( ) : execution ( ∗ Facade . ∗ ( . . ) ) ; ; before ( ) : t r a n s a c t i o n a l M e t h o d s ( ) { getPm ( ) . b e g i n T r a n s a c t i o n ( ) ; } a f t e r ( ) returning : t r a n s a c t i o n a l M e t h o d s ( ) getPm ( ) . c om mit Tran sa ctio n ( ) ; } a f t e r ( ) throwing : t r a n s a c t i o n a l M e t h o d s ( ) getPm ( ) . r o l l b a c k T r a n s a c t i o n ( ) ; }. {. {. }. O gerenciamento transacional seria ent˜ao implementado pelo aspecto exibido na Listagem 2.3. Na Linha 1 temos a declara¸c˜ao do aspecto respons´avel pelo gerenciamento transacional na linguagem AspectJ, no qual todo tratamento relativo a esse interesse transversal deve ser inclu´ıdo. O aspecto pode se utilizar de conjuntos de pontos de jun¸c˜ao, adendos, atributos e m´etodos para fazer esse tratamento. A Linha 3 declara o conjunto de pontos de jun¸c˜ao transactionalMethods respons´avel por selecionar os pontos de jun¸ca˜o onde o gerenciamento transacional ser´a adicionado. No exemplo, os pontos de jun¸ca˜o selecionados s˜ao as execu¸c˜oes de todos os m´etodos existentes na fachada. Para.
(25) 2.2 PROJETO DE SOFTWARE. 9. denotar que s˜ao todos os m´etodos, independentemente do tipo de retorno, o wildcard ’*’ ´e utilizado e para denotar que esses m´etodos pode possuir qualquer n´ umero de parˆametros e com quaisquer tipos, ´e utilizado o wildcard ’..’. A utiliza¸c˜ao de wildcards ´e importante para facilitar a sele¸ca˜o de um conjunto de pontos de jun¸ca˜o sem a necessidade de escrevˆe-los individualmente. Caso apenas alguns m´etodos precisassem de gerenciamento de transa¸c˜oes, seriam selecionados pelos conjuntos de pontos de jun¸ca˜o apenas as assinaturas dos m´etodos correspondentes. O c´odigo seguinte `a declara¸ca˜o do conjunto de pontos de jun¸c˜ao especifica trˆes adendos: o primeiro adendo (Linhas 5-7) insere o c´odigo relativo ao in´ıcio do gerenciamento transacional antes da execu¸c˜ao dos pontos de jun¸ca˜o selecionados pelo conjunto de pontos de jun¸c˜ao transactionalMethods; o segundo adendo (Linhas 9-11) insere o c´odigo depois da execu¸ca˜o desse mesmo conjunto de pontos de jun¸c˜ao quando a opera¸c˜ao for realizada com sucesso, sem o lan¸camento de exce¸co˜es; e finalmente o u ´ltimo adendo (Linhas 13 a 15) insere o c´odigo tamb´em depois da execu¸ca˜o do conjunto de pontos de jun¸c˜ao mas somente se houver algum problema e uma exce¸c˜ao for lan¸cada. Nas se¸co˜es seguintes, ´e explicado como esses conceitos da orienta¸ca˜o a aspectos, inicialmente relativos `a fase de implementa¸ca˜o, influenciam a fase de projeto, mais especificamente o projeto da arquitetura. 2.2. PROJETO DE SOFTWARE. O projeto de software ´e um processo iterativo atrav´es do qual requisitos de software s˜ao traduzidos em artefatos que demonstram que existe uma solu¸ca˜o fact´ıvel para a constru¸c˜ao do software. O resultado desse processo ´e a especifica¸ca˜o de como a aplica¸c˜ao dever´a ser constru´ıda e as restri¸c˜oes t´ecnicas de implementa¸ca˜o que dever˜ao ser obedecidas [Pre02]. Cada um dos elementos do modelo de an´alise fornece informa¸ca˜o necess´aria para criar os modelos de projeto. O projeto ´e a etapa na qual a qualidade ´e incorporada `a engenharia de software e serve de base para todas as fases que se seguem `a engenharia do software.. Figura 2.3 Principais Artefatos do Projeto de Software.. Na Figura 2.3 exibimos os quatro principais artefatos que, segundo Preesman [Pre02],.
(26) 10. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. s˜ao produzidos pelos principais m´etodos de projeto de software. Cada uma dessas atividades oferece informa¸co˜es para realiza¸c˜ao das etapas superiores. Vale ressaltar que, a depender do tipo de software a ser constru´ıdo e da metodologia adotada, algumas dessas etapas podem ser suprimidas ou simplificadas. Mas geralmente temos as seguintes etapas: • Projeto Arquitetural : define as rela¸co˜es entre os principais elementos estruturais do software, os padr˜oes de projeto e as restri¸c˜oes que afetam o modo pelo qual os padr˜oes de projeto arquitetural podem ser aplicados. • Projeto de Interface: descreve como o software se comunica com ele mesmo, com os sistemas que interoperam com ele e com as pessoas que o utilizam. Uma interface implica um fluxo de informa¸ca˜o e um tipo de comportamento espec´ıfico. • Projeto dos Componentes: transforma elementos estruturais da arquitetura de software numa descri¸c˜ao procedimental dos componentes de software. • Projeto de Dados: transforma o modelo do dom´ınio da informa¸c˜ao nas estruturas de dados que v˜ao ser necess´arias para implementar o software. Parte do projeto de dados pode ocorrer em conjuga¸c˜ao com o projeto de arquitetura. Projeto mais detalhado ocorre `a medida que cada componente de software ´e projetado. O resultado dessas atividades ´e um conjunto de modelos que caracterizam e especificam o comportamento e a estrutura do software requerido. Estes modelos podem ter diferentes n´ıveis de abstra¸ca˜o, a depender do n´ıvel de detalhes necess´ario. O Projeto de Software Orientado a Aspectos (PSOA) tem os mesmos objetivos que qualquer atividade de projeto: caracterizar e especificar a estrutura e o comportamento do software. A diferen¸ca ´e que nas abordagens de PSOA h´a o tratamento diferenciado para os interesses transversais. Neste trabalho o foco ser´a nas atividades de projeto arquitetural e projeto das interfaces, destacadas na Figura 2.3, principais respons´aveis pelo estabelecimento das regras relativas `a modulariza¸ca˜o do sistema. Assim, nas se¸c˜oes seguintes descrevemos a atividade de projeto da arquitetura do software e ressaltamos sua importˆancia para alcan¸car essa meta. 2.3. PROJETO DE ARQUITETURA DE SOFTWARE. A arquitetura de software de um programa ou sistema computacional ´e a estrutura ou estruturas do sistema que abrange os componentes de software, as propriedades externas vis´ıveis a esses componentes e os relacionamentos entre eles [BCK03]. No contexto do projeto arquitetural, um componente de software pode ser algo t˜ao simples quanto um m´odulo de programa mas tamb´em pode ser ampliado para incluir, por exemplo, uma base de dados. As propriedades dos componentes s˜ao aquelas caracter´ısticas necess´arias para o entendimento de como os componentes interagem com os outros componentes. As rela¸c˜oes entre componentes podem ser t˜ao simples quanto uma chamada a procedimento de um m´odulo para outro ou t˜ao complexas quanto um protocolo de acesso a base de.
(27) 2.3 PROJETO DE ARQUITETURA DE SOFTWARE. 11. dados. Assim, o projeto arquitetural foca na representa¸c˜ao da estrutura de componentes de software, suas propriedades e intera¸co˜es. Um sistema normalmente ´e composto por v´arios tipos de componentes. Por´em, na descri¸c˜ao da arquitetura, normalmente s˜ao escolhidos aqueles que s˜ao mais representativos ou ainda s˜ao constru´ıdas v´arias vis˜oes da organiza¸ca˜o desses componentes [CN02a]. Para tomar as decis˜oes no projeto arquitetural o projetista leva em conta os requisitos para motivar e justificar suas decis˜oes. Al´em disso devem ser consideradas tamb´em as metas de qualidade, cen´arios de uso, padr˜oes de projeto [GHJV95] e estilos arquiteturais existentes. A Figura 2.4 exibe essas entradas, necess´arias para o projeto da arquitetura e que geram como resultado a sua documenta¸ca˜o.. Figura 2.4 Combina¸c˜ao aspectual no sistema orientado a aspectos.. Os atributos de qualidade, tamb´em chamados de requisitos n˜ao-funcionais, s˜ao usados como crit´erios de sele¸c˜ao na escolha de alternativas de projeto, estilo arquitetural e forma de implementa¸ca˜o. Segundo Mendes [Men02] os principais atributos de qualidade a serem considerados no projeto arquitetural s˜ao: • usabilidade: especifica tanto o n´ıvel de desempenho quanto a satisfa¸ca˜o do usu´ario no uso de sistema. Para determinar se a arquitetura satisfaz os aspectos de usabilidade ´e necess´ario o desenvolvimento de cen´arios de uso do sistema. Os cen´arios devem assegurar que informa¸co˜es corretas estejam dispon´ıveis ao usu´ario no momento adequado, bem como encaminhar corretamente a¸co˜es ou comandos dos usu´arios aos componentes apropriados do sistema. • manutenibilidade: ´e um dos requisitos mais relacionados com a arquitetura pois a facilidade de fazer modifica¸co˜es vai depender muito desta. Dessa forma, a arquitetura deve acomodar as modifica¸co˜es que precisem ser feitas tanto durante o desenvolvimento quanto ap´os o sistema entrar em opera¸c˜ao. • confiabilidade: ´e a probabilidade do sistema de software n˜ao apresentar desvios com rela¸ca˜o `a sua especifica¸c˜ao durante um determinado per´ıodo de tempo sob condi¸co˜es espec´ıficas. A arquitetura influenciar´a na confiabilidade do sistema e uma das formas que pode ser utilizada para melhor´a-la ´e a replica¸ca˜o dos componentes mais suscet´ıveis a falhas. • desempenho: o desempenho do sistema depende muito da intera¸ca˜o existente entre os componentes de um sistema de software e, portanto, est´a muito associado `a.
(28) 12. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. arquitetura. Normalmente ´e influenciado por outros requisitos de qualidade. Por exemplo, a confiabilidade alcan¸cada com a replica¸ca˜o de componentes pode comprometer o desempenho do sistema. • portabilidade: ´e a facilidade com a qual o software pode ser transferido de um sistema computacional ou ambiente para outro. Quanto maior a necessidade de portabilidade do sistema, mais elaborada vai ter que ser a arquitetura para dar suporte a diferentes plataformas. • reusabilidade: tem como objetivo reutilizar componentes j´a desenvolvidos e testados, diminuindo conseq¨ uentemente os custos. O que determinar´a o grau de reusabilidade dos componentes de uma arquitetura ser´a a interdependˆencia ou acoplamento entre esses componente. • seguran¸ca: objetiva assegurar a integridade do sistema quanto a ataques intencionais ou acidentais. No desenvolvimento da arquitetura, diversos aspectos, como por exemplo, autentica¸ca˜o, tempo de acesso, disponibilidade, criptografia e auditoria, devem ser levados em considera¸ca˜o a fim de atender os requisitos de seguran¸ca. Os cen´arios de uso s˜ao exemplos de intera¸ca˜o entre usu´arios e o sistema e tamb´em influenciam as decis˜oes para projeto da arquitetura. Os tipos de cen´arios a ser desenvolvidos est˜ao intimamente relacionados ao software que se deseja construir. Por exemplo, pode se desenvolver cen´ario de tempo de resposta para o desempenho, cen´arios de invas˜ao para um sistema onde seguran¸ca seja um item cr´ıtico e cen´arios de degrada¸c˜ao para avaliar a disponibilidade do sistema. Os padr˜oes de projeto descrevem solu¸co˜es simples e elegantes para problemas que aconteceram v´arias vezes no desenvolvimento de software. Refletem a experiˆencia dos desenvolvedores e ajudam o projetista a criar um software mais flex´ıvel e reutiliz´avel [GHJV95]. No projeto da arquitetura esses padr˜oes devem ser conhecidos pelo projetista para que este possa chegar mais r´apido `a solu¸c˜ao correta para o problema. Finalmente, os estilos arquiteturais tamb´em podem ser utilizados como pontos de partida na elabora¸ca˜o da arquitetura. S˜ao semelhantes aos padr˜oes de projeto pois descrevem solu¸c˜oes elegantes para problemas que aconteceram diversas vezes. Entretanto, funcionam em um n´ıvel mais alto de abstra¸ca˜o, ignorando quest˜oes como paradigma de programa¸c˜ao adotado. Na se¸c˜ao seguinte s˜ao detalhados os principais estilos arquiteturais existentes e como estes devem ser utilizados para projetar arquiteturas mais flex´ıveis e reus´aveis. 2.3.1. Estilos Arquiteturais. Ao caracterizar as arquiteturas de software que s˜ao utilizadas nos sistemas, identificando seus componentes, mecanismos de intera¸ca˜o e propriedades, podemos classific´a-las. Um estilo arquitetural ´e um conjunto de classes ou uma fam´ılia de arquiteturas com semelhan¸cas nas caracter´ısticas dos componentes e conectores, topologia da arquitetura, restri¸c˜oes semˆanticas e mecanismos de intera¸ca˜o entre os componentes [BCK03]..
(29) 2.3 PROJETO DE ARQUITETURA DE SOFTWARE. 13. Estilos arquiteturais bem definidos e com caracter´ısticas bem especificadas, semelhantes `a utiliza¸ca˜o de padr˜oes de projetos, diminuem o esfor¸co dos projetistas para encontrar a melhor solu¸c˜ao e facilitam a comunica¸ca˜o entre os desenvolvedores da solu¸ca˜o adotada. Estilos arquiteturais tamb´em s˜ao conhecidos na literatura como padr˜oes arquiteturais. Nas subse¸c˜oes seguintes s˜ao apresentados os principais estilos arquiteturais encontrados na literatura, procurando identificar seus componentes, mecanismos de itera¸ca˜o e propriedades. 2.3.1.1 Pipes e Filtros Nesse estilo arquitetural os dados fluem de uma extremidade a outra atrav´es dos pipes e sofrem transforma¸c˜oes quando processados nos filtros. Um pipe provˆe um canal unidirecional, atuando como condutor do fluxo de dados entre a fonte de origem dos dados e o destino. O estilo ´e adequado para o projeto de sistemas que requerem v´arios est´agios de processamento. Cada est´agio ´e implementado como um filtro que recebe os dados e, depois de realizar alguma transforma¸ca˜o, produz dados na sa´ıda, que s˜ao associados por meio de pipe ao pr´oximo est´agio.. Figura 2.5 Arquitetura do Compilador.. Um exemplo da utiliza¸ca˜o do estilo arquitetural pipes e filtros ´e o modelo cl´assico dos compiladores apresentado na Figura 2.5. Nessa arquitetura cada etapa do processamento ´e realizada separadamente e os resultados parciais de cada fase s˜ao encaminhados `a etapa seguinte. Na figura, o compilador ´e decomposto em seis componentes associados `as seis fases da compila¸ca˜o. Cada componente da figura ´e um filtro que efetua uma transforma¸c˜ao sobre os dados que s˜ao canalizados atrav´es dos pipes para o pr´oximo componente. 2.3.1.2 Camadas Este estilo arquitetural estrutura o sistema num conjunto de camadas, onde cada uma delas agrupa um conjunto de tarefas num determinado n´ıvel de abstra¸c˜ao. Geralmente as camadas num n´ıvel inferior oferecem servi¸cos `a camada de n´ıvel superior. A arquitetura em camadas n˜ao especifica qual deveria ser a granularidade dos componentes. Entretanto, componentes complexos normalmente exigir˜ao decomposi¸ca˜o adicional. A Figura 2.6 exibe a arquitetura da internet TCP/IP formada por quatro camadas distintas. No estilo em camadas, diferentemente do estilo pipes e filtros, pode haver comunica¸c˜ao entre os componentes em ambos os sentidos..
(30) 14. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. Figura 2.6 Arquitetura de de Internet TCP/IP.. 2.3.1.3 Objetos O estilo arquitetural de objetos tem como base o uso de um tipo de dados abstrato: o objeto. Dessa forma o sistema de software ´e visto como um conjunto de objetos comunicantes com estado associado a eles e opera¸co˜es associados `aqueles estados. Os objetos podem requisitar e oferecer servi¸cos. Neste caso, quando um objeto precisa se comunicar com outro, ´e necess´ario que ele conhe¸ca a identidade do objeto ao qual a mensagem ser´a enviada. A desvantagem da utiliza¸ca˜o desse estilo ´e justamente a dependˆencia entre os objetos que se comunicam, visto que esses precisam fazer uma chamada expl´ıcita atrav´es da referˆencia do objeto alvo, diminuindo a possibilidade de reuso do componente. 2.3.1.4 Invoca¸c˜ ao Impl´ıcita Tamb´em conhecido na ´area de sistemas distribu´ıdos como estilo publisher/subscriber. Diferentemente do estilo arquitetural com base em objetos, no qual um componente (objeto) invoca o outro diretamente por meio de passagem de mensagens, o estilo arquitetural de invoca¸ca˜o impl´ıcita requer que os componentes interessados em um evento registrem-se a fim de recebˆe-lo. Assim, componentes podem tanto registrar interesse em receber eventos quanto em divulgar eventos. Tais eventos podem e, provavelmente, contˆem dados. Nesse caso, o sistema disp˜oe de um mecanismos para tratamento de eventos, o qual encarrega-se de encaminhar os eventos aos componentes destinat´arios. 2.3.1.5 Quadro-Negro O estilo quadro-negro ou blackboard originou-se no campo da inteligˆencia artificial, no qual ele era utilizado como um mecanismo para compartilhamento de conhecimento ou dados por v´arios componentes inteligentes. Esse etilo considera a existˆencia de um reposit´orio central de dados circundado por um conjunto de componentes (c´elulas do conhecimento). O estilo arquitetural quadro-negro consiste basicamente em trˆes componentes: as c´elulas do conhecimento que possuem o conhecimento necess´ario para solucionar um.
(31) ˜ DE ARQUITETURA 2.4 LINGUAGENS DE DESCRIC ¸ AO. 15. problema ou parte dele; a estrutura de dados quadro-negro, um banco de dados compartilhado que possui dados de solu¸c˜ao de problemas que s˜ao acessados pelas c´elulas de conhecimento, e o controle, que faz com que as c´elulas de conhecimento respondam de forma oportunista `as mudan¸cas no quadro-negro. As c´elulas de conhecimento podem ser ativadas atrav´es do estado do quadro-negro. Dessa forma, as c´elulas de conhecimento respondem `as altera¸c˜oes que acontecem no ´ importante observar que o fluxo de controle do sistema n˜ao ´e expliquadro-negro. E citamente definido. Em vez disso, o fluxo de controle ´e determinado pelo conjunto de componentes ativos em um determinado instante. 2.3.1.6 Cliente-Servidor Este estilo permite que v´arias tarefas sejam divididas entre produtores e consumidores de dados. Um servidor ´e um processo que fica num estado de espera, aguardando solicita¸ca˜o de servi¸co de um ou mais clientes. O servidor pode trabalhar de forma s´ıncrona ou ass´ıncrona. Quando operando de modo s´ıncrono, o servidor retorna o controle ao cliente no mesmo instante em que ele envia os dados resultantes. Se o servidor trabalhar de forma ass´ıncrona, o servidor n˜ao necessariamente retorna os dados resultantes ao cliente no mesmo instante da solicita¸ca˜o. Os clientes no estilo arquitetural cliente-servidor podem ser vistos como processos que atuam de forma independente, isto ´e, a execu¸ca˜o de um processo n˜ao interfere em outro. Esta independˆencia entre processos facilita a remo¸ca˜o/inser¸ca˜o de clientes e facilita a modifica¸ca˜o da funcionalidade de um cliente visto que os outros n˜ao ser˜ao afetados. 2.4. ˜ DE ARQUITETURA LINGUAGENS DE DESCRIC ¸ AO. Nas se¸co˜es anteriores foram apresentados princ´ıpios gerais que devem ser utilizadas para a cria¸ca˜o do projeto da arquitetura do software. Seguindo esses princ´ıpios, deve-se usar mecanismos que possam documentar decis˜oes e valid´a-las caso seja necess´ario. Segundo Clements [Cle96] existem trˆes vis˜oes que podem ser utilizadas para documenta¸c˜ao da arquitetura. A vis˜ ao baseada nas estruturas c´odigo (vis˜ao l´ogica) utiliza m´odulos, pacotes e classes com relacionamentos de dependˆencia, uso, heran¸ca, etc. Nesse tipo de documenta¸c˜ao normalmente s˜ao utilizados figuras e diagramas que dificultam a an´alise de propriedades da arquitetura. A vis˜ao baseada nas estruturas de execu¸c˜ ao, tamb´em chamada vis˜ ao de componentes e conectores (C&C), utiliza componentes, conectores e sistemas para indicar as regras de comunica¸ca˜o. A vis˜ao baseada nas estruturas de aloca¸c˜ ao (vis˜ao f´ısica ou vis˜ao de implanta¸c˜ ao) mapeia elementos das duas primeiras vis˜oes em entidades n˜ao-software, tais como configura¸co˜es f´ısicas (rede, CPU, etc) ou desenvolvimento de equipes. Neste trabalho o foco ser´a na modelagem da arquitetura baseada na vis˜ ao das estruturas de execu¸c˜ ao, ou vis˜ ao de componentes e conectores (C&C). Essa abordagem facilita a an´alise de propriedades cr´ıticas do sistema como disponibilidade, seguran¸ca e desempenho. A Figura 2.7 ilustra os principais conceitos da vis˜ao de componentes e conectores: o component que modela o elemento computacional principal e que possui um conjunto de ports que modelam as interfaces de comunica¸ca˜o do componente; o connector que.
(32) 16. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. Figura 2.7 Vis˜ao Componente e Conector [GMW97].. modela os caminhos de comunica¸c˜ao entre os componentes e que possuem um conjunto de roles que modelam as especifica¸co˜es requeridas para o componente que usar o conector; e os systems que agrupam um conjunto de componentes, conectores e configura¸co˜es entre estes. Esta vis˜ao da arquitetura ´e utilizada pelas maioria das linguagens de descri¸ca˜o arquitetural. As Linguagens de Descri¸ca˜o de Arquitetura (LDAs) s˜ao linguagens formais que podem ser utilizadas para representar a arquitetura de um sistema de software [Cle96]. Elas tentam suprir as falhas de abordagens informais de representa¸ca˜o, como figuras e diagramas, incluindo caracter´ısticas sofisticadas de an´alise e teste que permitem guiar as decis˜oes de projeto. O uso de abordagens formais na ind´ ustria ainda n˜ao ´e largamente difundido, entretanto, com o incremento da complexidade dos novos softwares, a utiliza¸ca˜o de abordagens formais torna-se um mecanismo efetivo para antecipa¸ca˜o de problemas que s´o poderiam ser identificados na fase de desenvolvimento, caso mecanismos formais n˜ao fossem utilizados. Um grande n´ umero de linguagens de descri¸c˜ao de arquitetura tˆem sido definidas para descrever, modelar, checar e implementar arquiteturas de software [MT00]. Alguns exemplos de LDAs s˜ao: • Wright [AG97] permite que arquitetos especifiquem protocolos de comunica¸ca˜o temporal e checar propriedades como livre de deadlock. A semˆantica de intera¸c˜ao entre os componentes ´e especificada em CSP. Ela tem um extens´ıvel sistema de tipos e suporta a defini¸ca˜o de estilos arquiteturais, mas n˜ao suporta evolu¸ca˜o de seus componentes. • SADL [Pon87] formaliza arquiteturas em termos de teorias, mostra como opera¸c˜oes de refinamentos gen´ericas podem ser provadas corretas, e descreve um n´ umero de padr˜oes de refinamentos flex´ıveis. • Rapide [ML97] ´e uma linguagem para especifica¸c˜ao de sistemas distribu´ıdos de grande escala. Suporta especifica¸c˜ao comportamental baseada em eventos e a simula¸ca˜o de arquiteturas reativas. Os componentes em Rapide s˜ao representados como interfaces cujos pontos de comunica¸ca˜o consistem de ”provides”, ”requires”, ”actions” e ”services”. Rapide tem um extens´ıvel sistema de tipos, suporta parametriza¸ca˜o de tipos e heran¸ca estrutural atrav´es de subtipos..
(33) ˜ DE ARQUITETURA 2.4 LINGUAGENS DE DESCRIC ¸ AO. 17. • Aesop [MG96] ´e um sistema para desenvolvimento de projetos orientados a estilos arquiteturais. Aesop caracteriza estilos arquiteturais como especializa¸co˜es de um modelo de objetos gen´erico atrav´es de sub-tipos. Isto ajuda na gera¸ca˜o de projetos de estilos espec´ıficos e na constru¸c˜ao de fam´ılias de sistemas dentro do escopo desse estilo. • C2 [MORT96] tem um sistema de tipos extens´ıvel para componentes e conectores. A comunica¸ca˜o entre os componentes ´e realizada atrav´es de mensagens e os relacionamentos casuais entre mensagens de entrada e sa´ıda d´a a semˆantica. Ela suporta a evolu¸c˜ao de componentes permitindo sub-tipos de nome, interface e comportamento. Dinamismo ´e poss´ıvel em termos de adi¸c˜ao, exclus˜ao e reconfigura¸co˜es. • ArchJava [ACN02] ´e uma ADL projetada para dar suporte a mudan¸cas dinˆamicas em arquiteturas distribu´ıdas de forma dinˆamica. Diferente de outra abordagens que desacoplam o projeto da arquitetura da implementa¸ca˜o, ArchJava unifica projeto e implementa¸ca˜o garantindo que a implementa¸ca˜o obedece as restri¸c˜oes arquiteturais. A abordagem evita inconsistˆencias e confus˜oes entre o modelo e o c´odigo que possam violar as propriedades da arquitetura e inibir a evolu¸ca˜o do software. O grande n´ umero de LDAs existentes na literatura traz como vantagem a explora¸ca˜o de diversos problemas no projeto da arquitetura. Mesmo possuindo muitas caracter´ısticas em comum cada LDA trabalha de forma diferente, tornando dif´ıcil combinar as facilidades que cada LDA apresenta. Outro problema ´e a falta ferramentas para prover suporte integrado a utiliza¸ca˜o de v´arias LDAs. O esfor¸co pode se tornar grande, caso v´arios LDAs sejam necess´arias para an´alise da arquitetura. Para resolver esses problemas surgiu a linguagem ACME [GMW97], detalhada a seguir. 2.4.1. ACME. ACME [GMW97] ´e uma linguagem de intercˆambio de arquiteturas usada para mapear especifica¸co˜es atrav´es de diferentes LDAs. Ela suporta um sistema de tipos extens´ıvel para componentes e conectores e a evolu¸ca˜o ´e possibilitada atrav´es da utiliza¸ca˜o do mecanismo de representa¸c˜oes. ACME possui limita¸co˜es quanto a verifica¸ca˜o de propriedades da arquitetura, como concorrˆencia e disponibilidade, verific´aveis em outras linguagens. Dessa forma, caso fosse necess´ario verificar essas propriedades, seria necess´ario utilizar outra LDA e em seguida mapear essa especifica¸ca˜o para ACME. A linguagem ACME foca na descri¸c˜ao da estrutura do sistema e como esta estrutura pode evoluir ao longo do tempo. Para a descri¸c˜ao da arquitetura, sete constru¸co˜es principais s˜ao utilizadas pela linguagem: components, connectors, ports, roles, systems, representations, e properties. Os components representam o elemento de computa¸ca˜o prim´ario. Exemplos t´ıpicos incluem clientes, servidores, filtros, objetos, entre outros. As interfaces de comunica¸c˜ao dos components s˜ao definidas por um conjunto de ports. Cada port identifica um ponto de intera¸c˜ao entre o componente e o ambiente. Um componente pode prover m´ ultiplas interfaces atrav´es da utiliza¸ca˜o de v´arias ports..
(34) 18. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. Os connectors representam as intera¸co˜es entre os components, mediando a comunica¸c˜ao e coordenando as atividades entre estes. Exemplos incluem simples formas de intera¸c˜ao como pipes, chamada a procedimento e o protocolo cliente-servidor. As interfaces de comunica¸c˜ao dos connectors s˜ao definidas por roles. Cada role de um connector define um participante da intera¸c˜ao representada pelo connector. Systems representam configura¸c˜oes de components e connectors. Um system inclui um conjunto de components, um conjunto de connectors e um conjunto de attachments que descrevem a topologia do sistema. Um attachment descreve o relacionamento entre um connector e um component pela associa¸ca˜o da interface port do component com a interface role do connector. A Listagem 2.4 exibe um exemplo de uma arquitetura com dois components: um client e um server conectados pelo connector rpc (Linhas 2, 3, e 4 respectivamente). O component client declara uma u ´nica port, send-request (Linha 2), e o component server tamb´em declara uma u ´nica port, receive-request (Linha 3). O connector possui dois roles denominados caller e callee (Linha 4). A topologia do sistema ´e declarado pelo conjunto de attachments (Linhas 5-8). Listing 2.4 Especifica¸c˜ao Acme Simples de um Arquitetura Cliente-Servidor. 1 2 3 4 5 6 7 8 9. System s i m p l e c s = { Component c l i e n t = { Port send−r e q u e s t } Component s e r v e r = { Port r e c e i v e −r e q u e s t } Connector r p c = { R o l e s { c a l l e r , c a l l e e } } Attachments { c l i e n t . send−r e q u e s t t o r p c . c a l l e r ; s e r v e r . r e c e i v e −r e q u e s t t o r p c . c a l l e e } }. Representations s˜ao um mecanismo provido por ACME para dar suporte a decomposi¸ca˜o hier´arquica. Esse mecanismo permite representar qualquer component ou connector de uma forma mais detalhada atrav´es de uma descri¸c˜ao de mais baixo n´ıvel. Cada descri¸c˜ao ´e denominado representation e cada entidade pode possuir mais de uma, permitindo m´ ultiplas vis˜oes da mesma entidade. A Property ´e o mecanismo provido por ACME para anotar decis˜oes de projeto, geralmente informa¸c˜ao n˜ao-estrutural. Todas as entidades arquiteturais descritas anteriormente podem ser anotadas com properties. A declara¸ca˜o de uma property ´e uma tripla formada pelo nome, tipo e valor. A linguagem provˆe um s´erie de tipos pr´e-definidos, como por exemplo, string, float, enum, sequence, set e record. A linguagem tamb´em permite que novos tipos sejam criados. Listing 2.5 Especifica¸c˜ao Acme de um Arquitetura Cliente-Servidor com Properties. 1 2 3 4 5 6 7 8 9 10. System s i m p l e c s = { Component c l i e n t = { Port send−r e q u e s t ; Properties { r e q u e s t −r a t e : f l o a t = 1 7 . 0 ; s o u r c e −code : e x t e r n a l − f i l e = ”CODE−LIB/ c l i e n t . c ” } } Component s e r v e r = { Port r e c e i v e −r e q u e s t ;.
(35) ˜ DE ARQUITETURA 2.4 LINGUAGENS DE DESCRIC ¸ AO 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30. 19. Properties { i d e m p o t e n t : boolean = true ; max−c o n c u r r e n t −c l i e n t s : i n t e g e r = 1 ; s o u r c e −code : e x t e r n a l − f i l e = ”CODE−LIB/ s e r v e r . c ” } } Connector r p c = { Role c a l l e r ; Role c a l l e e ; Properties { s y n c h r o n o u s : boolean = true ; max−r o l e s : i n t e g e r = 2 ; p r o t o c o l : Wright = ” . . . ” } } Attachments { c l i e n t . send−r e q u e s t t o r p c . c a l l e r ; s e r v e r . r e c e i v e −r e q u e s t t o r p c . c a l l e e } }. A Listagem 2.5 descreve uma extens˜ao da Listagem 2.4 anotada com properties que descrevem caracter´ısticas dos elementos estruturais do sistema. Essas constru¸c˜oes tamb´em podem ser utilizadas para dar suporte ao intercˆambio entre diferentes LDAs. A Figura 2.8 ilustra uma dessas possibilidades. Quando, por exemplo, os desenvolvedores de Wright precisassem utilizar as caracter´ısticas de Rapide para simular e animar as descri¸co˜es arquiteturais. Assim, descri¸c˜oes em Wright seriam num primeiro passo traduzidas para ACME, num segundo passo a descri¸ca˜o em ACME seria alterada para incluir propriedades espec´ıficas de Rapide e, finalmente, a descri¸c˜ao Rapide seria produzida [GMW97].. Figura 2.8 Vis˜ ao Componente e Conector.. Outra caracter´ıstica importante da linguagem ACME ´e a especifica¸ca˜o de estilos arquiteturais que podem ser reutilizados em v´arios sistemas. Uma especifica¸ca˜o de um estilo arquitetural consiste num conjunto de defini¸c˜oes de tipos, um conjunto de design rules, um conjunto de regras de an´alise e um conjunto de estruturas m´ınimas requeridas. A linguagem ACME tamb´em possui uma ferramenta de modelagem bastante poderosa, o AcmeStudio [SG04], que permite a arquitetos modelar facilmente novas arquiteturas e estilos arquiteturais e utilizar estilos arquiteturais pr´e-definidos. A ferramenta.
(36) 20. PROJETO DE ARQUITETURA DE SOFTWARE ORIENTADO A ASPECTOS. foi escrita como um plugin do framework Eclipse IDE possibilitando que novas caracter´ısticas sejam facilmente adicionadas. A Figura 2.9 mostra um exemplo da arquitetura cliente-servidor sendo criada pela ferramenta.. Figura 2.9 Ferramenta AcmeStudio.. 2.4.2. AspectualAcme. No n´ıvel do projeto da arquitetura os interesses transversais come¸cam a surgir de forma significativa e precisam ser tratados adequadamente para evitar problemas nas fases subseq¨ uentes. A linguagem AspectualAcme [BCG+ 06], estende a linguagem ACME e provˆe uma solu¸ca˜o simples para tratamento desses interesses transversais atrav´es da utiliza¸c˜ao do aspectual connector. O Aspectual Connector (AC) ´e um connector regular com uma nova interface. O principal objetivo dessa nova interface ´e realizar a distin¸c˜ao entre os componentes participantes da intera¸c˜ao transversal. Assim a constru¸ca˜o base role ´e a interface para o componente base e o crosscutting role ´e a interface para o componente aspectual. H´a ainda uma cl´ausula glue que informa como se dar´a a intera¸ca˜o entre esses dois componentes. A Figura 2.10 descreve a composi¸c˜ao entre um componente aspectual e dois compo-.
Documentos relacionados
No código abaixo, foi atribuída a string “power” à variável do tipo string my_probe, que será usada como sonda para busca na string atribuída à variável my_string.. O
Por último, temos o vídeo que está sendo exibido dentro do celular, que é segurado e comentado por alguém, e compartilhado e comentado no perfil de BolsoWoman no Twitter. No
A anotação que se faz sobre tais normas é que, da forma como estão sendo elaboradas, privilegiam muito mais a manutenção de um sistema de visitação turística que é elitista e
Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição
Se o aluno não cursar a disciplina: METODOLOGIA DA PESQUISA CIENTÍFICA, só poderá entregar o Trabalho de Conclusão de Curso, após ter reaberto e cursado a
O teste de patogenicidade cruzada possibilitou observar que os isolados oriundos de Presidente Figueiredo, Itacoatiara, Manaquiri e Iranduba apresentaram alta variabilidade
Capítulo 7 – Novas contribuições para o conhecimento da composição química e atividade biológica de infusões, extratos e quassinóides obtidos de Picrolemma sprucei
Para esse fim, analisou, além do EVTEA, os Termos de Referência (TR) do EVTEA e do EIA da Ferrogrão, o manual para elaboração de EVTEA da empresa pública Valec –