1 / 27

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 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 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 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 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. 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) Odyssey-MDA

  8. Definições de plataformas e transformações EJB     Modelagem dos componentes Marcação do modelo Escolha da plataforma e execução de transformações Geração da implementação Abordagem Odyssey-MDA 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 Odyssey-MDA

  10. Mapeamentos Componente ↔ Componente Classe ↔ Componente Classe ↔ Interface etc. ClassifierMap * * FeatureMap Atributo ↔ Atributo Operação ↔ Atributo etc. * Classe ↔ Atributo Componente ↔ Operação Interface ↔ Atributo etc. ClassifierFeatureMap 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”. Odyssey-MDA

  12. AttributeAttribute • AttributeOperation • OperationOperation • ClassInterface • ClassAttribute • ClassOperation • InterfaceInterface • InterfaceAttribute • InterfaceOperation • ComponentComponent • ComponentClass • ComponentInterface • ComponentAttribute • ComponentOperation • ClassClass Mecanismos • Transformam elementos do modelo de entrada em elementos do modelo de saída • São bidirecionais (forward e reverse) • Pré-definidos: Odyssey-MDA

  13. << component >> Cliente Cliente + nome : String + codigo : String + endereco : String ICliente Modelagem dos componentes • Componente PIM: Odyssey-MDA

  14. << component >> << entity >> Cliente << entity >> Cliente + nome : String + codigo : String + endereco : String ICliente Marcação do modelo • Componente PIM marcado: Odyssey-MDA

  15. << component >> << EJBEntityBeanComponent >> ClienteBean << component >> << entity >> Cliente ICliente Mapeamento: ClassifierMap Mecanismo: ComponentComponent Finder: esquerda: tipo(Component) Finder: esquerda: estereótipo(<<entity>>) Finder: direita: tipo(Component) Finder: direita: estereótipo(<<EJBEntityBeanComponent>>) << EJBEntityBean >> ClienteBean -idCliente:String -nome:String -codigo:String -endereco:String #entityContext:EntityContext ClientePK << entity >> Cliente -idCliente:String +hashCode():int +equals(other:Object):boolean + nome : String + codigo : String + endereco : String +ejbCreate():ClientePK +ejbPostCreate():void +ejbActivate():void +ejbLoad():void +ejbPassivate():void +ejbRemove():void +ejbStore():void +getAll():... +setAll(...):void Cliente << EJBRemoteInterface >> ClienteLocal << EJBLocalInterface >> ClienteHome << EJBLocalHomeInterface >> ClienteLocalHome << EJBHomeInterface >> +getAll():... +setAll(...):void +create():Cliente +findByPrimaryKey(...):... +create():ClienteLocal +findByPrimaryKey(...):... +getAll():... +setAll(...):void Execução da transformação Odyssey-MDA

  16. << component >> << EJBEntityBeanComponent >> ClienteBean << component >> << entity >> Cliente ICliente << EJBEntityBean >> ClienteBean -idCliente:String -nome:String -codigo:String -endereco:String #entityContext:EntityContext ClientePK << entity >> Cliente -idCliente:String +hashCode():int +equals(other:Object):boolean + nome : String + codigo : String + endereco : String +ejbCreate():ClientePK +ejbPostCreate():void +ejbActivate():void +ejbLoad():void +ejbPassivate():void +ejbRemove():void +ejbStore():void +getAll():... +setAll(...):void ClienteLocalHome << EJBHomeInterface >> ClienteLocal << EJBLocalInterface >> ClienteHome << EJBLocalHomeInterface >> Cliente << EJBRemoteInterface >> +getAll():... +setAll(...):void +create():Cliente +findByPrimaryKey(...):... +create():ClienteLocal +findByPrimaryKey(...):... +getAll():... +setAll(...):void Execução da transformação Mapeamento: ClassifierMap Mecanismo: ClassClass Finder: esquerda: tipo(Class) Finder: esquerda: estereótipo(<<entity>>) Finder: direita: tipo(Class) Finder: direita: estereótipo(<<EJBEntityBean>>) Odyssey-MDA

  17. << component >> << EJBEntityBeanComponent >> ClienteBean << component >> << entity >> Cliente ICliente << EJBEntityBean >> ClienteBean -idCliente:String -nome:String -codigo:String -endereco:String #entityContext:EntityContext ClientePK << entity >> Cliente -idCliente:String +hashCode():int +equals(other:Object):boolean + nome : String + codigo : String + endereco : String +ejbCreate():ClientePK +ejbPostCreate():void +ejbActivate():void +ejbLoad():void +ejbPassivate():void +ejbRemove():void +ejbStore():void +getAll():... +setAll(...):void ClienteLocalHome << EJBHomeInterface >> ClienteLocal << EJBLocalInterface >> ClienteHome << EJBLocalHomeInterface >> Cliente << EJBRemoteInterface >> +getAll():... +setAll(...):void +create():Cliente +findByPrimaryKey(...):... +create():ClienteLocal +findByPrimaryKey(...):... +getAll():... +setAll(...):void Execução da transformação Mapeamento: FeatureMap Mecanismo: AttributeAttribute Finder: esquerda: tipo(Attribute) Finder: direita: tipo(Attribute) Odyssey-MDA

  18. << component >> << EJBEntityBeanComponent >> ClienteBean << component >> << entity >> Cliente << component >> << entity >> Cliente ICliente << entity >> Cliente << entity >> Cliente << EJBEntityBean >> ClienteBean + nome : String + codigo : String + endereco : String + cidade : String + nome : String + codigo : String + endereco : String + cidade : String + numeroCartao : ClientePK -idCliente:String -nome:String -codigo:String -endereco:String -numeroCartao:String #entityContext:EntityContext -idCliente:String +hashCode():int +equals(other:Object):boolean +ejbCreate():ClientePK +ejbPostCreate():void +ejbActivate():void +ejbLoad():void +ejbPassivate():void +ejbRemove():void +ejbStore():void +getAll():... +setAll(...):void ClienteLocal << EJBLocalInterface >> ClienteHome << EJBLocalHomeInterface >> ClienteLocalHome << EJBHomeInterface >> Cliente << EJBRemoteInterface >> Execução reversa (não destrutiva) +getAll():... +setAll(...):void +create():Cliente +findByPrimaryKey(...):... +create():ClienteLocal +findByPrimaryKey(...):... +getAll():... +setAll(...):void Execução da transformação ICliente Odyssey-MDA

  19. << component >> << EJBEntityBeanComponent >> ClienteBean ClienteLocal << EJBLocalInterface >> +getAll():... +setAll(...):void << EJBEntityBean >> ClienteBean -idCliente:String -nome:String -codigo:String -endereco:String #entityContext:EntityContext Templates ClienteLocalHome << EJBHomeInterface >> +create():ClienteLocal +findByPrimaryKey(...):... +ejbCreate():ClientePK +ejbPostCreate():void +ejbActivate():void +ejbLoad():void +ejbPassivate():void +ejbRemove():void +ejbStore():void +getAll():... +setAll(...):void ClientePK -idCliente:String +hashCode():int +equals(other:Object):boolean ClienteHome << EJBLocalHomeInterface >> +create():Cliente +findByPrimaryKey(...):... Cliente << EJBRemoteInterface >> +getAll():... +setAll(...):void Código fonte (JAVA) Geração da Implementação Odyssey-MDA

  20. Ferramenta Case Geração De Código Odyssey-MDA XMI XMI Ambiente de Reutilização Engenharia Reversa Especificações de Mapeamentos (XML) Plug-ins (Java/JMI) Ferramenta Odyssey-MDA • Framework para especificação e execução de transformações sobre modelos UML • PIM ↔ PIM , PIM ↔ PSM , PSM ↔ PSM 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 Odyssey-MDA

  22. Ferramenta Odyssey-MDA • Stand-alone Odyssey-MDA

  23. Ferramenta Odyssey-MDA • Odyssey-plug-in Odyssey-MDA

  24. Considerações finais • 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 Odyssey-MDA

  25. Odyssey-MDA: Uma Abordagem para a Transformação de Modelos de Componentes {ntmaia, anablois, werner}@cos.ufrj.br Grupo de Reutilização de Software Novembro/2005

  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> 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> Odyssey-MDA

More Related