IV. FUAT ( TEK) BEY
2.3.8 Kibrit Tüketim Vergisi
A Tabela 2 resume as regras de mapeamento entre os modelos PL-AOVgraph e PL- AspectualACME.
Tabela 2: Regras de mapeamento entre PL-AOVgraph e PL-AspectualACME
PL-AOVgraph PL-AspectualACME
1 Aspect_Oriented_Model Family
2 GoalModel System
3
Task/Goal/Softgoal com Contribuição
“and”, “or”, “xor” ou “inc-or”
Component + Port + Property ElementType VariationPointT + Port + VariationPortT +Property ElementType + property Variants OptionalT + Port + VariationPortT +Property ElementType + property Variants AlternativeT + Port + VariationPortT +Property ElementType + property Variants InclusiveOrT + Port + VariationPortT + Property ElementType + property Variants Representation/System/Component + Ports + Property ElementType + property Variants
4 Correlation Make Analysis Requires
5 Correlation Break Analysis Excludes
6 Correlation hurt, unknown, help Property hurt, unknown, help
7
Propriedades (CardinalityMin, Cardina- lityMax, CardinalityGroupMin, Cardina- lityGroupMax, isFeature, GroupFeature e Generic Property)
Property
8 Relacionamento transversal (Crosscut-ting) Connector aspectual + Attachments
Como já foi exposto, o processo de mapeamento é bidirecional, ou seja, as transforma- ções entre os elementos de PL-AOVgraph e de PL-AspectualACME ocorrem nos dois senti- dos. Assim, temos que:
1. Aspect_Oriented_Model, de PL-AOVgraph é transformado em Family de PL- AspectualACME e vice-versa, pois representam o modelo em sua totalidade; 2. Goal_Model, de PL-AOVgraph, que representa o elemento raiz do modelo, é
transformado em System de PL-AspectualACME e vice-versa;
3. Task, Goal ou SoftGoal, de PL-AOVgraph são transformados em Components (se for elemento do primeiro nível da hierarquia de features) ou Representations (se for de segundo nível em diante) com System e Component. Os Components gera- dos podem ser do tipo VariationPointT, OptionalT, AlternativeT, InclusiveOrT, de acordo com o tipo de contribuição do elemento de origem (and, or, xor ou inc-or). Cada Component recebe uma Property do tipo ElementType, que definirá a partir de que tipo de elemento (task, goal ou softgoal) de PL-AOVgraph foi gerado, além de uma porta. Se for um ponto de variação recebe, também, uma Property do tipo Variants, que lista as suas variantes, e uma VariationPortT.
4. Correlation Make, de PL-AOVgraph, é transformado em Analysis Requires de PL- AspectualACME e vice-versa;
5. Correlation Break, de PL-AOVgraph, é transformado em Analysis Excludes de PL-AspectualACME e vice-versa;
6. Correlation Hurt, Unknown e Break de PL-AOVgraph, são transformadas em Pro- perties Hurt, Unknown e Break de PL-AspectualACME e vice-versa;
7. Properties de PL-AOVgraph são transformadas em Properties com o mesmo no- me em PL-AspectualACME e vice-versa;
8. Relacionamento transversal (Crosscutting) de PL-AOVgraph é transformado em Connector aspectual de PL-AspectualACME, gerando, também, Attachments. No sentido inverso, o conector aspectual gera o relacionamento transversal e os ele- mentos específicos desse relacionamento em PL-AOVgraph são gerados a partir de propriedades do conector e seus papéis (roles).
As regras de transformação buscam estender as regras definidas em MaRiSA-MDD (Medeiros, 2008). No entanto, com as atualizações nos metamodelos das duas linguagens, além da necessidade de representação de variabilidades e interações entre features nas trans- formações, apenas as regras mais básicas foram aproveitadas. Essas regras são as regras 2, 6 e 7.
As regras 1, 4 e 5 são novas, pois tratam de elementos que representam variabilidades (Family, na regra 1 e as interações entre features nas regras 4 e 5). A regra 8, apesar de já e- xistir em MaRiSA, é definida de forma diferente, uma vez que os metamodelos das lingua- gens sofreram alterações e os elementos que representam os relacionamentos transversais fo- ram diretamente afetados nessas alterações. Os metamodelos anteriores de AOV-Graph e de AspectualACME podem ser visualizados em Medeiros (2008).
A regra 3 é a que oferece a contribuição mais significativa para as transformações. Enquanto em MaRiSA, tínhamos um elemento de AOV-Graph (task, goal ou softgoal) sendo transformado em um componente de AspectualACME e vice-versa, em MaRiPLA, é nessa transformação que lidamos de forma mais direcionada com as variabilidades de LPS.
A Figura 17 ilustra as quatro situações que podem ocorrer no momento da transforma- ção.
Figura 17: Transformação de elementos PL-AOVgraph em elementos PL-AspectualACME
Na situação 1, quando o elemento PL-AOVgraph tem relacionamento de contribuição „and‟ e não tem filhos, a transformação ocorre de maneira similar ao que ocorre em MaRiSA: o elemento é transformado em um componente comum, obrigatório, de PL-AspectualACME. Na situação 2, o elemento com contribuição „and‟ e que tem filhos é transformado no elemen- to VariationPointT da arquitetura, pois corresponde a um ponto de variação.
Na situação 3, o elemento de PL-AOVgraph, tendo ou não filhos, se não for do tipo „and‟, é transformado em OptionalT (se tiver contribuição „or‟), AlternativeT (se for do tipo „xor‟) ou InclusiveOrT (se for „inc-or‟). Por fim, na situação 4, caso o elemento tenha um pai (feature do segundo nível em diante da hierarquia do modelo de features), é transformado no elemento Representation, que encapsula o elemento System, que contém o componente (cuja variabilidade é definida pelo elemento PL-AOVgraph que o gera).A Figura 18 apresenta um trecho de uma das regras de transformação de PL-AOVgraph para PL-AspectualACME, em que um elemento (task, goal ou softgoal), com contribuição „xor‟, com ou sem filhos, é trans- formado em um ponto de variação alternativo (AlternativeT).
-- 05 - Elemento de primeiro nível na hierarquia de features, com ou sem filhos e relacionamento de contribuição 'xor' é transformado em AlternativeT de plaspetua- lacme:
rule alternativeT{
from
elem : PLAOVgraph!Element ((elem.type=#task or elem.type=#goal or elem.type=#softgoal) and (elem.refImmediateComposite().oclType() = PLAOV- graph!Goal_Model)and (elem.hasContribution()) and
elem.getContribution()='xor')
to
var : PLAspectualACME!AlternativeT ( name <- elem.name,
property <- valProp,--gerando property elementType property <- valProp2,--gerando property variants
port <- valPort2, --gerando variation port port <- valPort --gerando port
... }
Figura 18: Trecho de regra de transformação ATL
Além de transformar o elemento PL-AOVgraph em um ALternativeT de PL- AspectualACME, a regra gera a propriedade ElementType, que determina a partir de qual elemento de PL-AOVgraph (task, goal ou softgoal) foi gerado o componente de PL- AspectualACME. Como o elemento gerado é um ponto de variação, é gerada, também a pro- priedade Variants, que lista as variantes desse ponto de variação. Além disso, para componen- tes, é gerada uma porta e, para pontos de variação, além da porta, uma VariationPortT.
No sentido inverso, as tranformações são mais simples. O componente PL- AspectualACME é transformado em um elemento PL-AOVgraph. Se houver a propriedade ElementType, esta define o tipo de elemento (task, goal ou softgoal). Se não houver, é gerada uma task. O tipo de contribuição é definido pelo tipo de componente (se obrigatório, opcional, alternativo ou inclusive-or).
Os Apêndices V e VI apresentam o conjunto completo das regras de transformação em ATL.