Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes
-
Upload
serina-adkins -
Category
Documents
-
view
16 -
download
2
description
Transcript of Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes
Odyssey-MDA: Uma Abordagem para a
Transformação de Modelos de Componentes
Natanael MaiaAna Paula BloisCláudia Werner
Grupo de Reutilização de SoftwareNovembro/2005
Nov/2005 Odyssey-MDA 2
Roteiro
Introdução Arquitetura Orientada por Modelos (MDA) Abordagem Odyssey-MDA
Definição de plataformas e transformações Modelagem e marcação dos modelos Execução de transformações (exemplo EJB) Geração de código
Ferramenta implementada Considerações Finais
Nov/2005 Odyssey-MDA 3
Introdução
Desenvolvimento Baseado em Componentes Reaproveitamento de esforço (Reutilização)
Ganho em qualidade e produtividade
Tecnologias Surgem e evoluem muito rapidamente Necessidade de evolução pode restringir a
reutilização dos componentes obsoletos
Nov/2005 Odyssey-MDA 4
Arquitetura Orientada por Modelos
Abordagem que visa permitir: Especificação do software de forma independente
de uma plataforma (tecnologia) em particular Realização de transformações para aplicação de
conceitos de plataforma sobre a especificação inicial Separação entre especificação da funcionalidade e
a sua implementação numa tecnologia qualquer Facilidade na obtenção da especificação do sistema
na plataforma escolhida
Nov/2005 Odyssey-MDA 5
Arquitetura Orientada por Modelos
Conceitos Plataforma: Conjunto de subsistemas e tecnologias
que disponibilizam serviços através de interfaces e padrões de utilização
PIM – Platform Independent Model PSM – Platform Specific Model Transformações
Modelo ↔ Modelo
Modelo ↔ Texto
Nov/2005 Odyssey-MDA 6
Abordagem Odyssey-MDA
Definição de transformações bidirecionais Execução das transformações sobre modelos
de componentes independentes de plataforma (PIM) e obtenção dos modelos específicos para uma plataforma em particular (PSM)
Geração da implementação dos componentes na plataforma escolhida.
Nov/2005 Odyssey-MDA 7
Abordagem Odyssey-MDA
Padrões utilizados: MOF – Linguagem abstrata que é usada para
descrever outras linguagens JMI – Permite a geração de interfaces Java para
manipulação de elementos de um modelo cujo meta-modelo é descrito em MOF
XMI – Permite o intercâmbio (em XML) de modelos entre ferramentas (meta-modelo MOF)
Nov/2005 Odyssey-MDA 8
Abordagem Odyssey-MDA
Definições de plataformas e
transformações
Modelagem dos componentes
Marcação do
modelo
Geração da
implementação
Escolha da plataforma e
execução de transformações
EJB
Nov/2005 Odyssey-MDA 9
Plataformas e Transformações
Plataformas: Conjunto de transformações Conjunto de templates para geração de código fonte
Transformações: Execução bidirecional Atualização não destrutiva de modelos existentes São definidas através de:
Mapeamentos Finders Mecanismos
Nov/2005 Odyssey-MDA 10
Mapeamentos
Componente ↔ ComponenteClasse ↔ ComponenteClasse ↔ Interfaceetc.
Atributo ↔ AtributoOperação ↔ Atributoetc.
Classe ↔ AtributoComponente ↔ OperaçãoInterface ↔ Atributoetc.
FeatureMap
ClassifierFeatureMap
ClassifierMap
*
*
*
Nov/2005 Odyssey-MDA 11
Finders
Selecionam elementos a serem transformados Critérios de seleção de elementos:
Nome → todas os elementos com nome “create” Tipo → todas as Classes, Interfaces Estereótipos → todos os elementos <<entity>> Etiquetas → todos os elementos que tenham a
etiqueta “persistent” com valor “true”.
Nov/2005 Odyssey-MDA 12
Transformam elementos do modelo de entrada em elementos do modelo de saída
São bidirecionais (forward e reverse) Pré-definidos:
Mecanismos
ComponentComponent ComponentClass ComponentInterface ComponentAttribute ComponentOperation ClassClass
ClassInterface ClassAttribute ClassOperation InterfaceInterface InterfaceAttribute InterfaceOperation
AttributeAttribute AttributeOperation OperationOperation
Nov/2005 Odyssey-MDA 13
Modelagem dos componentes
<< component >>Cliente
ICliente
+ nome : String+ codigo : String+ endereco : String
Cliente
Componente PIM:
Nov/2005 Odyssey-MDA 14
Marcação do modelo
<< component >><< entity >>
Cliente
ICliente
+ nome : String+ codigo : String+ endereco : String
<< entity >>
Cliente
Componente PIM marcado:
Nov/2005 Odyssey-MDA 15
Execução da transformação
<< component >><< entity >>
ClienteICliente
+ nome : String+ codigo : String+ endereco : String
<< entity >>Cliente
<< component >><< EJBEntityBeanComponent >>
ClienteBean
-idCliente:String-nome:String-codigo:String-endereco:String#entityContext:EntityContext
<< EJBEntityBean >>ClienteBean
+ejbCreate():ClientePK+ejbPostCreate():void+ejbActivate():void+ejbLoad():void+ejbPassivate():void+ejbRemove():void+ejbStore():void+getAll():...+setAll(...):void
-idCliente:String
ClientePK
+hashCode():int+equals(other:Object):boolean
+getAll():...+setAll(...):void
ClienteLocal<< EJBLocalInterface >>
+create():Cliente+findByPrimaryKey(...):...
ClienteHome<< EJBLocalHomeInterface >>
+create():ClienteLocal+findByPrimaryKey(...):...
ClienteLocalHome<< EJBHomeInterface >>
+getAll():...+setAll(...):void
Cliente<< EJBRemoteInterface >>
Mapeamento: ClassifierMapMecanismo: ComponentComponentFinder: esquerda: tipo(Component)Finder: esquerda: estereótipo(<<entity>>)Finder: direita: tipo(Component)Finder: direita: estereótipo(<<EJBEntityBeanComponent>>)
Nov/2005 Odyssey-MDA 16
Execução da transformação
<< component >><< entity >>
ClienteICliente
+ nome : String+ codigo : String+ endereco : String
<< entity >>Cliente
<< component >><< EJBEntityBeanComponent >>
ClienteBean
-idCliente:String-nome:String-codigo:String-endereco:String#entityContext:EntityContext
<< EJBEntityBean >>ClienteBean
+ejbCreate():ClientePK+ejbPostCreate():void+ejbActivate():void+ejbLoad():void+ejbPassivate():void+ejbRemove():void+ejbStore():void+getAll():...+setAll(...):void
-idCliente:String
ClientePK
+hashCode():int+equals(other:Object):boolean
+getAll():...+setAll(...):void
ClienteLocal<< EJBLocalInterface >>
+create():Cliente+findByPrimaryKey(...):...
ClienteHome<< EJBLocalHomeInterface >>
+create():ClienteLocal+findByPrimaryKey(...):...
ClienteLocalHome<< EJBHomeInterface >>
+getAll():...+setAll(...):void
Cliente<< EJBRemoteInterface >>
Mapeamento: ClassifierMapMecanismo: ClassClassFinder: esquerda: tipo(Class)Finder: esquerda: estereótipo(<<entity>>)Finder: direita: tipo(Class)Finder: direita: estereótipo(<<EJBEntityBean>>)
Nov/2005 Odyssey-MDA 17
Execução da transformação
<< component >><< entity >>
ClienteICliente
+ nome : String+ codigo : String+ endereco : String
<< entity >>Cliente
<< component >><< EJBEntityBeanComponent >>
ClienteBean
-idCliente:String-nome:String-codigo:String-endereco:String#entityContext:EntityContext
<< EJBEntityBean >>ClienteBean
+ejbCreate():ClientePK+ejbPostCreate():void+ejbActivate():void+ejbLoad():void+ejbPassivate():void+ejbRemove():void+ejbStore():void+getAll():...+setAll(...):void
-idCliente:String
ClientePK
+hashCode():int+equals(other:Object):boolean
+getAll():...+setAll(...):void
ClienteLocal<< EJBLocalInterface >>
+create():Cliente+findByPrimaryKey(...):...
ClienteHome<< EJBLocalHomeInterface >>
+create():ClienteLocal+findByPrimaryKey(...):...
ClienteLocalHome<< EJBHomeInterface >>
+getAll():...+setAll(...):void
Cliente<< EJBRemoteInterface >>
Mapeamento: FeatureMapMecanismo: AttributeAttributeFinder: esquerda: tipo(Attribute)Finder: direita: tipo(Attribute)
Nov/2005 Odyssey-MDA 18
Execução da transformação
<< component >><< entity >>
Cliente
+ nome : String+ codigo : String+ endereco : String+ cidade : String
<< entity >>Cliente
ICliente
<< component >><< EJBEntityBeanComponent >>
ClienteBean
-idCliente:String-nome:String-codigo:String-endereco:String-numeroCartao:String#entityContext:EntityContext
<< EJBEntityBean >>ClienteBean
+ejbCreate():ClientePK+ejbPostCreate():void+ejbActivate():void+ejbLoad():void+ejbPassivate():void+ejbRemove():void+ejbStore():void+getAll():...+setAll(...):void
-idCliente:String
ClientePK
+hashCode():int+equals(other:Object):boolean
+getAll():...+setAll(...):void
ClienteLocal<< EJBLocalInterface >>
+create():Cliente+findByPrimaryKey(...):...
ClienteHome<< EJBLocalHomeInterface >>
+create():ClienteLocal+findByPrimaryKey(...):...
ClienteLocalHome<< EJBHomeInterface >>
+getAll():...+setAll(...):void
Cliente<< EJBRemoteInterface >>
ICliente
Execução reversa(não destrutiva)
<< component >><< entity >>
Cliente
+ nome : String+ codigo : String+ endereco : String+ cidade : String+ numeroCartao :
<< entity >>Cliente
Nov/2005 Odyssey-MDA 19
Geração da Implementação
<< component >><< EJBEntityBeanComponent >>
ClienteBean
-idCliente:String-nome:String-codigo:String-endereco:String#entityContext:EntityContext
<< EJBEntityBean >>ClienteBean
+ejbCreate():ClientePK+ejbPostCreate():void+ejbActivate():void+ejbLoad():void+ejbPassivate():void+ejbRemove():void+ejbStore():void+getAll():...+setAll(...):void
-idCliente:String
ClientePK
+hashCode():int+equals(other:Object):boolean
+getAll():...+setAll(...):void
ClienteLocal<< EJBLocalInterface >>
+create():Cliente+findByPrimaryKey(...):...
ClienteHome<< EJBLocalHomeInterface >>
+create():ClienteLocal+findByPrimaryKey(...):...
ClienteLocalHome<< EJBHomeInterface >>
+getAll():...+setAll(...):void
Cliente<< EJBRemoteInterface >>
Código fonte(JAVA)
Templates
Nov/2005 Odyssey-MDA 20
Ferramenta Odyssey-MDA
Framework para especificação e execução de transformações sobre modelos UML PIM ↔ PIM , PIM ↔ PSM , PSM ↔ PSM
FerramentaCase
Ambiente deReutilização
XMI
GeraçãoDe Código
EngenhariaReversa
XMIOdyssey-MDA
Especificações deMapeamentos
(XML)
Plug-ins(Java/JMI)
Nov/2005 Odyssey-MDA 21
Ferramenta Odyssey-MDA
Implementação dos mecanismos (Java/JMI): Pré-definidos (built-ins) Definidos pelo usuário (plug-ins)
Especificação dos mapeamentos (XML): Seleção de elementos (finders) Configuração dos mecanismos
Nov/2005 Odyssey-MDA 22
Ferramenta Odyssey-MDA
Stand-alone
Nov/2005 Odyssey-MDA 23
Ferramenta Odyssey-MDA
Odyssey-plug-in
Nov/2005 Odyssey-MDA 24
Contribuições Independência de ferramenta CASE Transformações bidirecionais entre modelos Extensão via plug-ins Ferramenta de transformações de modelos e geração
de código (Odyssey-MDA) Trabalhos futuros
Utilização de outros meta-modelos baseados no MOF Estudo de caso para avaliar a utilização da
ferramenta
Considerações finais
Odyssey-MDA: Uma Abordagem para a
Transformação de Modelos de Componentes
{ntmaia, anablois, werner}@cos.ufrj.br
Grupo de Reutilização de SoftwareNovembro/2005
Nov/2005 Odyssey-MDA 26
Properties
Permitem a configuração dos mecanismos utilizados nas transformações (built-ins/plug-ins)
<property name="stereotype" value="EntityBean" direction="forward" />
<property name="nameTransformation" direction="forward" value="#CLASSIFIER_NAME#Bean" />
<property name="nameTransformation" direction="reverse">
<property name="input" value="#CLASSIFIER_NAME#" />
<property name="regex" value="(.*)Bean$" />
<property name="subst" value="$1" />
</property>
Nov/2005 Odyssey-MDA 27
Relacionamentos
A geração de relacionamentos entre os elementos gerados na transformação é configurada na especificação declarativa
<relationship name="Dependency (entityBean -> entityRemoteInterface)" type="Dependency" direction="LEFT_TO_RIGHT">
<element id="entityRemoteInterface" />
<element id="entityBean" />
</relationship>