X02 Um gerador de código MDA baseado em mapeamentos de modelos
Texto
(2)
(3) UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO. JOÃO PAULO AUGUSTO DE OLIVEIRA FERREIRA. “XO2 – UM GERADOR DE CÓDIGO MDA BASEADO EM MAPEAMENTOS DE MODELOS". ESTE TRABALHO FOI APRESENTADO À PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO.. ORIENTADOR(A): Roberto Souto Maior Barros. RECIFE, OUTUBRO/2005.
(4) Ferreira, João Paulo Augusto de Oliveira X02 – Um gerador de código MDA baseado em mapeamentos de modelos / João Paulo Augusto de Oliveira Ferreira. – Recife : O Autor, 2005. xx, 108 folhas : il., fig., tab. Dissertação (mestrado) – Universidade Federal de Pernambuco. CIn. Mestrado em Ciência da Computação, 2005. Inclui bibliografia e apêndice. 1. Sistema – Geração de código – Ambiente XO2. 2. Arquitetura de sistemas (MDA). 3. Padrão XMI. 4. Mapeamento de modelos. I. Título. 004.4’24 005.13. CDU (2.ed.) CDD (22.ed.). UFPE BC2006-045.
(5)
(6)
(7) Aos meus pais e av´ os pela educa¸ c˜ ao, incentivo e compreens˜ ao..
(8)
(9) AGRADECIMENTOS A todos que me ajudaram ao longo deste trabalho. Aos meus amigos e familiares. Aos professores Roberto e D´ecio. Ao professor Zeque e amigos do SIG@.. vii.
(10)
(11) Never send a human to do a machine’s job. — AGENT SMITH, THE MATRIX.
(12)
(13) RESUMO Atualmente, devido `as exigˆencias do mercado e `a grande competitividade, as empresas precisam desenvolver sistemas de informa¸c˜ao com qualidade e dentro de prazos cada vez mais curtos. Neste cen´ario, este trabalho apresenta o ambiente XO2 , que possibilita gerar grande parte do c´odigo-fonte de um sistema de informa¸c˜ ao orientado a objetos. O ambiente utiliza transforma¸c˜ao de modelos com base na arquitetura MDA - Model Driven Architecture. Tamb´em prop˜oe um documento para mapeamento de modelos e uma interface gr´afica para auxiliar no processo de cria¸c˜ ao dos documentos e gera¸c˜ ao de c´odigo. O XO2 foi validado em um estudo de caso para substitui¸c˜ ao da camada de persistˆencia do SIG@UFPE e mostrou-se capaz de aumentar a qualidade e consistˆencia do c´odigo gerado, elevar o n´ıvel de abstra¸c˜ao atrav´es da separa¸c˜ ao bem definida de pap´eis e responsabilidades proposta pela arquitetura MDA. Finalmente, o ambiente foi capaz de aumentar a produtividade do projeto pela redu¸c˜ao de esfor¸co na realiza¸c˜ ao de tarefas repetitivas. Palavras-chave: gera¸c˜ao de c´odigo, MDA, XMI, mapeamento de modelos.. xi.
(14)
(15) ABSTRACT Nowadays, companies need to provide high quality products and services within short periods of time. In this scenario, this work presents XO2 , a code generation environment, based on the MDA - Model Driven Architecture, which is aimed to automatically generating large parts of the implementation code of object-oriented software using model mappings and model transformations. The tool uses the MDA - Model Driven Architecture and proposes a markup language to represent model mappings and an user interface to help the documents creation and code generation activities. The XO2 tool was tested against a real case and prove its capacity to increase the generated code quality and consistency, increase the abstraction through the separation of concerns defined by the MDA. Finally, the tool increased the project overall productivity by reducing the amount of work spent on repetitive tasks. Keywords: code generation, MDA, XMI, model mapping.. xiii.
(16)
(17) ´ SUMARIO. Cap´ıtulo 1—Introdu¸c˜ ao 1.1 1.2 1.3. 1. Por que gerar c´odigo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estrutura da Disserta¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 2—Gera¸c˜ ao de C´ odigo: Conceitos, Padr˜ oes e Tecnologias 2.1 2.2. Conceitos . . . . . . . . . . . . . . . . . . . Gera¸c˜ao de C´odigo . . . . . . . . . . . . . . 2.2.1 Modelos de Geradores de C´odigo . . 2.2.2 Tipos de Geradores de C´odigo . . . 2.2.2.1 Code Munger . . . . . . . . 2.2.2.2 Inline Code Expander . . . 2.2.2.3 Mixed Code . . . . . . . . 2.2.2.4 Partial Class Generator . . 2.2.2.5 Tier Generator . . . . . . . 2.2.3 Fluxo de desenvolvimento . . . . . . 2.3 Mapeamento OO-Relacional . . . . . . . . . 2.4 Padr˜oes OMG - Object Management Group 2.4.1 MOF . . . . . . . . . . . . . . . . . 2.4.2 XMI . . . . . . . . . . . . . . . . . . 2.5 JMI . . . . . . . . . . . . . . . . . . . . . . 2.6 MDR . . . . . . . . . . . . . . . . . . . . . . 2.7 MDA . . . . . . . . . . . . . . . . . . . . . . 2.7.1 PIM - Plataform Indepent Model . . 2.7.2 PSM - Platform Specific Model . . . 2.7.3 C´odigo-Fonte . . . . . . . . . . . . . 2.7.4 Transforma¸c˜oes . . . . . . . . . . . . 2.8 Velocity . . . . . . . . . . . . . . . . . . . . 2.9 Hibernate . . . . . . . . . . . . . . . . . . . 2.10 Conclus˜oes . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. 5 . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 3—Trabalhos Relacionados 3.1 3.2 3.3. XDoclet . . . 3.1.1 Pontos AndroMDA . 3.2.1 Pontos iQgen . . . . 3.3.1 Pontos. . . . . . . . Relevantes . . . . . . . Relevantes . . . . . . . Relevantes. . . . . . .. 1 3 3. 5 6 6 7 7 8 9 9 10 11 12 13 13 16 19 20 20 22 22 23 23 24 25 26 29. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . . xv. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. 29 32 33 35 35 39.
(18) ´ SUMARIO. xvi 3.4 3.5 3.6. e-Gen . . . . 3.4.1 Pontos Qualiti Coder 3.5.1 Pontos Conclus˜oes .. . . . . . . . Relevantes . . . . . . . Relevantes . . . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. 40 41 42 42 42. Cap´ıtulo 4—XO2 - Um gerador de c´ odigo MDA baseado em mapeamentos de modelos 45 4.1 4.2. 4.3. 4.4 4.5. 4.6. Vis˜ao Geral . . . . . . . . . . . . . . . . . . . . Arquivos de Entrada . . . . . . . . . . . . . . . 4.2.1 O Diagrama de Classes . . . . . . . . . 4.2.2 O Template Velocity/XO2 . . . . . . . . 4.2.3 O Mapeamento de Modelos . . . . . . . Arquitetura das Classes XO2 . . . . . . . . . . 4.3.1 O pacote xo2 . . . . . . . . . . . . . . . 4.3.2 O pacote gui . . . . . . . . . . . . . . . 4.3.3 O pacote uml . . . . . . . . . . . . . . . 4.3.4 O pacote mapping . . . . . . . . . . . . 4.3.5 O pacote util . . . . . . . . . . . . . . Bibliotecas Utilizadas . . . . . . . . . . . . . . O processo de desenvolvimento com o XO2 . . 4.5.1 Cria¸c˜ao do Modelo Orientado a Objetos 4.5.2 Cria¸c˜ao do Documento de Mapeamentos 4.5.3 Cria¸c˜ao dos Templates . . . . . . . . . . 4.5.4 Gera¸c˜ao do C´odigo-fonte . . . . . . . . . Conclus˜oes . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . .. Cap´ıtulo 5—Testes e Resultados 5.1 5.2 5.3 5.4. Gerando c´odigo para sites da web . . . Gerando arquitetura em camadas para Resultados . . . . . . . . . . . . . . . . Conclus˜oes . . . . . . . . . . . . . . .. 75 . o . .. . . . . . . . . . . . . projeto SIG@UFPE . . . . . . . . . . . . . . . . . . . . . . . .. Cap´ıtulo 6—Conclus˜ oes 6.1 6.2. 45 46 46 47 53 58 58 59 60 66 69 71 72 72 72 73 73 74. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. 75 84 95 97 99. Contribui¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101. Apˆ endice A—VTL - Velocity Template Language. 103.
(19) LISTA DE FIGURAS. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23. Funcionamento de um gerador de c´odigo ativo . . . . . . . . . . . . . . . Funcionamento de um gerador de c´odigo passivo . . . . . . . . . . . . . Funcionamento de um gerador de c´odigo do tipo Code Munger . . . . . Funcionamento do Javadoc . . . . . . . . . . . . . . . . . . . . . . . . . Funcionamento de um gerador de c´odigo do tipo Inline Code Expander . Funcionamento de um gerador de c´odigo Mixed Code . . . . . . . . . . . Funcionamento de um gerador de c´odigo Partial Class . . . . . . . . . . Funcionamento de um gerador de c´odigo do tipo Tier . . . . . . . . . . . Gerador de c´odigo Tier para aplica¸c˜ ao J2EE . . . . . . . . . . . . . . . . Fluxo de desenvolvimento convencional . . . . . . . . . . . . . . . . . . . Fluxo de desenvolvimento com gerador de c´odigo . . . . . . . . . . . . . Representa¸c˜ao da linguagem XML em MOF . . . . . . . . . . . . . . . . Principais elementos do padr˜ao MOF . . . . . . . . . . . . . . . . . . . . Representando uma classe em XMI . . . . . . . . . . . . . . . . . . . . . Representa¸c˜ao das classes Carro e Pessoa . . . . . . . . . . . . . . . . . Representa¸c˜ao da classe Carro . . . . . . . . . . . . . . . . . . . . . . . . Vis˜ao geral dos principais elementos da linguagem UML . . . . . . . . . Ciclo de Desenvolvimento Tradicional do RUP . . . . . . . . . . . . . . Ciclo de Desenvolvimento MDA . . . . . . . . . . . . . . . . . . . . . . . Transforma¸c˜oes MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transforma¸c˜oes MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . Padr˜ao MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .. 6 7 8 8 8 9 10 10 11 12 12 15 16 17 17 18 20 21 22 23 23 24 26. 3.1 3.2 3.3 3.4. Diagrama de classes UML . . . . . . . . Interface gr´afica do iQgen . . . . . . . . Interface gr´afica do e-Gen Modeler . . . Interface gr´afica do e-Gen Design Portal. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. 30 36 40 41. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11. Vis˜ao Geral do XO2 . . . . . . . . . . . . . . . Diagrama UML . . . . . . . . . . . . . . . . . . Mapeamentos . . . . . . . . . . . . . . . . . . . Principais elementos do mapeamento M3 L . . . Diagrama UML com heran¸ca . . . . . . . . . . Principais pacotes do ambiente XO2 . . . . . . O pacote XO2 . . . . . . . . . . . . . . . . . . . A interface gr´afica de mapeamento de modelos A interface gr´afica de gera¸c˜ao de c´odigo . . . . A interface XO2lement . . . . . . . . . . . . . . A classe XO2Package . . . . . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. 46 48 53 54 56 58 59 60 61 61 62. xvii. . . . .. . . . .. . . . ..
(20) xviii. LISTA DE FIGURAS. 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20. A interface XO2Classifier . . . . . . . . . . . . . . . . . . . A classe XO2Method . . . . . . . . . . . . . . . . . . . . . . Classes que representam os relacionamentos . . . . . . . . . Estrutura de um documento XMI . . . . . . . . . . . . . . . O pacote mapping . . . . . . . . . . . . . . . . . . . . . . . Mapeamento Classe/Tabela. . . . . . . . . . . . . . . . . . . Principais componentes externos e apis utilizados pelo XO2 Etapas do processo de gera¸c˜ao de c´odigo do XO2 . . . . . . Inser¸c˜ao do XO2 no processo de desenvolvimento tradicional. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 63 63 65 65 66 67 71 72 73. 5.1 5.2 5.3 5.4 5.5 5.6 5.7. Documentos respons´aveis pelo cadastro Modelo de projeto . . . . . . . . . . . . Tela de atualiza¸c˜ao produzida pelo XO2 Os subsistemas do sistema SIG@UFPE . A distribui¸c˜ao do sistema SIG@UFPE . Arquitetura em camadas do SIG@UFPE Representa¸c˜ao UML da classe Pr´edio . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. 76 76 84 85 85 87 88. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . ..
(21) LISTA DE TABELAS. 2.1. Arquitetura MOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14. 3.1 3.2 3.3 3.4 3.5 3.6. Pontos relevantes ao uso do XDoclet . . . . . . . . Pontos relevantes ao uso do AndroMDA . . . . . . Pontos relevantes ao uso do iQgen . . . . . . . . . Pontos relevantes ao uso do e-Gen . . . . . . . . . Pontos relevantes ao uso do Qualiti Coder . . . . . Principais caracter´ısticas dos ambientes analisados. 4.1. Pontos relevantes ao uso do XO2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 74. 5.1. Tempo de desenvolvimento (em horas) com e sem ambiente XO2 . . . . . . . . . 96. 6.1. Comparativo entre o XO2 e outros ambientes . . . . . . . . . . . . . . . . . . . . 100. xix. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. . . . . . .. 32 35 39 42 43 43.
(22)
(23) CAP´ITULO 1. ˜ INTRODUC ¸ AO. Na era da informa¸c˜ao, em um cen´ario de grande competitividade, a sobrevivˆencia de uma empresa depende principalmente da qualidade de seus produtos e servi¸cos, da agilidade na resolu¸c˜ao de problemas, e da satisfa¸c˜ao de seus clientes. As empresas s˜ao obrigadas a implantar modelos de qualidade, automatizar seus processos, e obviamente investir na aquisi¸c˜ ao e/ou no desenvolvimento de sistemas de informa¸c˜ ao que atendam `as suas demandas. Neste contexto, onde um sistema de informa¸c˜ ao pode ser um diferencial e tamb´em uma arma competitiva, o processo de constru¸c˜ ao do sistema passa a ser estrat´egico e, como tal, necessita seguir crit´erios r´ıgidos de qualidade e diversos outros fatores que pertencem ao escopo da engenharia de software. A engenharia de software, por sua vez, procura adaptar pr´aticas bem-sucedidas de outras engenharias no contexto de cria¸c˜ao de sistemas, o que motiva pesquisas em torno de assuntos como reuso de componentes e automatiza¸c˜ ao do processo de desenvolvimento. Esta disserta¸c˜ao apresenta um ambiente para automatizar e acelerar a etapa de implementa¸c˜ao de um processo de desenvolvimento de software. O ambiente proposto por este trabalho, denominado XO2 , prop˜oe-se a gerar uma grande parte do c´odigo-fonte de um sistema de informa¸c˜ ao orientado a objetos atrav´es da transforma¸c˜ao de modelos, independentemente da plataforma, arquitetura e linguagem de programa¸c˜ao, seguindo os princ´ıpios da arquitetura MDA - Model Driven Architecture [KWB03]. A utiliza¸c˜ao do ambiente XO2 resulta em benef´ıcios como: (1) aumento da qualidade e padroniza¸c˜ ao do c´odigo-fonte, (2) aumento da consistˆencia do c´odigo, (3) aumento da produtividade atrav´es da automatiza¸c˜ao e acelera¸c˜ ao do processo de desenvolvimento e (4) abstra¸c˜ ao pela separa¸c˜ao bem definida de pap´eis e responsabilidades. O ambiente XO2 difere de solu¸c˜oes j´a existentes, pois al´em de modelos OO - Orientados a Objetos descritos em UML [BRJ98], podem ser utilizados como entrada do sistema outros modelos, como o ER - Entidade-Relacionamento [BCNN91], cujos elementos quando relacionados servem como insumo para cria¸c˜ao de grande parte do c´odigo-fonte de sistemas de informa¸c˜ ao. 1.1. Por que gerar c´ odigo?. Desde o in´ıcio da sua hist´oria, o homem vem procurando formas de agilizar o seu trabalho. Ferramentas e processos foram desenvolvidos para otimizar e aumentar a qualidade da realiza¸c˜ ao de tarefas repetitivas. Na engenharia de software n˜ao poderia ser diferente. Atualmente, as empresas precisam de sistemas mais completos, com n´ umero reduzido de bugs e com um tempo de desenvolvimento cada vez mais curto. Al´em disso, os projetos de sistemas precisam ser mais robustos e seus requisitos s˜ao alterados constantemente [Joh05]. Diante deste cen´ario, surgiram t´ecnicas, padr˜oes, frameworks 1 e metodologias de desenvolvimento voltados para a agiliza¸c˜ ao dos proces1. Arcabou¸co, um conjunto de classes para atender as necessidades de um determinado problema.. 1.
(24) 2. ˜ INTRODUC ¸ AO. sos. Entre eles destacam-se Agile Modeling [SWA02], XP [KB04] e AOP [JDG03], que reduzem drasticamente o esfor¸co despendido na produ¸c˜ ao de artefatos durante as fases de levantamento de requisitos, an´alise e projeto e ainda facilitam a implementa¸c˜ ao dos sistemas. Ainda assim, na fase de implementa¸c˜ ao, o desenvolvedor precisa escrever um grande n´ umero de linhas de c´odigo, devido ao uso de frameworks “pesados”. Desta forma, surge nas empresas o questionamento sobre o desperd´ıcio do racioc´ınio e do tempo dos seus desenvolvedores em atividades repetitivas (cria¸c˜ao de infra-estrutura de c´odigo, documenta¸c˜ ao, testes unit´arios), enquanto estes poderiam estar ocupados com o desenvolvimento de um c´odigo-fonte que realmente exigisse a interferˆencia humana (implementa¸c˜ ao de regras de neg´ocio) [Mei05] [Nic05]. A utiliza¸c˜ao de frameworks que fazem uso intensivo de c´odigo escrito destaca o valor da substitui¸c˜ao da m˜ao-de-obra humana por um ambiente gerador de c´odigo. Arquiteturas em camadas, EJB [MH01], persistˆencia de dados utilizando middlewares como o Hibernate [Hib05] s˜ao exemplos de frameworks que fazem uso intensivo de escrita de c´odigo, que na sua grande maioria n˜ao necessita de racioc´ınio para ser criado, pois segue um padr˜ao repetitivo. Este ´e o ambiente ideal para a utiliza¸c˜ao de ferramentas capazes de gerar c´odigo, pois estas seriam capazes de eliminar o esfor¸co do desenvolvedor na cria¸c˜ ao do c´odigo repetitivo. Gera¸c˜ao de c´odigo ´e o processo de produzir c´odigo de alto n´ıvel atrav´es de descri¸c˜ oes de requisitos ou modelos de neg´ocio. Atualmente existem dezenas de ferramentas que auxiliam os desenvolvedores na fase de implementa¸c˜ ao do desenvolvimento de software. As ferramentas v˜ao desde simples wizards que auxiliam na cria¸c˜ ao de trechos de c´odigo at´e ambientes que produzem a arquitetura completa de um sistema. O primeiro benef´ıcio que se obt´em pela utiliza¸c˜ ao de um gerador de c´odigo ´e o aumento da produtividade. N˜ao menos significativos s˜ao os aumentos de: qualidade, consistˆencia e abstra¸c˜ao. Qualidade. Devido `a grande quantidade de c´odigo-fonte escrito durante o desenvolvimento de um sistema, ´e bem prov´avel que novas melhorias de c´odigo n˜ao sejam propagadas por toda base de c´odigo escrito. A utiliza¸c˜ao de um ambiente gerador de c´odigo cria, atrav´es dos templates, uma base de c´odigo que poder´a ser recriada a cada nova execu¸c˜ ao. Desta forma, a corre¸c˜ao de erros e as melhorias no c´odigo ser˜ao aplicadas instantaneamente em todo o c´odigo do sistema. ` medida que aumenta-se a qualidade dos templates, a qualidade da base de c´odigo geA rada tamb´em aumenta, pois a qualidade do c´odigo produzido por um gerador est´a diretamente relacionada `a qualidade dos templates utilizados. Consistˆ encia. O c´odigo produzido por um ambiente gerador de c´odigo est´a de acordo com os padr˜oes de projeto e com os padr˜oes de codifica¸ca˜o (nomes de classes, vari´ aveis, m´etodos, alinhamento) e ´e consistente em toda a sua base de c´odigo. O c´odigo-fonte produzido ´e mais f´acil de ser entendido, de sofrer manuten¸c˜ ao e de ser utilizado. O gerador de c´odigo encoraja o desenvolvedor a trabalhar de acordo com a arquitetura e com os padr˜oes do projeto. Produtividade. Como os desenvolvedores n˜ao precisam desenvolver c´odigo repetitivo, o cronograma do projeto torna-se bastante otimizado (itera¸c˜ oes mais curtas), pois tem-se uma quantidade maior de horas para elaborar e implementar as regras de neg´ocio. Com mais tempo para implementa¸c˜ao das regras de neg´ocio os desenvolvedores podem buscar a melhor solu¸c˜ ao para cada problema e, ainda, dar mais aten¸c˜ ao `as fases de prototipa¸c˜ ao e testes. ´ not´orio que os requisitos de um projeto est˜ao sempre sendo alterados [Joh05], desta forma E.
(25) 1.2 OBJETIVOS. 3. o ganho na produtividade tamb´em ser´a percebido durante a manuten¸c˜ ao do projeto. Com a simples altera¸c˜ao dos modelos um novo c´odigo-fonte compat´ıvel com os requisitos poder´a ser gerado rapidamente. Abstra¸ c˜ ao. A grande maioria dos geradores de c´odigo produzem c´odigo a partir do processamento de modelos abstratos e regras de transforma¸c˜ ao (templates). O grande valor desta abordagem ´e a possibilidade de se produzir c´odigo para outras plataformas. Esta abstra¸c˜ ao ´e traduzida na portabilidade do sistema para outras plataformas. A abstra¸c˜ao propicia ao arquiteto experimentar diferentes abordagens para resolu¸c˜ ao de um determinado problema utilizando diferentes arquiteturas e plataformas. 1.2. Objetivos. Este trabalho teve por objetivo o desenvolvimento de um ambiente gerador de c´odigo, denominado XO2 , com a capacidade de produzir c´odigo-fonte a partir de v´arios modelos abstratos do sistema. Enquanto a maioria dos geradores de c´odigo utilizam apenas um modelo para produzir c´odigo, o XO2 permite a utiliza¸c˜ao de v´arios modelos como entrada para o ambiente. Depois de uma vasta pesquisa, foi comprovada a inexistˆencia de um padr˜ao de mapeamento de modelos abstratos. Sendo assim, este trabalho tamb´em prop˜oe um documento escrito em linguagem XML, denominado M3 L - Model Mapping Markup Language, capaz de representar, de forma simplificada, liga¸c˜oes entre modelos orientados a objetos, entidade-relacionamento, etc. O documento M3 L cont´em apenas um subconjunto de todos os elementos necess´arios para representar de forma fiel o mapeamento de modelos. Por´em, com esse pequeno n´ umero de elementos j´a se conseguiu provar a eficiˆencia e a utilidade do mapeamento de modelos em um ambiente gerador de c´odigo. O ambiente XO2 foi modelado utilizando a linguagem UML e sua implementa¸c˜ ao foi realizada na linguagem Java, com o intuito de manter a modularidade, extensibilidade e reusabilidade do c´odigo. Assim como o documento M3 L, o prot´otipo XO2 implementa apenas uma parte da solu¸c˜ ao do problema, pois permite ao usu´ario utilizar apenas o modelo orientado a objetos e o entidaderelacionamento. No entanto, o padr˜ao de modelagem e o prot´otipo foram projetados de forma que sejam capazes de serem estendidos. Foi implementada uma interface gr´afica para auxiliar a constru¸c˜ ao do documento M3 L e execu¸c˜ao do ambiente XO2 . Para a valida¸c˜ao do ambiente foi utilizado como estudo de caso o SIG@UFPE - Sistema de Informa¸c˜ao e Gest˜ao Acadˆemica Universidade Federal de Pernambuco [UFP05]. O XO2 foi configurado para produzir boa parte do c´odigo arquitetural do sistema e os resultados dos testes foram bastante animadores no que concerne `a qualidade e consistˆencia do c´odigo-fonte produzido, al´em dos ganhos de produtividade e aumento na capacidade de abstra¸c˜ ao durante as fases de an´alise e projeto do sistema. 1.3. Estrutura da Disserta¸c˜ ao. Al´em desta se¸c˜ao introdut´oria, esta disserta¸c˜ ao ´e composta por mais cinco cap´ıtulos. Cap´ıtulo 2 - Apresenta um resumo sobre os principais conceitos, padr˜oes e ferramentas.
(26) ˜ INTRODUC ¸ AO. 4. relevantes ao entendimento deste trabalho. Nele ser´a explicado o conceito de gera¸c˜ ao de c´odigo 2 juntamente com os principais tipos de geradores de c´odigo e alguns padr˜oes OMG . Ainda s˜ao detalhadas algumas ferramentas utilizadas no desenvolvimento do prot´otipo. ´ feita uma an´alise dos principais Cap´ıtulo 3 - Apresenta alguns trabalhos relacionados. E ambientes geradores de c´odigo existentes. Cap´ıtulo 4 - Apresenta detalhadamente o ambiente XO2 , sua arquitetura, decis˜oes de projeto, seu funcionamento, como extrair o m´aximo do ambiente e ainda como estendˆe-lo. Cap´ıtulo 5 - Apresenta os testes e resultados obtidos atrav´es da utiliza¸c˜ ao do ambiente XO2 em dois problemas distintos: produzir websites dinˆamicos em linguagem Perl [WCO00] e alterar a camada de persistˆencia do sistema SIG@UFPE. Cap´ıtulo 6 - Apresenta as contribui¸c˜ oes deste trabalho, as conclus˜oes tiradas e os trabalhos futuros.. 2. Object Management Group. Cons´ orcio regulamentador de alguns padr˜ oes para sistemas distribu´ıdos e orientados a objetos.
(27) CAP´ITULO 2. ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. Este cap´ıtulo apresenta os principais conceitos, padr˜oes e tecnologias relevantes ao entendimento do ambiente de gera¸c˜ao de c´odigo proposto neste trabalho. Primeiramente, ser˜ao definidos alguns termos utilizados ao longo do texto. Em seguida, o leitor ser´a apresentado ao conceito de gera¸c˜ao de c´odigo e mapeamento OO-Relacional. Posteriormente, os padr˜oes da OMG ser˜ao introduzidos. Finalmente, ser˜ao detalhadas as tecnologias Velocity [CG03] e Hibernate [Hib05]. 2.1. Conceitos. No contexto deste trabalho, sistema de informa¸c˜ ao ou sistema ´e todo software ou parte de software desenvolvido com o prop´osito de resolver um problema espec´ıfico, variando de um simples website at´e um complexo sistema financeiro. Um modelo ou diagrama de sistema ´e a descri¸ca˜o ou especifica¸c˜ ao com um determinado prop´osito do sistema ou de uma de suas partes. Um modelo geralmente ´e apresentado como uma combina¸c˜ao de gr´aficos e textos. O texto pode ser escrito em alguma linguagem de modelagem ou mesmo em linguagem natural. Ao longo deste trabalho ser˜ao utilizados amplamente termos como analista de sistemas, arquiteto de sistemas, engenheiro de software e designer. Analista de sistemas ou simplesmente analista ´e respons´avel por definir e especificar os requisitos funcionais e n˜ao-funcionais de um sistema. Ainda ´e respons´avel por, juntamente com o usu´ario, criar um prot´otipo da interface gr´afica. O analista deve possuir um amplo conhecimento do neg´ocio que est´a sendo modelado. Ele ir´a trabalhar juntamente com os futuros usu´arios do sistema e com os profissionais de TI, atuando como um mediador entre o mundo tecnol´ogico e o mundo do neg´ocio. O analista precisa ser capaz de identificar problemas e oportunidades e, ainda, propor solu¸c˜ oes. Se de um lado o analista precisa conhecer os meandros do neg´ocio modelado e os jarg˜oes da equipe de TI, ele n˜ao deve estar “intoxicado” pela tecnologia. O arquiteto de sistemas ou apenas arquiteto ´e respons´avel por definir a arquitetura de software, a plataforma e a linguagem de implementa¸c˜ ao. Ele tamb´em deve sugerir reutiliza¸c˜ ao de componentes e projetar classes reus´aveis e solu¸c˜ oes arquiteturais. A arquitetura define a quantidade e responsabilidades das camadas de um sistema e a comunica¸c˜ao entre essas camadas. O arquiteto deve estar em contato com o analista para ter uma vis˜ao completa das necessidades do neg´ocio ao mesmo tempo que deve guiar os desenvolvedores, tendo sempre como objetivos qualidade e robustez. O desenvolvedor ou engenheiro de software ´e respons´avel pela escrita do c´odigo-fonte, al´em de realizar testes de unidade e de performance e corrigir defeitos apontados. Designer ´e o profissional respons´avel pela elabora¸c˜ ao e cria¸c˜ ao das interfaces gr´aficas do sistema. Geralmente ´e um profissional especializado em artes gr´aficas e que n˜ao necessita ter 5.
(28) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 6. muitos conhecimentos da ´area de engenharia de software. 2.2. Gera¸c˜ ao de C´ odigo. Gera¸c˜ao de c´odigo ´e o processo de escrever um software que tem a capacidade de escrever outros softwares. Desta forma, um gerador de c´odigo recebe alguns parˆametros de entrada, realiza um processamento e, finalmente, produz c´odigo-fonte como sa´ıda [Her03]. Os geradores de c´odigo podem ser classificados de acordo com o tipo de gera¸c˜ ao de c´odigo utilizado e de acordo com o tipo de arquivos de entrada e sa´ıda. Frameworks como J2EE [MH01] e .NET [and03] for¸cam a escrita de um n´ umero muito maior de linhas de c´odigo, pois geralmente as classes de neg´ocio d˜ao origem a v´arios documentos fonte. Analogamente, quanto mais complexo for o framework mais recomendada ser´a a utiliza¸c˜ ao de um ambiente gerador de c´odigo. 2.2.1. Modelos de Geradores de C´ odigo. Herrington [Her03] classifica os geradores de acordo com o tipo de gera¸c˜ ao em: ativos e passivos. Os geradores ativos podem ser executados diversas vezes sobre o mesmo c´odigo de acordo com as altera¸c˜oes realizadas no input (arquivo de entrada). O c´odigo editado ´e mantido atrav´es de se¸c˜oes protegidas que garante a sua existˆencia em futuras gera¸c˜ oes de c´odigo. A Figura 2.1 ilustra o ciclo de um gerador de c´odigo ativo.. Figura 2.1 Funcionamento de um gerador de c´odigo ativo. Um gerador ativo ´e capaz de ler e entender um modelo abstrato do sistema e produzir o c´odigo-fonte base de implementa¸c˜ao do sistema para uma determinada plataforma e, ainda, ´e capaz de proteger o c´odigo editado. Os geradores passivos permitem que o c´odigo seja gerado uma u ´nica vez e toda a manuten¸c˜ ao necess´aria dever´a ser realizada por parte dos desenvolvedores. A Figura 2.2 ilustra o ciclo de um gerador de c´odigo passivo. Os geradores passivos fornecem uma acelera¸c˜ ao inicial na produtividade do projeto, no entanto, caso os requisitos sejam alterados todas as modifica¸c˜ oes realizadas na base de c´odigo.
(29) ˜ DE CODIGO ´ 2.2 GERAC ¸ AO. 7. Figura 2.2 Funcionamento de um gerador de c´odigo passivo. ser˜ao perdidas a cada execu¸c˜ao do ambiente. Muitos dos geradores de c´odigo passivos s˜ao solu¸co˜es criadas pelos pr´oprios desenvolvedores para resolver tarefas simples e repetitivas. Um gerador de c´odigo passivo ´e muito u ´til na produ¸c˜ ao de coment´ arios e anota¸c˜ oes no c´odigo. Este tipo de gerador de c´odigo ´e bastante difundido como wizard em IDEs - Integrated Development Environment1 . Geralmente uma IDE utiliza um gerador passivo para produzir o c´odigo base (declara¸c˜ao de pacote e classe e blocos de coment´ ario) de uma classe que ser´a editado pelo desenvolvedor. 2.2.2. Tipos de Geradores de C´ odigo. Nesta se¸c˜ao, ser˜ao abordados os principais tipos de geradores de c´odigo que s˜ao classificados por Herrington [Her03] de acordo com os arquivos de entrada (utilizados como insumo para o ambiente) e sa´ıda (produzidos pelo ambiente). 2.2.2.1 Code Munger O gerador conhecido como Code Munger2 ´e o tipo mais comum. A partir de um c´odigo-fonte de entrada, o “munger” seleciona as partes importantes e as utiliza para criar um ou mais arquivos de sa´ıda. A Figura 2.3 apresenta o fluxo de processo de um gerador de c´odigo do tipo Code Munger. O gerador recebe os arquivos de entrada e, geralmente atrav´es de express˜oes regulares ou an´alise de c´odigo somados a templates internos ou externos, constr´oi os arquivos de sa´ıda. Um gerador deste tipo geralmente ´e utilizado para criar documenta¸c˜ ao atrav´es da leitura de vari´aveis e m´etodos. O Javadoc [Sun05b], exemplo de Code Munger, realiza a leitura e an´alise de c´odigo-fonte Java em busca de coment´arios e marca¸c˜ oes para em seguida produzir documenta¸c˜ ao em forma de documentos HTML. A Figura 2.4 ilustra o funcionamento do Javadoc. Em rela¸c˜ao `a qualidade, o Javadoc produz documenta¸c˜ ao bastante precisa pois os coment´arios s˜ao mantidos ao longo do c´odigo-fonte e como esse ser´a completamente percorrido pelo Javadoc, o desenvolvedor n˜ao precisa criar as entradas para os nomes e tipos de vari´ aveis. 1 2. Ambiente de desenvolvimento integrado que provˆe interface gr´ afica, editor, compilador e depurador de c´ odigo G´ıria em inglˆes que significa comportamento simplista.
(30) 8. ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. Figura 2.3 Funcionamento de um gerador de c´odigo do tipo Code Munger. A utiliza¸c˜ao do Javadoc tamb´em fornece um ganho na produtividade, pois o desenvolvedor ´e liberado da tarefa cansativa de criar e manter uma documenta¸c˜ ao externa. Isto ocorre porque o c´odigo-fonte desenvolvido j´a cont´em internamente a documenta¸c˜ ao necess´aria. Um gerador do tipo Code Munger possui um baixo n´ıvel de abstra¸c˜ ao, j´a que a entrada ´e geralmente o pr´oprio c´odigo-fonte.. Figura 2.4 Funcionamento do Javadoc. 2.2.2.2 Inline Code Expander Um gerador de c´odigo do tipo Inline Code Expander recebe um c´odigo-fonte com marcadores que ser˜ao “expandidos” ou transformados durante a produ¸c˜ao do c´odigo. A Figura 2.5 ilustra o fluxo de controle de um inline code expander.. Figura 2.5 Funcionamento de um gerador de c´odigo do tipo Inline Code Expander. Como percebe-se pela Figura 2.5, existem dois c´odigos-fonte. O primeiro, escrito pelo de-.
(31) ˜ DE CODIGO ´ 2.2 GERAC ¸ AO. 9. senvolvedor, cont´em uma s´erie de marca¸c˜ oes. O segundo, produzido pelo gerador de c´odigo, ´e o c´odigo que dever´a ser compilado. Um Inline Code Expander ´e freq¨ uentemente utilizado para estender c´odigo SQL em um c´odigo-fonte j´a existente. Os desenvolvedores adicionam notas ou marca¸c˜ oes que servem como indica¸c˜oes para o gerador. Este por sua vez analisa o c´odigo e sempre que encontra uma indica¸c˜ao, insere o novo c´odigo. A utiliza¸c˜ao de um Inline Code Expander fornece uma qualidade maior no c´odigo do projeto, pois fornece de forma independente a infra-estrutura de acesso aos dados exigida para a execu¸c˜ ao dos comandos SQL. Ele tamb´em deixa o c´odigo de infra-estrutura consistente ao longo de toda a base de c´odigo. 2.2.2.3 Mixed Code Assim como o Inline Code Expander e o Code Munger, o Mixed Code recebe um c´odigo-fonte como entrada, o transforma e produz um c´odigo-fonte de sa´ıda. Por´em o c´odigo de sa´ıda ´e armazenado no pr´oprio arquivo de entrada, sobrescrevendo o conte´ udo existente. A Figura 2.6 representa o funcionamento de um gerador Mixed Code.. Figura 2.6 Funcionamento de um gerador de c´odigo Mixed Code. 2.2.2.4 Partial Class Generator Como o pr´oprio nome indica, um gerador Partial Class ´e respons´avel por criar parte de uma camada da aplica¸c˜ ao. Um gerador de c´odigo deste tipo produz um conjunto b´asico de classes para implementar atividades simples. Caso seja necess´ario, extens˜oes da classe devem ser criadas para implementar novas funcionalidades. Este funcionamento ´e ilustrado na Figura 2.7. Um exemplo t´ıpico de um gerador de c´odigo Partial Class ´e aquele utilizado para construir uma camada de acesso aos dados. O gerador cria o c´odigo de persistˆencia para cada classe e seus campos. Sendo assim, qualquer funcionalidade extra dever´ a ser implementada em uma classe derivada. Numa avalia¸c˜ao geral, percebe-se que um gerador deste tipo controla toda a estrutura de acesso `a base de dados, assim a qualidade do c´odigo estar´a diretamente associada aos templates utilizados para gera¸c˜ao de c´odigo. Altera¸c˜ oes nos templates ser˜ao contempladas em todo o c´odigo gerado. Como a API de acesso aos dados ´e criada automaticamente, haver´ a uma padroniza¸c˜ ao nas assinaturas dos m´etodos e nomes de vari´ aveis, facilitando o entendimento e manuten¸c˜ ao do c´odigo gerado, al´em de reduzir o n´ umero de erros. Portabilidade ´e mais um benef´ıcio da utiliza¸c˜ ao de um gerador de c´odigo deste tipo, pois a l´ogica de acesso aos dados ´e extra´ıda das classes de neg´ocio e armazenada em arquivos de.
(32) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 10. Figura 2.7 Funcionamento de um gerador de c´odigo Partial Class. defini¸c˜ao tornando a camada de persistˆencia port´avel para outra plataforma. 2.2.2.5 Tier Generator Um gerador Tier3 ´e capaz de gerar uma camada inteira de um sistema multi-camada. Num sistema web, pode ser uma camada de acesso aos dados, camada de neg´ocio ou de interface gr´afica com o usu´ario.. Figura 2.8 Funcionamento de um gerador de c´odigo do tipo Tier. A Figura 2.8 mostra como funciona um gerador Tier. O gerador recebe um documento com a defini¸c˜ao abstrata do sistema e um conjunto de templates que ser˜ao utilizados para produzir 3. Do inglˆes camada.
(33) ˜ DE CODIGO ´ 2.2 GERAC ¸ AO. 11. os documentos de sa´ıda. Nestes documentos estar´a contida uma camada completa da aplica¸c˜ ao. A principal diferen¸ca entre os geradores Tier e Partial Class ´e que o primeiro produz e mant´em todo o c´odigo da camada e o segundo deixa a cria¸c˜ ao das classes especializadas para o desenvolvedor. A Figura 2.9 ilustra um gerador Tier que produz a camada de acesso aos dados de uma aplica¸c˜ao J2EE [MH01]. Percebe-se que o gerador produz toda a camada de persistˆencia dos dados. Como o gerador de c´odigo ´e respons´avel pela constru¸c˜ ao da camada, obt´em-se consistˆencia por toda a base de c´odigo gerada. A velocidade com que o gerador de c´odigo produz uma camada da aplica¸c˜ ao permite que o arquiteto experimente diversos estilos e estruturas de classes, simplesmente alterando os templates e gerando novamente o c´odigo. Seria imposs´ıvel para um desenvolvedor fazer as mesmas altera¸c˜oes em uma base inteira de c´odigo consumindo o mesmo tempo.. Figura 2.9 Gerador de c´odigo Tier para aplica¸c˜ao J2EE. 2.2.3. Fluxo de desenvolvimento. A utiliza¸c˜ao de um ambiente gerador de c´odigo provoca uma altera¸c˜ ao no fluxo de desenvolvimento de um sistema. No fluxo convencional, representado na Figura 2.10, os desenvolvedores escrevem o c´odigo, fazem a compila¸c˜ao e em seguida testam o c´odigo. Caso necess´ario, o c´odigo ser´a editado reiniciando o fluxo. A utiliza¸c˜ao de um gerador de c´odigo adiciona duas etapas respons´aveis pela cria¸c˜ ao dos templates e gera¸c˜ao da base de c´odigo. A Figura 2.11 ilustra o fluxo de desenvolvimento com gerador de c´odigo. Na fase de cria¸c˜ao dos templates, o arquiteto e o engenheiro verificam quais necessidades ser˜ao codificadas de forma que o template forne¸ca um c´odigo fiel `a modelagem. Na fase de gera¸c˜ao de c´odigo, os templates e os arquivos de defini¸c˜ ao ser˜ao inseridos no ambiente gerador de c´odigo. Dependendo do gerador de c´odigo utilizado, o c´odigo produzido.
(34) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 12. Figura 2.10 Fluxo de desenvolvimento convencional. Figura 2.11 Fluxo de desenvolvimento com gerador de c´odigo. poder´a ser editado e ent˜ao, juntamente com o c´odigo escrito pelos desenvolvedores, compilado. Caso necess´ario o fluxo ser´a reiniciado. 2.3. Mapeamento OO-Relacional. Os desenvolvedores de sistemas orientados a objetos que utilizam SGBD4 relacional como forma de persistˆencia de dados geralmente gastam uma boa parte do tempo de programa¸c˜ ao para tornar os objetos de neg´ocio persistentes. Isto acontece pela diferen¸ca fundamental entre o paradigma orientado a objetos e o paradigma relacional. A base do paradigma OO ´e um objeto que possui atributos, comportamento e heran¸ca, enquanto que a base do paradigma relacional ´e uma tabela que tem a capacidade de armazenar dados e relacionar-se com outras tabelas. Segundo Yoder [YJW98] a diferen¸ca entre os paradigmas ´e similar `a impedˆancia entre circuitos eletrˆonicos, sendo assim, quando se conecta um sistema orientado a objetos a bancos de dados relacionais obt´em-se circuitos que funcionam independentemente e com sinais (formato de dados) n˜ao-compat´ıveis. Existem algumas formas para contornar o problema da “impedˆancia” entre modelos, entre elas: utiliza¸c˜ao de um SGBD orientado a objetos, criar um “circuito” (middleware) que inserido 4. Sistema de Gerenciamento de Bancos de Dados ou Banco de Dados..
(35) ˜ 2.4 PADROES OMG - OBJECT MANAGEMENT GROUP. 13. entre os paradigmas realize de forma transparente a troca de dados. Ou seja, cria-se uma camada de persistˆencia de dados capaz de converter os objetos de neg´ocio do sistema em tabelas do banco e dados relacional. Apesar da existˆencia de v´arios SGBDs orientados a objetos [LC97], estes ainda n˜ao se tornaram um padr˜ao da ind´ ustria. Ainda, os SGBDs relacionais possuem algumas vantagens como performance e capacidade de processamento de consultas SQL. J´a existem v´arias ferramentas que realizam a “ponte” entre os modelos OO e relacional, entre elas: TopLink [Ora05b], Hibernate [Hib05], JDO [JR03]. Essas ferramentas utilizam o conceito de camada de persistˆencia transparente5 (persistent layer transparency) que realiza a transforma¸c˜ao dos objetos em tabelas e relacionamentos de um banco de dados relacional. Geralmente, o usu´ario necessita configurar o middleware indicando o mapeamento entre suas classes e as tabelas do banco de dados. Uma vez configuradas as regras de mapeamento, os usu´arios n˜ao precisam mais se preocupar com as tabelas e os relacionamentos, j´a que a persistˆencia e recupera¸c˜ao dos dados ser´a realizada de forma transparente pela camada de persistˆencia. E mais, o desenvolvedor n˜ao precisar´a escrever consultas SQL para atualiza¸c˜ ao e recupera¸c˜ao de dados. Um sistema que utiliza uma camada de persistˆencia convencional torna-se “engessado”, pois altera¸c˜oes no SGBD necessitam de reescrita de c´odigo. J´a um sistema com camada de persistˆencia transparente possibilita a substitui¸c˜ ao do SGBD sem que haja reescrita de c´odigofonte. Existem v´arias propostas de padr˜oes de mapeamento entre os modelos OO e ER, no entanto, n˜ao existe um padr˜ao de facto. Este trabalho segue o padr˜ao de mapeamento proposto por Ambler [Amb00]. Segundo o padr˜ao proposto por Scott Ambler, um atributo da classe corresponde a zero ou mais colunas de uma tabela em um banco de dados relacional. Zero, pois nem todos os atributos da classe s˜ao persistentes, alguns atributos s˜ao calculados. Mais colunas, pois um atributo como endere¸co deve dar origem a v´arias colunas como rua, n´ umero, bairro, etc. O padr˜ao prop˜oe tamb´em que uma classe de neg´ocio seja mapeada para uma ou mais tabelas, e prevˆe a implementa¸c˜ao de heran¸cas e relacionamentos. Alguns desses t´opicos ser˜ao abordados com mais detalhes ao longo deste trabalho `a medida em que se fizer necess´ario. 2.4 2.4.1. Padr˜ oes OMG - Object Management Group MOF. Atualmente, com as grandes empresas inseridas na era da computa¸c˜ ao, cada uma possui seu pr´oprio padr˜ao de dados. O grande problema ´e que cada empresa armazena seus dados em diferentes formatos, complicando cada vez mais a comunica¸c˜ ao eletrˆonica entre as empresas ´ envolvidas. E poss´ıvel tomar como exemplo um banco que realiza milhares de transferˆencias eletrˆonicas diariamente, e grande parte dessas transa¸c˜ oes envolvem institui¸c˜ oes que utilizam v´arios padr˜oes de arquivos. As institui¸c˜ oes envolvidas precisam encontrar um padr˜ao para intercambiar tais arquivos. Desse problema surgiu a necessidade de um padr˜ao para definir o formato de armazenamento e compartilhamento de dados. 5 A aplica¸ca ˜o utiliza a mesma API de acesso aos dados, independentemente da forma de armazenamento e do SGBD utilizado. O conceito de camada de persistˆencia transparente simplifica a aplica¸c˜ ao e aumenta a manutenibilidade, escondendo os detalhes da implementa¸ca ˜o de persistˆencia dos dados..
(36) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 14. O padr˜ao MOF - Meta-Object Facility ´e o padr˜ao OMG [BRJ98] que especifica uma linguagem abstrata para descri¸c˜ao de outras linguagens. MOF tamb´em ´e um meta-metamodelo e sua sintaxe abstrata ´e utilizada para descrever metamodelos. A arquitetura MOF possui quatro camadas como ilustra a tabela 2.1. N´ıvel M0. Camada dados. M1. metadados / modelos. M2. meta-metadados / metamodelos. M3. meta-metamodelo. Exemplos Registros de uma tabela de um BD, instˆ ancias de classes Java Tabelas, colunas de um BD, classes, m´etodos e atributos Java Defini¸c˜ ao dos elementos de uma base dados como Tabela, Coluna, descri¸c˜ ao dos construtores da linguagem Java MOF. Tabela 2.1 Arquitetura MOF. A figura mostra que cada n´ıvel M(x), onde x<3, ´e descrito utilizando construtores definidos no n´ıvel M(x+1). O n´ıvel M3 ´e o n´ıvel mais alto, enquanto que o n´ıvel 0 ´e o mais baixo e representa os dados. S˜ao elementos do n´ıvel 0 as instˆancias de classes da linguagem, os registros de uma tabela de banco de dados, etc. O n´ıvel 1 representa os metadados ou modelos, s˜ao eles que definem a estrutura dos dados, podendo ser as tabelas e colunas de um banco de dados ou as classes da linguagem Java. O n´ıvel 2 ´e o n´ıvel dos meta-metadados ou metamodelos, s˜ao os elementos que definem os modelos e conceitos como tabela, coluna, classe, etc. Finalmente, o n´ıvel 3 ou meta-metamodelo ´e o respons´avel pela defini¸c˜ ao dos metamodelos. A cria¸c˜ ao de um metamodelo para definir o padr˜ao XML[Har01] e seus elementos ser´a utilizada para ilustrar a utiliza¸c˜ao do padr˜ao MOF na cria¸c˜ ao de metamodelos. Um documento XML pode ser descrito como um conjunto de n´os. Estes n´os podem ser: elementos, atributos e texto, assim como no Exemplo 2.1. Exemplo 2.1 Um t´ıpico documento XML 1 <a l u n o s > 2 <p e s s o a nome=”Maria”/> 3 <p e s s o a nome=”J o s e ”/> 4 <c u r s o >C i e n c i a da Computacao</c u r s o > 5 </p e s s o a > 6 </a l u n o s >. O exemplo cont´em os seguintes n´os do tipo elemento (ElementNode), segundo a ordem em que aparecem: alunos, pessoa, pessoa, curso. Os n´os do tipo atributo (AttributeNode) s˜ao: nome e nome. O u ´nico n´o do tipo texto (TextNode) ´e “Ciencia da Computacao”. A partir do exemplo, pode-se afirmar sobre a estrutura de um documento XML que: Cada n´ o possui um nome (em n´os de tipo texto o nome ´e formado pelo pr´oprio texto); N´ os elemento podem conter outros n´os elemento, n´os atributo ou n´os texto; N´ os atributo possuem um valor (e.g. nome tem valor Maria); e.
(37) ˜ 2.4 PADROES OMG - OBJECT MANAGEMENT GROUP. 15. Em cada documento XML existe apenas um elemento raiz.. A Figura 2.12 exibe uma poss´ıvel representa¸c˜ ao, em MOF, do modelo da linguagem XML.. Figura 2.12 Representa¸c˜ao da linguagem XML em MOF. As caixas na figura representam classes MOF. Existe uma classe abstrata chamada Node com um atributo name: ´e esta classe que captura o fato de que todos os n´os possuem um nome. A classe Node ´e uma generaliza¸c˜ao de classes n˜ao-abstratas que representam os trˆes diferentes tipos de n´os: ElementNode, TextNode e AttributeNode. Entre as classes ElementNode e Node existe uma associa¸c˜ao MOF chamada contains que captura o fato de que cada classe ElementNode pode conter zero ou mais n´os internos. Para limitar a apenas um a quantidade de elementos raiz, foi criada uma subclasse de ElementNode chamada RootNode para representar o elemento raiz. O nome do documento XML ´e armazenado no atributo documentName. O metamodelo captura toda a informa¸c˜ ao que diz respeito `a estrutura dos documentos XML, desta forma ser´a identificado como metamodelo da linguagem XML. Como percebe-se, o padr˜ao MOF n˜ao foi utilizado para representar a gram´atica, mas sim a estrutura da linguagem XML. ´ importante saber que a especifica¸c˜ E ao MOF n˜ao define nenhuma representa¸c˜ ao textual ou gr´afica da linguagem. O metamodelo apresentado foi ilustrado utilizando-se a nota¸c˜ ao UML. A Figura 2.13 ilustra os principais elementos do padr˜ao MOF e como eles est˜ao relacionados entre si. ´ interessante notar a organiza¸c˜ao dos elementos. Todas as classes s˜ao subclasses do eleE mento modelo (ModelElement). O classifier ´e uma interface que define classes (Class), tipos de dados (DataType) e associa¸c˜oes (Association). Um namespace pode ser visto como um agrupador de elementos. Os elementos contidos em um namespace recebem o nome de feature e podem ser comportamentais (BehavioralFeature) e estruturais (StructuralFeature). Opera¸c˜oes ou m´etodos (Operation) e exce¸c˜oes (Exception) s˜ao features comportamentais. Os atributos (Attribute) e referˆencias (Reference) s˜ao features estruturais. Tanto (Package) como Classifier s˜ao subclasses de GeneralizableElement e portanto podem ser generalizados..
(38) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 16. Figura 2.13 Principais elementos do padr˜ao MOF. 2.4.2. XMI. XML Metadata Interchange [GDB02] ´e o padr˜ao da OMG para armazenamento e compartilhamento de metamodelos MOF atrav´es de documentos XML. O padr˜ao define um conjunto de regras para gerar DTDs ou XML Schemas a partir de metamodelos MOF e as regras para serializa¸c˜ao de instˆancias desses metamodelos. Analogamente, o padr˜ao possibilita o armazenamento e intercˆambio de modelos UML na forma de documentos XML. As principais caracter´ısticas do padr˜ao XMI s˜ao: Provˆe um padr˜ ao para representa¸c˜ ao de objetos em XML, permitindo o intercˆ ambio efetivo de objetos; Especifica como criar XML Schemas a partir de modelos; Permite a cria¸c˜ ao de documentos XML b´asicos que, mais tarde, possam evoluir atrav´es da adi¸c˜ao de elementos `a estrutura; e Os usu´ arios n˜ao precisam conhecer a fundo a linguagem XML para utilizar o padr˜ao.. A vers˜ao 2.0 do padr˜ao XMI permite, adicionalmente, o mapeamento de modelos UML em XML Schemas. Como o padr˜ao define o mapeamento dos objetos em XML, n˜ao ser´a necess´ario definir a forma pela qual esses objetos ser˜ao intercambiados ou transformados, j´a que todo o processo ser´a realizado por um software capaz de interpretar o padr˜ao XMI..
(39) ˜ 2.4 PADROES OMG - OBJECT MANAGEMENT GROUP. 17. Figura 2.14 Representando uma classe em XMI. A Figura 2.14 apresenta um modelo UML contendo uma classe Carro e os atributos ano e marca. Logo abaixo, tem-se um documento XMI que armazena os dados de um objeto da classe Carro. Este documento pode ser validado por um XML Schema produzido a partir do modelo. Um documento XMI ´e capaz de armazenar qualquer modelo MOF e suas instˆancias, e de definir v´arios aspectos envolvidos na descri¸c˜ ao de objetos, entre eles: representar objetos na forma de elementos e atributos XML; fazer a liga¸c˜ ao entre objetos de um mesmo arquivo ou distribu´ıdos em v´arios arquivos; identificar objetos e referenci´a-los; controlar a vers˜ ao dos objetos em um modelo XMI; e validar documentos XMI atrav´es de DTDs e XML Schemas. Os dois principais tipos de documentos definidos pelo padr˜ao XMI s˜ao os pr´oprios documentos XMI e XMI Schema. Um documento XMI permite armazenar, por exemplo, os objetos de um diagrama de objetos UML. Um documento XMI Schemas possibilita o armazenamento de modelos orientados a objetos. Essa versatilidade do padr˜ao XMI para representar dados e meta-dados ´e uma de suas principais caracter´ısticas. A Figura 2.15 mostra um diagrama de classes com uma classe Carro e uma classe Pessoa. A associa¸c˜ao da classe Carro com a classe Pessoa d´a origem ao atributo motorista. O relacionamento tamb´em indica que um carro pode ter zero ou mais objetos da classe Pessoa.. Figura 2.15 Representa¸c˜ao das classes Carro e Pessoa. ´ poss´ıvel representar instˆancias das classes apresentadas na figura atrav´es de atributos ou E elementos XML. O Exemplo 2.2 mostra um trecho de documento XMI para representar instˆancias das classes do modelo. Neste caso, tem-se um objeto carro que possui dois motoristas..
(40) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 18. Exemplo 2.2 Trecho de documento XMI 1 <Carro m o t o r i s t a=”P1 P2”/> 2 <M o t o r i s t a xmi : i d=”P1”/> 3 <M o t o r i s t a xmi : i d=”P2”/>. O atributo XML motorista no elemento carro representa as referˆencias para os elementos Motorista. O valor do atributo motorista cont´em os identificadores de cada um dos elementos Pessoa que representa o motorista do carro. A representa¸c˜ao dos objetos do modelo poderia igualmente ser realizada utilizando elementos XML. Neste caso seriam utilizados links para identificar e referenciar os objetos. Desta forma cada referˆencia apontaria para o identificador do objeto associado. Todavia, o elemento conteria apenas referˆencias para elementos com os dados do motorista. O Exemplo 2.3 ilustra um poss´ıvel documento XMI que utiliza objetos para representar os objetos. Exemplo 2.3 Trecho de documento XMI 1 2 3 4 5 6. <Carro> <m o t o r i s t a h r e f=”#P1”/> <m o t o r i s t a h r e f=”#P2”/> </Carro> <Pessoa xmi : i d=”P1”/> <Pessoa xmi : i d=”P2”/>. Como percebe-se, foram criados dois elementos motorista dentro de Carro, no atributo href destes elementos est´a uma URI que aponta para os elementos do documento que contˆem as defini¸c˜oes dos objetos Pessoa. A relevˆancia do padr˜ao XMI para o entendimento do resto desse trabalho est´a na capacidade de armazenamento modelos UML, mais especificamente, os elementos de um diagrama de classes. A vers˜ao 1.2 do padr˜ao XMI foi utilizada para representar os modelos que ser˜ao utilizados durante a implementa¸c˜ao do ambiente XO2 .. Figura 2.16 Representa¸c˜ao da classe Carro. A Figura 2.16 ilustra uma classe Carro que cont´em apenas um atributo ano do tipo int. O Exemplo 2.4 ilustra trechos de um documento XMI para armazenar o modelo. Exemplo 2.4 Trecho de documento XMI 1 ... 2 <UML: C l a s s xmi . i d = ’ sm $ 23d278 : 1 0 1 8 6 dedd48 :−7 f f 6 ’ 3 name = ’ Carro ’ v i s i b i l i t y = ’ p u b l i c ’> 4 <UML: C l a s s i f i e r . f e a t u r e > 5 <UML: A t t r i b u t e xmi . i d = ’ sm $ 23d278 : 1 0 1 8 6 dedd48 :−7 f e 9 ’ 6 name = ’ ano ’ v i s i b i l i t y = ’ p r i v a t e ’>.
(41) 2.5 JMI. 7 8 9 10 11 12 13 14 15. 19. <UML: S t r u c t u r a l F e a t u r e . type> <UML: DataType xmi . i d r e f = ’ sm $ 23d278 : 1 0 1 8 6 dedd48 :−7 fde ’/> </UML: S t r u c t u r a l F e a t u r e . type> </UML: A t t r i b u t e > </UML: C l a s s i f i e r . f e a t u r e > </UML: C l a s s > ... <UML: DataType xmi . i d = ’ sm $ 23d278 : 1 0 1 8 6 dedd48 :−7 fde ’ name = ’ i n t ’/> . . .. A declara¸c˜ao da classe Carro ´e expressa pelo c´odigo encontrado entre as linhas 2 e 12. Foram exibidos apenas os atributos mais importantes, no caso id, name e visibility. Primeiramente, tem-se o xmi.id, que ´e um identificador u ´nico dentro do modelo e poder´a ser utilizado para referenciar a classe. O formato do id varia de acordo com a ferramenta utilizada. Prosseguindo, o atributo name identifica o nome da classe. Em visibility ser´a armazenado o identificador de visibilidade da classe (public, protected, private). A linha 4 cria um compartimento para os features (atributos, m´etodos) de um classifier. Para o exemplo apresentado, o u ´nico elemento ser´a o atributo ano, declarado na linha 5. Assim como o elemento class, o elemento attribute possui id, name e visibility. Al´em disso, deve possuir um tipo. O atributo ano ´e do tipo inteiro, assim na linha 8, h´a um elemento datatype que referencia o tipo int declarado pelo c´odigo da linha 14. O exemplo ilustra como a flexibilidade fornecida pelo padr˜ao XMI torna os documentos mais extensos. A Figura 2.17 mostra uma vis˜ao geral dos principais elementos da linguagem UML e como eles relacionam entre si. 2.5. JMI. O padr˜ao Java Metadata Interface [Sun05d] permite a interoperabilidade entre o padr˜ao MOF e linguagem Java. Se XMI provˆe o armazenamento de modelos MOF em documentos XML, JMI torna capaz a utiliza¸c˜ao de modelos MOF em aplica¸c˜ oes Java. JMI ´e um servi¸co extens´ıvel que facilita o acesso de aplicativos escritos na plataforma Java a um reposit´orio de metadados descritos em MOF. As ferramentas que utilizam JMI deixam expostos todos os metadados utilizados, facilitando assim a cria¸c˜ ao de plug-ins ou extens˜oes. JMI provˆe: Um framework de metadados que fornece um modelo de programa¸c˜ ao Java para acesso aos metadados contidos em um reposit´orio;. oes Java; e Um framework para integrar e estender ferramentas e aplica¸c˜ Integra¸c˜ ao com modelos OMG e sua arquitetura de metadados.. Finalmente, como uma implementa¸c˜ ao em Java para acesso a metadados descritos em MOF, JMI especifica um conjunto de regras para gerar um conjunto de interfaces Java que possibilitem a manipula¸c˜ao da informa¸c˜ao contida em instˆancias do metamodelo..
(42) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 20. Figura 2.17 Vis˜ao geral dos principais elementos da linguagem UML. 2.6. MDR. O MDR - Metadata Repository [MDR05] ´e um reposit´orio de metadados MOF. O reposit´orio ´e capaz de interpretar e armazenar qualquer metamodelo MOF. Metamodelos e metadados podem ser importados e exportados do MDR utilizando o padr˜ao XMI. Sendo assim, os metadados armazenados no reposit´orio podem ser manipulados atrav´es de JMI. O MDR ´e desenvolvido como parte do projeto NetBeans [Net05] e na pr´atica fornece aos sistemas implementados em Java um acesso direto a reposit´orios de documentos MOF. Este acesso ´e promovido atrav´es da integra¸c˜ ao de trˆes padr˜oes existentes: MOF (defini¸c˜ ao de metamodelos), XMI (armazenamento de metamodelos em documentos XML) e JMI (API Java para acesso a metadados). O MDR permite que uma aplica¸c˜ ao leia e manipule documentos XMI facilmente sem que haja uma necessidade do conhecimento do padr˜ao. 2.7. MDA. O MDA - Model Driven Architecture [KWB03] ´e um framework para desenvolvimento de software definido pela OMG totalmente baseado em modelos e transforma¸c˜ oes de modelos. O MDA define como separar especifica¸c˜ ao e implementa¸c˜ ao de um sistema em uma plataforma..
(43) 21. 2.7 MDA. Figura 2.18 Ciclo de Desenvolvimento Tradicional do RUP. O MDA permite: Especificar um sistema independentemente de plataforma; Escolher uma plataforma espec´ıfica para implementa¸c˜ ao do sistema; e Transformar a especifica¸c˜ ao do sistema em uma especifica¸c˜ ao para uma determinada plataforma. Os trˆes principais objetivos da arquitetura MDA s˜ao: portabilidade, interoperabilidade e reusabilidade atrav´es de uma separa¸c˜ao arquitetural de preocupa¸c˜ oes 6 . A utiliza¸c˜ao do MDA n˜ao requer grandes altera¸c˜ oes no ciclo de desenvolvimento de software iterativo e incremental do RUP [Kru00]. O ciclo de desenvolvimento tradicional como mostra a Figura 2.18 tem como fases geradoras de modelos (de an´alise e projeto) as fases 1 a 3 (requisitos, an´ alise e projeto). Contudo, tais artefatos come¸cam a perder seu valor quando ´e iniciada a fase ` medida que o sistema ´e alterado, a distˆancia entre o que foi modelado de implementa¸c˜ao. A ´ preciso disciplina e integra¸c˜ nas primeiras fases e o c´odigo implementado aumenta. E ao entre o analista e o desenvolvedor para que toda altera¸c˜ ao ou corre¸c˜ ao do c´odigo-fonte seja refletida nos modelos de An´alise e Projeto e vice-versa. O ciclo de desenvolvimento MDA, como mostra a Figura 2.19, ´e bem parecido com um ciclo tradicional de desenvolvimento. A principal diferen¸ca entre o processo MDA e o processo tradicional ´e que as transforma¸c˜oes entre os modelos no processo tradicional s˜ao feitas manualmente e no MDA s˜ao realizadas com o aux´ılio de ferramentas, eliminando a necessidade de 6. Segundo este conceito, ´e essencial separar as partes mut´ aveis das partes triviais de um sistema para conseguir reutiliza¸ca ˜o das partes triviais..
(44) 22. ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. Figura 2.19 Ciclo de Desenvolvimento MDA. que altera¸c˜oes realizadas no c´odigo ou em um diagrama sejam refletidas nos outros diagramas atrav´es de um processo manual. A Figura 2.20 ilustra as transforma¸c˜ oes executadas por uma ferramenta MDA. Na arquitetura MDA, transforma¸c˜ ao ´e o processo de produzir um modelo a partir de outro j´a existente. Essa transforma¸c˜ao ´e realizada atrav´es de diretivas conhecidas como regras de transforma¸c˜ao. O MDA possui trˆes diferentes de modelos (PIM, PSM e c´odigo-fonte) que s˜ao sucintamente descritos a seguir. 2.7.1. PIM - Plataform Indepent Model. O PIM, como o pr´oprio nome indica, modelo independente de plataforma e tecnologia, ´e o primeiro modelo definido e apresenta um alto n´ıvel de abstra¸c˜ ao. Um modelo PIM descreve um modelo de neg´ocio e os detalhes de como as funcionalidades do sistema ser˜ao implementadas sem especificar detalhes sobre as tecnologias utilizadas. 2.7.2. PSM - Platform Specific Model. O PSM ´e um modelo de sistema para uma determinada plataforma e tecnologia, ele cont´em detalhes da implementa¸c˜ao e da tecnologia empregada. O PSM ´e oriundo do PIM e ´e produzido de acordo com uma s´erie de regras de transforma¸c˜ ao previamente definidas. Um PIM pode ser transformado em v´arios PSMs. Para cada plataforma tecnol´ogica dever´ a ser gerado um PSM diferente..
(45) 23. 2.7 MDA. 2.7.3. C´ odigo-Fonte. A transforma¸c˜ao do modelo PSM em c´odigo ´e a u ´ltima etapa do processo MDA de desenvolvimento. Com o PSM especificado para uma tecnologia ou plataforma, esta transforma¸c˜ ao ocorre de forma bastante simples, utilizando apenas as regras de transforma¸c˜ ao j´a definidas. Assim, o c´odigo poder´a ser gerado automaticamente sem a interferˆencia humana.. Figura 2.20 Transforma¸c˜oes MDA. 2.7.4. Transforma¸c˜ oes. Como abordado anteriormente, o MDA ´e totalmente baseado em modelos e transforma¸c˜ oes entre modelos. As transforma¸c˜oes podem ser manuais ou autom´aticas. A Figura 2.21 ilustra detalhadamente as transforma¸c˜oes entre os modelos PIM e PSM.. Figura 2.21 Transforma¸c˜oes MDA. Atrav´es da Figura 2.21 percebe-se que no PIM s˜ao detalhados tipos e padr˜oes independentes da plataforma utilizada. O PSM cont´em os mesmos tipos e padr˜oes, desta vez reescritos com os detalhes da plataforma na qual o sistema ser´a implementado. O MDA ainda est´a em fase de evolu¸c˜ ao e estabelecimento na ind´ ustria. Alguns desafios ainda persistem, entre eles a transforma¸c˜ao autom´atica entre os modelos PIM e PSM que atualmente.
(46) ˜ DE CODIGO: ´ ˜ GERAC ¸ AO CONCEITOS, PADROES E TECNOLOGIAS. 24. ´e realizada pelas ferramentas atrav´es da escrita dos templates. Acredita-se que, no futuro, o MDA torne-se um padr˜ao tanto na ´area acadˆemica quanto na ind´ ustria de desenvolvimento de software por trazer benef´ıcios como: ao precisa escrever o c´odigo-fonte b´asico; Produtividade: o desenvolvedor n˜ Portabilidade: com a separa¸c˜ ao do PIM e do PSM, um projeto desenvolvido em MDA pode ser facilmente port´avel, bastando a cria¸c˜ ao de um modelo espec´ıfico para a plataforma; Interoperabilidade: visto que ele permite o relacionamento entre diferentes modelos PSM; e Manutenibilidade: altera¸c˜ oes no modelo PIM s˜ao refletidas diretamente no modelo PSM.. 2.8. Velocity. Em seu in´ıcio, a World Wide Web era constitu´ıda puramente por p´aginas est´aticas criadas com a linguagem HTML. Com o passar do tempo, os desenvolvedores sentiram a necessidade de produzir conte´ udo dinˆamico e personalizado. Linguagens como Perl [WCO00], ASP [Wei00], PHP [WT04] e JSP [Ber03] fornecem uma infra-estrutura completa para a cria¸c˜ ao de conte´ udo dinˆamico para websites. O padr˜ao MVC - Model View Controller [GHJV95] surgiu para separar a interface gr´afica do sistema, assim o designer preocupa-se apenas com a parte visual, enquanto que os desenvolvedores se preocupam com a parte funcional e dinˆamica do site. Segundo o padr˜ao, o modelo ou regras de neg´ocio devem ser separados da apresenta¸c˜ ao e do controlador. A Figura 2.22 ilustra o padr˜ao MVC.. Figura 2.22 Padr˜ao MVC.
Documentos relacionados
Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for
A partir da junção da proposta teórica de Frank Esser (ESSER apud ZIPSER, 2002) e Christiane Nord (1991), passamos, então, a considerar o texto jornalístico como
Mesmo com suas ativas participações na luta política, as mulheres militantes carregavam consigo o signo do preconceito existente para com elas por parte não somente dos militares,
As medidas da ADM do posicionamento articular estático do cotovelo, obtidas neste estudo com a técnica de fleximetria, apresentaram baixa confiabilidade intraexaminador para as
A Organização estará a cargo do Município de Fornos de Algodres, assim como todos os membros do STAFF que estarão disponíveis para vos auxiliar no que for preciso.. Ao
Para exibir as fotos ou os vídeos salvos em um cartão de memória ou na área de fotos "não-favoritas" da memória interna, pressione o botão Review (Rever) para entrar no
psicológicos, sociais e ambientais. Assim podemos observar que é de extrema importância a QV e a PS andarem juntas, pois não adianta ter uma meta de promoção de saúde se
Assim, nesse âmbito, o presente trabalho visa avaliar a biodegradabilidade do lodo de esgoto de descarte de reatores anaeróbios no processo da compostagem, sob aspectos