Viso geral Contrato de Transformao robertowmgmail com Contrato
Visão geral Contrato de Transformação robertowm@gmail. com Contrato de Transformação 1
Origens • Design by Contract • Definição e especificação formal, precisa e verificável dos componentes do sistema • Baseado na idéia de obrigações e benefícios • Obrigações • Pré-condições antes de executar uma rotina • Garantir pós-condições após uma rotina • Manter uma propriedade durante toda a rotina (invariante) • Benefício • Não é necessário efetuar verificações internas a rotina robertowm@gmail. com Contrato de Transformação 2
Origens • Design by Contract • Formalização das obrigações e benefícios • Obrigações devem ser definidas na fase de Design • Algumas linguagens dão suporte a assertivas para garantir o contrato robertowm@gmail. com Contrato de Transformação 3
Subindo o nível Contrato de transformação = Design by Contract no nível de modelos Modelo de entrada Transformação Modelo de saída Pré condições Condições da transformação Pós condições robertowm@gmail. com Contrato de Transformação 4
O que é? • Uma especificação sobre o que uma transformação de modelo deve fazer • Deve existir uma relação entre o metamodelo de entrada e de saída, que é definido como o metamodelo de transformação • União disjunta entre os metamodelo de entrada, metamodelo de saída e relações entre eles • Para validar a transformação, um conjunto de invariantes são aplicados sobre o modelo de transformação, que devem ser respeitados robertowm@gmail. com Contrato de Transformação 6
Passos para a transformação • Passos • Carregar o modelo de entrada • Validar o modelo de entrada carregado • Transformar do modelo de entrada para o modelo de saída • Validar o modelo de transformação e de saída • Gerar a sintaxe concreta do modelo de saída robertowm@gmail. com Contrato de Transformação 8
Passos para a transformação • Benefícios • Padronização de como deve ocorrer a transformação • Garantia que os invariantes são respeitados (passos de validação) robertowm@gmail. com Contrato de Transformação 9
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 10
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 11
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 12
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 13
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 14
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 15
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 16
Uso dos invariantes • Maior garantia de qualidade Designer da linguagem de modelagem Define sintaxe e semântica da linguagem de modelagem Desenvolvedor da transformação de modelos Define a relação entre duas ou mais linguagens de modelagem Usuário do transformador de modelos Modela a aplicação e aplica o transformador ao modelo robertowm@gmail. com Contrato de Transformação 17
Padrão de projeto Contrato de Transformação robertowm@gmail. com Contrato de Transformação 18
Diagrama de classe robertowm@gmail. com Contrato de Transformação 19
Diagrama de seqüência robertowm@gmail. com Contrato de Transformação 20
Diagrama de seqüência robertowm@gmail. com Contrato de Transformação 21
Implementação do padrão de projeto TCLib robertowm@gmail. com Contrato de Transformação 22
Diagrama de classe robertowm@gmail. com Contrato de Transformação 23
Exemplo de uso TCLib robertowm@gmail. com Contrato de Transformação 27
Metamodelo UML robertowm@gmail. com Contrato de Transformação 28
Metamodelo UML robertowm@gmail. com Contrato de Transformação 29
Código-fonte (metamodelo) robertowm@gmail. com Contrato de Transformação 30
Invariantes robertowm@gmail. com Contrato de Transformação 31
Parser robertowm@gmail. com Contrato de Transformação 32
Metamodelo conjunto robertowm@gmail. com Contrato de Transformação 33
Invariantes robertowm@gmail. com Contrato de Transformação 34
Código Java para a transformação robertowm@gmail. com Contrato de Transformação 35
Código Java para a transformação robertowm@gmail. com Contrato de Transformação 36
Visão geral Projetos robertowm@gmail. com Contrato de Transformação 37
UMLto. SQL • Transformador de diagramas de classe UML para SQL • Transformação baseada no livro “MDA Explained” • Validação por invariantes nos três domínios • Geração de comandos em SQL para criação de tabelas robertowm@gmail. com Contrato de Transformação 38
Metamodelo UML robertowm@gmail. com Contrato de Transformação 39
Metamodelo SQL robertowm@gmail. com Contrato de Transformação 40
UMLto. Java • Transformador de diagramas de classe UML para código-fonte em Java • Validação por invariantes nos três domínios • Geração de código-fonte em Java (classes com atributos e seus getters/setters) robertowm@gmail. com Contrato de Transformação 41
Metamodelo Java robertowm@gmail. com Contrato de Transformação 42
Trabalho a ser entregue Projetos robertowm@gmail. com Contrato de Transformação 43
Trabalho a ser feito • Consertar alguns problemas no transformador • Melhorar alguns aspectos do transformador • Implementar um elemento de modelagem não suportado • O trabalho deve compilar em três diagramas de classe • Blog. xmi • Meeting. xmi • Breakfast. xmi robertowm@gmail. com Contrato de Transformação 44
Erro/Melhoria no UMLto. SQL • Permitir que o código resultante funcione um um banco de dados relacional • Adicionar as “constraints” de foreign key no pretty -print • My. SQL: . . . FOREIGN KEY (fk_id) REFERENCES Other. Table(column_id). . . • Consertar os invariantes inválidos robertowm@gmail. com Contrato de Transformação 45
Erro/Melhoria no UMLto. Java • Permitir que o código resultante seja compilável • Falta adicionar o código referente aos setters gerados • Adicionar código nos getters gerados • Consertar os invariantes inválidos robertowm@gmail. com Contrato de Transformação 46
Implementação de um novo elemento • Adicionar suporte a classes associativas • Requer mudanças em todo o processo de transformação • • Criação de invariantes nos três domínios Carregar esses elementos durante “parse” Criar a regra de transformação e implementá-la Atualizar o “pretty-print” robertowm@gmail. com Contrato de Transformação 47
Dúvidas ? robertowm@gmail. com Contrato de Transformação 48
- Slides: 43