Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes

27
Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes Natanael Maia Ana Paula Blois Cláudia Werner Grupo de Reutilização de Software Novembro/2005

description

Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes. Natanael Maia Ana Paula Blois Cláudia Werner Grupo de Reutilização de Software Novembro/2005. Roteiro. Introdução Arquitetura Orientada por Modelos (MDA) Abordagem Odyssey-MDA - PowerPoint PPT Presentation

Transcript of Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes

Page 1: 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

Page 2: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 3: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 4: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 5: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 6: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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.

Page 7: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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)

Page 8: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 9: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 10: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

Nov/2005 Odyssey-MDA 10

Mapeamentos

Componente ↔ ComponenteClasse ↔ ComponenteClasse ↔ Interfaceetc.

Atributo ↔ AtributoOperação ↔ Atributoetc.

Classe ↔ AtributoComponente ↔ OperaçãoInterface ↔ Atributoetc.

FeatureMap

ClassifierFeatureMap

ClassifierMap

*

*

*

Page 11: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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”.

Page 12: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 13: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

Nov/2005 Odyssey-MDA 13

Modelagem dos componentes

<< component >>Cliente

ICliente

+ nome : String+ codigo : String+ endereco : String

Cliente

Componente PIM:

Page 14: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

Nov/2005 Odyssey-MDA 14

Marcação do modelo

<< component >><< entity >>

Cliente

ICliente

+ nome : String+ codigo : String+ endereco : String

<< entity >>

Cliente

Componente PIM marcado:

Page 15: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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>>)

Page 16: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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>>)

Page 17: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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)

Page 18: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 19: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 20: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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)

Page 21: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 22: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

Nov/2005 Odyssey-MDA 22

Ferramenta Odyssey-MDA

Stand-alone

Page 23: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

Nov/2005 Odyssey-MDA 23

Ferramenta Odyssey-MDA

Odyssey-plug-in

Page 24: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 25: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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

Page 26: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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>

Page 27: Odyssey-MDA:  Uma Abordagem para a Transformação de Modelos de Componentes

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>