• Nenhum resultado encontrado

Criação do Modelo Ecore para Theme-SPL

No documento Inês Carvalho Nunes Simão (27179) (páginas 119-124)

8. Especificação da LDE para a Abordagem Theme-SPL

8.1 Criação do Modelo Ecore para Theme-SPL

Para a criação da LDE irão especificar-se os dois modelos Ecore (Eclipse/GMF wiki, 2009) para especificar a linguagem a ser construída.

O modelo Ecore consiste num metamodelo específico de uma LDE. Através deste modelo vão ser criadas todas as regras da LDE que se pretende construir, sendo por vezes necessário acrescentar algumas regras sintácticas recorrendo à linguagem Object Constraint Language (OCL) (OMG, 2005). O uso de OCL por vezes é necessário devido à incapacidade de se conseguir expressar todas as regras sintácticas de uma linguagem através do seu metamodelo.

98

Foi criado um modelo Ecore para a abordagem Theme-SPL e um modelo Ecore para o modelo de features, ambos adaptados para suportar Desenvolvimento Orientado a Modelos.

O modelo Ecore para a abordagem Theme-SPL contém um nó raiz, chamado ThemeApproach, ao qual estão ligadas as classes que representam os nós e as ligações entre os nós. Foram identificados os nós RootTheme, Themes, Aspect, Entity, ThemeGroup e GroupedTheme, e as ligações Obligatory, Alternative, Part_of, Crosscuting, Alternative_or, Alternative_xor, Require e Extend. Este modelo é apresentado na Figura 8.1.

Figura 8.1 Modelo Ecore da abordagem Theme-SPL

Seguidamente são apresentados todos os conceitos existentes no modelo Ecore, o seu objectivo dentro da linguagem, qual o conceito de Theme que lhe está associado e as respectivas relações entre eles:

99

• ThemeApproach: este elemento não representa um conceito de Theme, mas sim um “diagrama”, isto é, todos os elementos que lhe estão ligados são elementos possíveis de criar no editor da ferramenta Theme-SPL. Este elemento tem as seguintes ligações associadas:

− containsNode: liga os elementos de Theme-SPL e Nodes. Esta ligação está relacionada com a criação de nós com a ferramenta.

− containsLink: liga os elementos de Theme-SPL e Links. Esta ligação está relacionada com a criação de ligações com a ferramenta.

− containsCompartment: liga os elementos de Theme-SPL e ThemesCompartment. Esta ligação está relacionada com a possibilidade de criar compartimentos para guardar Themes, Entity, Aspect, ThemeGroup e GroupedTheme.

• Nodes: Representa todos os nós que podem ser construídos com a ferramenta. • RootTheme: Representa o tema raiz, ou seja, contém as partes em que o sistema

consiste. Tem um atributo String name que representa o nome da raiz.

• Themes: Representa um Tema da abordagem Theme. Tem um atributo String name que representa o nome do tema.

• Aspect: Representa um Aspecto da abordagem Theme. Tem um atributo String name que representa o nome do aspecto.

• Entity: Representa uma Entidade da abordagem Theme. Tem um atributo String name que representa o nome da entidade.

• ThemeGroup: Tema que permite agrupar dois ou mais GroupedTheme. Tem um atributo String name que representa o nome do ThemeGroup, String min que representa o número mínimo de GroupedThemes que o produto permite e String max que representa o número máximo de GroupedThemes que o produto permite. • GroupedTheme: Representa um conjunto de temas agrupáveis. Tem um atributo

100

• ThemesCompartments: Este compartimento destina-se a guardar Themes, Entity, Aspect, ThemeGroup e GroupedThemes da abordagem Theme-SPL. Tem um atributo name, do tipo String, para guardar o nome. Tem associadas as seguintes ligações:

− hasCompartmentEntity: liga o compartimento e o elemento Entity. Esta ligação representa a possibilidade de colocar Entity no compartimento. − hasCompartmentThemes: liga o compartimento e o elemento Themes. Esta

ligação representa a possibilidade de colocar Themes no compartimento. − hasCompartmentAspect: liga o compartimento e o elemento Aspect. Esta

ligação representa a possibilidade de colocar Aspects no compartimento. − hasCompartmentThemeGroup: liga o compartimento e o elemento

ThemeGroup. Esta ligação representa a possibilidade de colocar ThemeGroups no compartimento.

− hasCompartmentGroupedTheme: liga o compartimento e o elemento GroupedTheme. Esta ligação representa a possibilidade de colocar GroupedThemes no compartimento.

• Links: Representa todas as ligações que podem ser construídas com a ferramenta. Tem associado as seguintes ligações:

− linkToNodeFrom e linkToNodeTo: permitem relações entre todos os Nodes.

• Binary: Representa as ligações Obligatory e Alternative.

• Obligatory: Representa uma relação de obrigatoriedade entre dois ou mais temas. Tem um atributo String id que representa o nome da ligação.

• Alternative: Representa uma relação de opcionalidade entre dois ou mais temas. Tem um atributo String id que representa o nome da ligação.

101

• Part_of: Representa uma relação entre um tema e os temas que o compõe. Tem um atributo String id que representa o nome da ligação.

• Crosscuting: Representa o conceito de transversalidade entre aspectos e temas na abordagem Theme. Tem dois atributos, String id que representa o nome da ligação, e String type que indica qual o tipo de relação entre o aspecto e o tema (obligatory ou alternative). Tem associado as seguintes ligações:

− crosscutingToAspect: permite que as relações de crosscuting apenas tenham origem no Aspect;

− crosscutingToTheme: apenas permite que uma ligação de crosscuting tenha como classe de destino o Themes.

• AlternativesOrAnd: Representa as ligações Alternative_or e Alternative_xor. Tem associado as seguintes ligações:

− alternativeToGroupedTheme: permite que tanto as relações Alternative_or como Alternative_xor apenas tenham como origem a classe GroupedTheme;

− alternativeToThemeGroup permite que as ligações Alternative_or e Alternative_xor apenas tenham como destino a classe ThemeGroup.

• Alternative_or: Representa uma relação OR entre GroupedTheme e ThemeGroup. Tem um atributo String id que representa o nome da ligação.

• Alternative_xor: Representa uma relação XOR (ou exclusivo) entre GroupedTheme e ThemeGroup. Tem um atributo String id que representa o nome da ligação.

• Dependency: Representa as ligações Requires e Excludes.

• Requires: Representa uma relação entre dois temas independentes em que um dos temas precisa do outro. Tem um atributo String id que representa o nome da ligação.

102

• Excludes: Representa uma relação entre dois temas independentes em que se um deles está presente no produto o outro não pode estar. Tem um atributo String id que representa o nome da ligação.

As relações de obligatory, alternative, part_of, requires e excludes devem ter como destino qualquer uma das classes (RootTheme, Themes, Aspect, Entity e ThemeGroup), mas como origem apenas a classe Themes, Entity e ThemeGroup. Para colocar esta restrição no modelo o mesmo ficaria complicado e poderia perder a legibilidade, então a mesma foi feita com regras OCL, como explicado na secção 8.4.

No documento Inês Carvalho Nunes Simão (27179) (páginas 119-124)