• Nenhum resultado encontrado

SystemCodeEJB

2.5 A LINGUAGEM THEME/UML

Theme/UML (CLARKE e WALKER, 2001, CLARKE e WALKER, 2002) é 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/UML define um Theme como um elemento de projeto com uma coleção de estruturas e comportamentos que representam características do sistema que se deseja modelar.

Múltiplos themes podem ser combinados ou integrados para formar um sistema. Para tanto, themes são introduzidos em Nível de Projeto e modelados sob duas perspectivas:

base; e themes transversais (aspectos) que tem o comportamento que sobrescreve as funcionalidades dos themes base a fim de inserir ou modificar o comportamento no Modelo Base de acordo com requisitos do sistema.

A Composição de padrões foi introduzida como parte do projeto orientado a modelo em (CLARKE et al., 1999). Ele foi baseado na combinação de modelos de projetos orientados a tema (theme) para a composição e separação de composições através de gabaritos (templates) UML. Os temas são denotados com o estereótipo UML “<theme>” em um pacote UML. Temas de projeto podem especificar comportamentos transversais para serem compostos com outros temas de projeto dentro da modelagem de projeto orientada a temas. Através da parametrização de tais temas de projeto, do provimento de um mecanismo para interligar tais parâmetros e modelar elementos em outros temas de projeto, nós podemos especificar a composição de comportamentos de conceitos transversais com o projeto base de forma reusável.

A UML define o termo gabarito como um elemento de modelo parametrizado que não pode ser usado diretamente em um modelo de projeto. Ao invés disso, ele pode ser usado como base para gerar outros elementos do modelo usando para tal, uma relação de dependência, o binding. Uma relação de binding define argumentos para substituir cada elemento do parâmetro do gabarito por outros elementos do modelo. A UML permite que parâmetros de gabarito sejam descritos através de uma caixa pontilhada sobre a classe gabarito. Os parâmetros de uma classe gabarito são especificados em agrupamentos dentro de “< parâmetros >”.



Figura 4 ilustra uma composição de padrões com uma classe padrão, TradeClass, denotando que qualquer classe pode ser complementada com comportamento de rastreabilidade (Tracebility representado por Trace). Um parâmetros de gabarito é definido para a TraceClass, chamada de “_traceOp()”, que representa qualquer operação que requer o comportamento de rastreabilidade.

Uma classe padrão, chamada Trace, é também incluída no projeto. O projeto do comportamento de rastreabilidade é agora contido no modelo do padrão de composição de rastreabilidade, com referências feitas para classe padrão e as operações de gabarito quando requerido.

O comportamento transversal essencialmente deve complementar (ou se unir) ao comportamento que ele corta. O suporte ao modelo de projeto orientado a temas da operação permite que um projetista possa identificar operações em diferentes temas de projeto correspondente e que estes possam ser unidos. Isto é alcançado pelo modelo com a geração de um modelo de interação compreendendo a operação de composição e a delegação a cada uma das operações de entrada correspondentes (Figura 5). Esta semântica pode ser utilizada para especificação de padrões de comportamento transversal através de um diagrama de seqüência UML. No diagrama da Figura 5 o projeto pode explicitamente se referir a entrada e a composição de operações separadamente. O projetista define uma operação de entrada como um parâmetro de gabarito e faz referencia para um atual, substituindo operações que tem como precedente o caractere traço (“_”) no nome do gabarito. A saída da operação de geração é referenciada com o mesmo nome, mas sem preceder de traço.

Figura 5. Diagrama de Seqüência da composição entre as classes Trade e TradeClass.

Como especificado pelo padrão de composição da Figura 5, a execução de qualquer operação que substitua o gabarito “_tracedOp(..)” irá, na saída do theme, resultar na execução de “tradeEntry()” antes da execução da operação de substituição e na execução de “tradeExit()” depois da execução da operação de substituição. A especificação do parâmetro “..” de “_tradeOp(..)” indica que operações de substituição com qualquer assinatura podem vir a substituir o gabarito. A possibilidade de parâmetros estão definidas na Tabela 1. Este padrão de composição do theme Trace efetivamente especifica a junção do comportamento de rastreabilidade com qualquer substituição de operação “_tracedOp(..)”.

Tabela 1. Formatações possíveis para os parâmetros de gabarito para o Theme/UML

Parâmetro Uso

Op() No caso da operação de substituição que não tem parâmetros.

Op(..) No caso da operação de substituição que pode ter qualquer assinatura.

Op(.., tipo, ..) No caso de operações de substituição que podem ter qualquer parâmetro de substituição, mas que tem um tipo específico de objeto.

2.5.1 Especificação de Bindings de Composição

O modelo de projeto orientado a theme define um relacionamento de composição para suporte a especificação de como themes diferentes podem ser integrados a uma saída

composta, e a UML define a relação de ligação entre gabaritos e elementos que são substituídos por tais gabaritos, como pode ser visto na Figura 6. A UML limita os ligadores para parâmetros de gabaritos na cardinalidade de um-para-um. A ordenação de parâmetros nos conectores de “bind [ ]” casam com a ordenação dos gabaritos no padrão da caixa de gabarito. Qualquer parâmetro individual agrupado em “{}” indica que o conjunto de elementos, com o tamanho maior ou igual a um (>= 1), substitui o parâmetro de gabarito correspondente.

Figura 6. Exemplo de parâmetro de gabarito.

A especificação de como comportamentos transversais afetam muitos pontos de junção, sem explicitamente referenciar-los é possível com Theme/UML através do uso de

wildcards que permitem que vários pontos de junção possam ser referenciados indiretamente

dentro de uma declaração de ligação (bind).

Na Figura 6, todas as classes dentro de S1 são substituídas por padrões TradeClass, com todas operações (denotadas por {*}) em que cada classe (no exemplo, apenas S1.X) complementada o padrão de comportamento especificado por _tracedOp(..). Os elementos específicos de classes de gabaritos substituídos podem ser explicitamente nomeados no bind.

2.5.2 Saída da Composição

Como ilustrado na Figura 6 a relação de composição dos conectores de bind[] podem especificar múltiplas substituições para padrões de classes e operações de gabarito dentro destas classes, onde substituições múltiplas são especificadas por uma classe padrão. Os padrões das propriedades de classes são adicionados a cada uma das classes substituídas na saída do theme. Por exemplo, na Figura 7, a classe X tem as propriedades da TradeClass, onde múltiplas substituições são especificadas para operações. Cada operação é complementada com o comportamento definido dentro do padrão de theme.

Nenhum elemento de parâmetro de gabarito é adicionado para cada resultado dentro do escopo. Por exemplo, nenhum padrão de classe é adicionado sem que um par de operações seja definido (exemplo, tracedOp() e _tracedOp()) e referenciado dentro do mesmo padrão de classe, e algum elemento e um parâmetro de gabarito para aquela classe. Para cada substituição de operação de gabarito, cada referencia a _tracedOp() é substituída pela renomeação de sua respectiva operação adequada, e uma nova interação para tracedOp é também definida. Cada semântica da delegação de operações é concretizado por uma nova colaboração como especificado dentro do padrão de composição.

A Composição do theme do projeto pode ocorrer durante a fase de projeto, que pode ser usada para o propósito de checar a semântica dos themes compostos e a correção da relação de composição. A Implementação pode ser baseada em tal projeto de composição, mas idealmente, a composição pode ser atrasada até antes da fase de implementação, com cada theme de projeto sendo implementado separadamente.

Figura 7. Substituição dos parâmetros de gabarito no diagrama de seqüência que relaciona Trace e a classe X.