• Nenhum resultado encontrado

PROPAGAÇÃO DOS CONCEITOS DO NÍVEL ARQUITETURAL PARA O NÍVEL DE PROJETO

SystemCodeEJB

3 ABORDAGEM DE DSOA ACRESCIDO DO MODELO CONCEITUAL

3.8 PROPAGAÇÃO DOS CONCEITOS DO NÍVEL ARQUITETURAL PARA O NÍVEL DE PROJETO

Finalizando o processo MDD deste trabalho, os conceitos instanciados em Nível de Arquitetura são propagados para o Nível de Projeto. Para instanciar o Nível de Arquitetura no Nível de Projeto, escolhemos a abordagem Theme/UML.

Theme/UML é uma abordagem que fornece uma visão simétrica para representar e modularizar conceitos da Orientação a Aspectos e Orientação a Objetos em Nível de Projeto. Theme/UML permite que o projetista desenvolva conceitos base e conceitos aspectuais de um sistema e especifique como se dá a composição relacional entre eles. A abordagem Theme define um Theme como um elemento de projeto, uma coleção de estruturas e comportamentos que representam características do sistema que se deseja modelar.

Em termos práticos, podemos utilizar um perfil UML com estereótipos da abordagem Theme/UML para modelar sistemas seguindo a abordagem DSOA. O site que hospeda o Theme/UML (Theme/UML, 2004) fornece um perfil para UML 2.0 com os estereótipos necessários para seguir a abordagem Theme. A Figura 38 ilustra os estereótipos e as propriedades do perfil Theme/UML. O estereótipo theme pode ser aplicado a pacotes e possui a propriedade template para especificar quais são os métodos gabarito do theme. O estereótipo

merge estende a definição de associação de dependência da UML e declara algumas

bind que também estende a associação de dependência da UML e permite a declaração de bindings entre os themes que implementam as funcionalidades de aspectos e os themes base.

Figura 38. Perfil UML do Theme/UML.

Em contato com o grupo de pesquisa que mantém a AO-ADL, nos foi informado que existe na ferramenta de apoio a descrição em AO-ADL (AO-ADL Tool Suite, 2007) uma transformação da AO-ADL para o Theme/UML. Investigando a ferramenta, percebemos que além do perfil Theme/UML, a ferramenta utilizava um perfil AO-ADL que estende o componente UML para permitir a descrição de conectores como componentes da UML, logo nós também utilizamos esse perfil AO-ADL. A Figura 39 ilustra o Perfil UML para a AO- ADL. O estereótipo aoadlConnector é aplicado aos componentes que representam os

conectores aspectuais transformados para Theme/UML. Mais detalhes sobre tal transformação é tratada mais adiante nesta seção.

Figura 39. Perfil UML da AO-ADL.

Como descrito na Seção 3.1, o processo de transformação para Theme/UML tem como entradas a descrição do sistema base e aspectos em AO-ADL e o Modelo de Projeto, sendo que, para nosso trabalho utilizamos o modelo de projeto Theme/uml. No processo de transformação, para cada conector, componente ou adendo é criado um pacote UML o qual é estereotipado como theme.

Para os pacotes criados a partir de componentes AO-ADL, são criados componentes e interfaces UML que representam os elementos da arquitetura do sistema. Cada componente possui portas com os mesmos nomes das interfaces da arquitetura do sistema. As portas se relacionam com as interfaces através de associações do tipo “Usage” da UML, para representar interfaces providas, e “Interface Realization” da UML para interfaces requeridas. Um exemplo do resultado dessa transformação pode ser visto na Figura 40. A Figura 40 ilustra o pacote AddPhotoAlbum (descrito como componente na AO-ADL) como um theme, duas interfaces, provShow, command, e o componente UML AddPhotoAlbum. As Portas são relacionadas às interfaces através das associações de uso (Usage) provShow e realização (Interface Realization) command.

Figura 40. Exemplo de mapeamento de um componente arquitetural para Theme/UML.

Os conectores em AO-ADL também são transformados em themes do Theme/UML. Para cada conector é criado um pacote e estereotipado como theme. Os papéis de interfaces do conector são transformados em Interfaces UML. Os conectores são transformados em componentes UML e estereotipados com “aoadlconnector”. Os componentes interligados pelo conector também são transformados em componentes. O elemento UML Connector liga as portas dos componentes UML, que antes eram ligados pelos conectores arquiteturais. Um exemplo da transformação para Theme/UML do conector Show_Cnn_1 é mostrado na Figura 41. A Figura 41 ilustra os componente AddPhotoAlbum, BaseController_ e showCnn_1. Os

conectores UML AddPhotoAlbumprovShow_2_showCnn_1provShowRole e

BaseController_reqShowAdd_2_showCnn_1reqShowRole ligam os componentes

BaseController_ a AddPhotoAlbum. O relacionamento entre os themes que representam componentes da AO-ADL e os que representam conexões da AO-ADL são feitos com associações de dependência estereotipadas como “merge”. A Figura 42 mostra um exemplo de associação de dependência merge e seus atributos.

Figura 42. Exemplo da associação de dependência merge.

Os adendos também são transformados em themes. A Figura 43 mostra um exemplo de um adendo que foi transformado em um theme. O componente aspectual associado ao conector aspectual foi transformado em um componente UML e associado a um componente genérico (GenericComponent da Figura 43) através da interação entre a porta genérica (somePort) do componente genérico e interface que representa a interface aspectual do componente aspectual, no caso da Figura 43, o componente aspectual é o componente

Figura 43. Exemplo de mapeamento de um adendo AO-ADL arquitetural para Theme/UML.

A Figura 44 mostra a propriedade template de um pacote estereotipado como theme. Nele podemos especificar os métodos gabaritos dos themes. A propriedade Template especifica somePort.method() como o método que será substituído quando houver o weaving entre os themes que representam aspecto e os themes base.

A associação dos themes que representam aspectos é feita por associações de dependências estereotipadas como bind. A propriedade binding da Figura 45 especifica quais pontos de junção serão selecionados pelos themes associados a tal dependência. No caso deste exemplo, a propriedade binding define que todos os componentes e todas as interfaces serão selecionados pelo theme aspectual associado.