2008 / 2009
2008 / 2009
Agradecimentos
Ao meu orientador, Professor Doutor Alexandre Bragana, pela orientao, superviso e aconselhamento durante todo o perodo do projecto. Cristina Silva pelas contribuies na reviso deste relatrio e pelo apoio, disponibilidade, fora e incentivos durante todo este percurso. Aos meus pais, que muito contriburam e me apoiaram ao longo de todo este percurso. Aos meus amigos, pelas palavras de apoio durante o tempo dedicado a este projecto.
vii
Resumo
A adopo de estratgias de desenvolvimento de software baseadas em modelos tem despertado bastante interesse junto do meio acadmico e mais recentemente no meio industrial. Neste novo paradigma, os artefactos de software so manipulados como modelos e torna-se possvel o estabelecimento de relaes e transformaes entre eles. Neste contexto, usual a gerao do texto dos programas com base em modelos de mais alto nvel de abstraco. A traduo inversa neste contexto torna-se um pouco mais complexa e propcia a erros pois necessrio efectuar o parsing do texto dos programas. No contexto do Model Driven Development, o objectivo ltimo que todos os artefactos possam ser manipulados como modelos. Este projecto teve como objectivo desenvolver suporte (experimental) para que modelos java pudessem ser manipulados e transformados em modelos de classes UML. Foi desenvolvido usando a Framework EMF do Eclipse e a linguagem de transformao ATL e envolveu uma grande dose de investigao visto que os conceitos eram novos e bastante abstractos. de salientar que o resultado deste projecto ser integrado numa framework open source de suporte ao desenvolvimento baseado em modelos de linhas de produtos de software com base na metodologia MoDeLine.
ix
ndice
Agradecimentos .......................................................................................................vii Resumo .................................................................................................................... ix ndice ....................................................................................................................... xi ndice de Figuras..................................................................................................... xv ndice de Tabelas ................................................................................................... xvii ndice de excertos de cdigo .................................................................................. xix Notao e Glossrio ............................................................................................... xxi 1 Introduo ........................................................................................................ 1
1.1 1.2
1.2.1 1.2.2
1.3 1.4
Contexto ............................................................................................................ 5
2.1 2.2 2.3 2.4 Model-Driven Engineering ................................................................................. 5 Eclipse Modeling Framework .......................................................................... 10 Metamodelo JavaModel ................................................................................... 12 Metamodelo de Classes UML ........................................................................... 14
xi
3.1.5
3.2
3.2.1 3.2.2
ATL Query........................................................................................................ 26
Estrutura de uma ATL Query ..................................................................................... 27 Semntica da execuo da Query................................................................................ 27
ATL Library ..................................................................................................... 28 Data Types ........................................................................................................ 28 ATL Comments ................................................................................................ 30 OCL Declarative Expressions .......................................................................... 30
Criao do projecto ATL ................................................................................. 34 Criao das configuraes ................................................................................ 37 Relaes entre modelos ..................................................................................... 39
JModelElement (abstracta) / Element (abstracta) ........................................................ 39 JCompilationUnit....................................................................................................... 40 JMember (abstracta)................................................................................................... 40 JPackage / Package .................................................................................................... 41 JClass / Class ............................................................................................................. 42 JField / Property......................................................................................................... 45 JInitializer.................................................................................................................. 46 JMethod / Operation .................................................................................................. 46 JParameter ................................................................................................................. 48
4.4 4.5
Concluses .......................................................................................................55
5.1 5.2 5.3 Objectivos realizados ........................................................................................ 55 Limitaes & trabalho futuro .......................................................................... 55 Apreciao final ................................................................................................ 56
xii
Anexo 1 Anexo 2
xiii
ndice de Figuras
Figura 1 Noes bsicas a) paradigma object-oriented b) paradigma MDE ..................................... 5 Figura 2 Componentes principais do MDA....................................................................................... 6 Figura 3 a) Model-Driven Architecture b) exemplo prtico MDA ..................................................... 7 Figura 4 Processo de transformao de modelos.............................................................................. 8 Figura 5 - Objectivo final da MDA da OMG ....................................................................................... 9 Figura 6 Relao do projecto com a MDA. .................................................................................... 10 Figura 7 Hierarquia de classes do modelo Ecore (a cinzento esto representadas as classes abstractas)........................................................................................................................................ 11 Figura 9 Diagrama de Classes do Metamodelo JavaModel ............................................................ 13 Figura 8 Extracto do metamodelo Java2 (baseado no JavaModel).................................................. 14 Figura 10 Extracto do metamodelo UML do UML2........................................................................ 15 Figura 11 Ambiente de Desenvolvimento ATL ................................................................................ 18 Figura 12 Esquema da estrutura do tipo de dados ATL .................................................................. 29 Figura 13 Esquema da transformao ATL java2uml ................................................................. 33 Figura 14 Janela para criao de um novo projecto ATL ............................................................... 34 Figura 15 Janela para criao de um novo ficheiro ATL ................................................................ 36 Figura 16 Modelo Java exemplo do ficheiro java.java2 .................................................................. 37 Figura 17 Janela que permite criar, gerir e correr as configuraes .............................................. 38 Figura 18 Modelo de Classes UML do ficheiro uml.uml.............................................................. 54 Figura 19 Metamodelo EMF_JavaModel Jclass................................................................... 61 Figura 20 Metamodelo EMF_JavaModel JcompilationUnit ............................................ 61 Figura 21 Metamodelo EMF_JavaModel JField................................................................... 61 Figura 22 Metamodelo EMF_JavaModel JInitializer ..................................................... 62 Figura 23 Metamodelo EMF_JavaModel JMember ................................................................ 62 Figura 24 Metamodelo EMF_JavaModel JMethod ................................................................ 62 Figura 25 Metamodelo EMF_JavaModel JModelElement ................................................... 62 Figura 26 Metamodelo EMF_JavaModel JPackage .............................................................. 62
xv
Figura 27 Metamodelo EMF_JavaModel JParameter.......................................................... 63 Figura 28 Metamodelo EMF_JavaModel JVisibility ....................................................... 63 Figura 29 Metamodelo UML2_UMLClassModel EData Types ............................................. 64 Figura 30 Metamodelo UML2_UMLClassModel EClass::Comment ..................................... 64 Figura 31 Metamodelo UML2_UMLClassModel EClass::Feature ..................................... 64 Figura 32 Metamodelo UML2_UMLClassModel EEnum::VisibilityKind ....................... 64 Figura 33 Metamodelo UML2_UMLClassModel EClass::TypedElement ......................... 65 Figura 34 Metamodelo UML2_UMLClassModel EClass::TemplateableElement.......... 65 Figura 35 Metamodelo UML2_UMLClassModel EClass::ParameterableElement ....... 65 Figura 36 Metamodelo UML2_UMLClassModel EClass::ConnectableElement ............ 65 Figura 37 Metamodelo UML2_UMLClassModel EClass::BehavioralFeature .............. 66 Figura 38 Metamodelo UML2_UMLClassModel EClass::DeploymentTarget ................ 66 Figura 39 Metamodelo UML2_UMLClassModel EClass::EncapsulatedClassifier... 66 Figura 40 Metamodelo UML2_UMLClassModel EClass::PackageableElement ............ 66 Figura 41 Metamodelo UML2_UMLClassModel EClass::Element ..................................... 67 Figura 42 Metamodelo UML2_UMLClassModel EClass::NamedElement ......................... 68 Figura 43 Metamodelo UML2_UMLClassModel EClass::Namespace ................................ 68 Figura 44 Metamodelo UML2_UMLClassModel EClass::Package ..................................... 69 Figura 45 Metamodelo UML2_UMLClassModel EClass::Type............................................ 69 Figura 46 Metamodelo UML2_UMLClassModel EClass::Classifier .............................. 70 Figura 47 Metamodelo UML2_UMLClassModel EClass::Parameter ................................ 71 Figura 48 Metamodelo UML2_UMLClassModel EClass::RedefinableElement ............ 71 Figura 49 Metamodelo UML2_UMLClassModel EClass::MultiplicityElement.......... 72 Figura 50 Metamodelo UML2_UMLClassModel EClass::Class ......................................... 72 Figura 51 Metamodelo UML2_UMLClassModel EClass::Property................................... 73 Figura 52 Metamodelo UML2_UMLClassModel EClass::Operation ................................ 74 Figura 53 Metamodelo UML2_UMLClassModel EClass::StructuredClassifier ....... 74 Figura 54 Metamodelo UML2_UMLClassModel EClass::BehavioredClassifier ....... 75
xvi
ndice de Tabelas
Tabela 1 Planeamento do projecto ................................................................................................... 2 Tabela 2 Relao entre metamodelos: JModelElement.............................................................. 39 Tabela 3 Relao entre metamodelos: JMember ........................................................................... 41 Tabela 4 Relao entre metamodelos: JPackage ......................................................................... 42 Tabela 5 Relao entre metamodelos: JClass ............................................................................. 44 Tabela 6 Relao entre metamodelos: JField ............................................................................. 46 Tabela 7 Relao entre metamodelos: JMethod ........................................................................... 48 Tabela 8 Relao entre metamodelos: JParameter .................................................................... 49
xvii
xix
Notao e Glossrio
ATL EMF IDE M2M MDA MDD MDE MDT OCL OMG UML XML XMI Atlas Transformation Language Eclipse Modeling Framework Integrated Development Environment Model-To-Model Model-Driven Architecture Model-Driven Development Model-Driven Engineering Model Development Tool Object Constraint Language Object Management Group Unified Modeling Language Extensible Markup Language XML Metadata Interchange
xxi
1 Introduo
1.1 Enquadramento
Este documento tem como finalidade servir como relatrio final do projecto realizado no mbito da unidade curricular Projecto / Estgio da Licenciatura em Engenharia Informtica do Instituto Superior de Engenharia do Porto. O seu objectivo descrever todas as actividades desenvolvidas no decorrer do mesmo, realando o seu desenvolvimento tcnico. O tema deste projecto enquadra-se no campo do Model Driven Development (MDD), tendo como base o Ambiente Integrado de Desenvolvimento (IDE) Eclipse e a sua Framework de Modelao Eclipse Modeling Framework (EMF).
1.2.1 Planeamento de projecto O projecto teve a durao de cinco meses, comeando em Maio de 2009 e terminando em Setembro de 2009. Para o planeamento do projecto foi utilizada a ferramenta Microsoft Office Project.
1.2.2 Reunies de acompanhamento Durante a elaborao do projecto foram realizadas reunies semanais com o orientador no Departamento de Engenharia Informtica do Instituto Superior de Engenharia do Porto. O objectivo das reunies era comunicar o ponto de situao do projecto e apresentar problemas, solues e melhorias.
No segundo captulo apresentado o contexto do projecto e so explicados os conceitos tericos inerentes ao mesmo. No terceiro captulo apresentada a Atlas Transformation Language (ATL). No quarto captulo so apresentadas as relaes entre os metamodelos e explicada a transformao entre eles. No quinto captulo so apresentadas as concluses relativamente ao projecto desenvolvido ao longo de cinco meses. Em anexo esto os metamodelos utilizados para a realizao desta experincia pois eram demasiado grandes para fazerem parte da estrutura principal do relatrio.
2 Contexto
2.1 Model-Driven Engineering
Este projecto consiste em testar experimentalmente a transformao de modelos Java em modelos de classes UML enquadrando-se no contexto da Model-Driven Engineering (MDE). MDE uma metodologia de desenvolvimento de software com foco na criao e uso de modelos para aumento da produtividade, maximizando a compatibilidade entre sistemas.
Os modelos fazem parte de um crescente nmero de processos de engenharia (tal como engenharia de software). Contudo, na maior parte dos casos, so apenas destinados a fazer parte da documentao em vez de serem parte integrante do processo de engenharia. Como oposto a esta abordagem, o campo da MDE considera os modelos como entidades de primeira classe, sendo que tudo pode ser representado atravs de modelos. Na figura seguinte podemos observar uma comparao possvel entre os conceitos do paradigma object-oriented e os do paradigma MDE.
A abordagem Model-Driven fornece um conjunto de operaes dedicadas manipulao de modelos. Neste contexto, o modelo de transformao a operao central para tratamento de modelos. Destina-se a tornar possvel especificar a maneira como produzido um nmero de modelos alvo baseados num conjunto de modelos fonte (por exemplo, como se obtm um modelo de classes em notao UML baseado num modelo de cdigo java). No mbito da MDE, assumido que o modelo de transformao, tal como outra ferramenta baseada em modelos pode ser modelada, o que significa que ela tambm dever ser considerada como modelo. No mbito deste projecto dado foco transformao entre modelos.
Um exemplo de tentativa de concretizao da viso MDE a iniciativa MDA da OMG. A figura seguinte apresenta um exemplo dos componentes principais do MDA.
No campo da Model-Driven Engeneering, o modelo definido de acordo com a semntica de um modelo de modelos, tambm chamado metamodelo. Um modelo que respeite a semntica definida por um metamodelo, diz-se que ele obedece (conforms) a esse metamodelo. A figura seguinte sintetiza a relao entre modelos.
Cada modelo composto por um nmero distinto de elementos e, da mesma maneira que um modelo obedece ao seu metamodelo, existem relaes entre elementos de um modelo e do seu metamodelo. Um metamodelo, antes de o ser, um modelo. Isto implica que tambm ele obedea ao seu metamodelo. Com este fim, a MDA define um terceiro nvel de modelao, correspondente ao metametamodelo, tal como ilustrado na figura anterior. No MDA o papel de metametamodelo da responsabilidade do MOF (ver figura 2). O metametamodelo introduz a semntica que requerida para especificar metamodelos. De notar que um metametamodelo define-se a si mesmo, o que significa que ele especificado atravs das suas prprias semnticas, podendo-se assim dizer que um metametamodelo obedece a si mesmo.
O ATL oferece suporte a dois standards da MDA, a Meta Object Facilities (MOF) do Object Management Group (OMG) e o metametamodelo Ecore do Eclipse Modeling Framework (EMF). Sendo que o Ecore do EMF pode ser considerado como uma implementao com adaptaes do MOF da OMG. Ou seja, o ATL est habilitado a trabalhar com metamodelos que foram especificados de acordo com a semntica do Ecore e do MOF. O EMF ser alvo de apresentao na prxima seco.
No mbito da MDE, a transformao de modelos permite especificar a maneira como transformar modelos fonte (source) em modelos alvo (target), sendo possvel definir a correspondncia dos elementos entre modelos. Formalmente, uma transformao entre modelos define a maneira como criar um modelo Mb, que obedece a um metamodelo MMb, apartir de um modelo Ma, que obedece a um metamodelo MMa. E, no esquecendo que a caracterstica da MDE considerar tudo como sendo modelos, a prpria transformao Mt definida como um modelo e esta obedece a um metamodelo MMt que define a semntica do modelo de transformaes. Todos os metamodelos tambm obedecem ao metametamodelo MMM, que como j referido, define o modelo dos modelos.
A figura 5 apresenta uma viso da possvel realizao da abordagem MDE/MDA quando adoptada globalmente no processo de desenvolvimento/engenharia de software. Em particular, o MDA prope dois grandes tipos de modelos: modelos independentes da plataforma (PIM) e modelos especficos de plataforma (PSM). Essa figura mostra as possveis relaes entre modelos usados em diversas fases do ciclo de desenvolvimento e tambm segundo diferentes perspectivas (i.e., business aspects, technical aspects, etc.). Essas relaes so derivadas das transformaes entre os modelos. Este projecto visa, em particular, estudar a viabilidade de promover o cdigo java a modelo, de forma a poder ser integrado numa abordagem MDE. Estamos portanto no contexto das actividades identificadas na figura pela elipse a vermelho.
Em particular neste projecto, pretende-se at verificar um pouco mais alm do que a figura apresenta, ou seja, verificar se o componente Code pode tambm ele ser um modelo. Neste contexto o projecto aborda a transformao entre o modelo do cdigo java (modelo fonte) e o modelo de classes UML especfico para java (modelo alvo).
Portanto, a inteno deste projecto fazer a transformao ATL (seces 3 e 4) do Code Java, representado atravs do metamodelo JavaModel (seco 2.3), num modelo de classes UML, representado pelo metamodelo UML do UML2 (seco 2.4). A ferramenta que d suporte a estes modelos a EMF (seco 2.2). Na continuao deste projecto ser ainda feita a transformao inversa. Por fim este projecto ser integrado num projecto paralelo que efectua a transformao de modelos Java, que obedecem ao JavaModel, em Modelos Java do Eclipse e vice-versa, identificado pela elipse a tracejado vermelho. Posteriormente sero ambos integrados numa framework open source de suporte ao desenvolvimento baseado em modelos de linhas de produtos de software baseada na metodologia MoDeLine.
10
Uma dessas frameworks denominada Eclipse Modeling Framework (EMF), utilizada neste projecto, que permite a modelao e gerao de cdigo para construo de ferramentas e outras aplicaes baseadas em modelos de dados estruturados. Atravs da framework em questo, possvel criar modelos EMF e gerar os respectivos editores atravs de trs tipos de fontes: Modelo Rational Rose Conjunto de interfaces e classes Java anotadas eXtensible Markup Language (XML) Schema
O resultado dessa criao um modelo Ecore (.ecore), que corresponde ao modelo EMF (mais concretamente, metamodelo) e um modelo gerador
Figura 7 Hierarquia de classes do modelo Ecore (a cinzento esto representadas as classes abstractas)
O modelo gerador pode ser expandido para serem visualizados todos os seus elementos, e cada um destes tem propriedades, a eles associados, que controlam o comportamento do gerador de cdigo. atravs deste modelo que possvel modificar e iniciar facilmente a gerao de diferentes tipos de cdigos: Model Code Edit Code
11
Relativamente ao Model Code, aps a sua gerao, so criadas classes de interface e uma classe enum (se o modelo for importado do Rose), completas (se o modelo foi definido usando classes Java anotadas) e criado um novo par de interfaces para o prprio package e para o factory. Sero ainda criados dois novos packages com os sufixos impl e util que contm implementaes das interfaces e classes teis adicionais e dois tipos de ficheiros manifest para o Plug-in do modelo: plugin.xml e MANIFEST.MF. Em qualquer momento possvel voltar a gerar o cdigo pois as mudanas sero efectuadas no caso de ter havido alguma alterao no cdigo. Pode-se ainda selectivamente gerar subconjuntos do Model Code, tal como um package ou class e gerar o cdigo respectivo.
Quanto ao Edit e Editor Codes, por pr-definio so criados dois plug-ins: o Edit que inclui adaptadores que fornecem uma vista estruturada e comandos para a edio dos objectos do modelo e o Editor que fornece um user interface (UI) para o editor e um wizard.
No que diz respeito ao Test Code, este aps gerado possui esqueletos de teste JUnit para o exerccio de quaisquer funes e operaes definidas no modelo, que normalmente devem ser preenchidos. Contm apenas uma simples classe exemplo que mostra como carregar e validar um modelo de uma aplicao stand-alone.
12
(alvo). O modelo de entrada o nome dado ao modelo que se quer transformar, que no caso em estudo diz respeito ao Modelo Java. um modelo baseado no seu metamodelo JavaModel, utilizado internamente pelo EMF, que apesar da sua documentao e integrao fora do EMF serem limitadas, servem perfeitamente para a nossa experincia.
Visto que para a realizao do trabalho era necessria a criao de um modelo baseado no JavaModel e no era fornecida essa possibilidade, foi necessrio criar um projecto paralelo com o auxlio do EMF para a criao de um novo metamodelo (chamado java2). Este metamodelo exactamente igual ao JavaModel, com a possibilidade de criao de modelos.
13
14
15
desenvolvimento standard, tais como o debugger e syntax highlighting, que permitem um mais simples desenho das transformaes. O ambiente de desenvolvimento ATL oferece facilidades adicionais para o tratamento de modelos pois permite uma ponte entre o texto comum, dedicado especificao de metamodelos, e a sua correspondente representao visual.
17
A linguagem ATL define trs diferentes tipos de unidades. ATL module, ATL Query e ATL Library. Qualquer que seja o seu tipo, so definidos nos seus prprios e distintos ficheiros, caracterizados pela extenso .atl.
18
3.1.1 Header Section A header section define o nome do mdulo de transformao, o nome das variveis correspondentes aos modelos fonte e alvo e codifica o modo de execuo do mdulo.
O nome_do_mdulo , como o prprio nome indica, a denominao do mdulo e deve ser igual ao nome do ficheiro ATL em que se insere. A declarao dos modelos alvo faz-se a seguir da palavra create e a dos modelos fonte a seguir palavra from (no modo normal) ou refining (no caso de uma transformao refinada). Ambos os modelos devem obedecer ao esquema nome_do_modelo :
nome_do_metamodelo. possvel declarar mais do que um modelo de sada ou entrada separando com vrgulas os modelos declarados. Visto que o nome dos modelos declarados ir ser usado para identific-los, cada nome tem de ser nico.
Neste
exemplo
representada
header
section
do
ficheiro
Pai2Pessoal.atl, usada para transformar modelos em que o seu metamodelo o Pai, em modelos cujo metamodelo Pessoa.
3.1.2 Import Section A import section o local onde so declaradas as bibliotecas ATL que tm de ser importadas. possvel declarar diversas bibliotecas distintas, usando o nome da biblioteca pretendida sem a sua respectiva extenso, atravs de sucessivas instrues.
19
uses strings;
Cdigo 2 Exemplo de uma import section
3.1.3 Helpers Os helpers podem ser vistos como o equivalente, no ATL, aos mtodos Java. Possibilitam a definio de cdigo factorizado, combatendo assim a redundncia, e podem ser chamados em diferentes pontos da transformao ATL.
tipo_do_retorno = expresso;
Um helper composto pelo seu tipo_do_contexto, o seu nome e respectivo conjunto de parmetros (se aplicvel), um tipo_do_retorno e a expresso do helper. O contexto introduzido pela palavra context e define o tipo de elementos a que o helper se aplica, ou seja, o tipo de elementos a partir do qual ser possvel chamlo. O contexto pode ser omitido da definio do helper, ficando o helper associado ao contexto global do mdulo ATL, o que significa que, no mbito desse helper, a varivel self uma referncia para o seu mdulo/query. O nome do helper introduzido pela palavra def e seguido pelos parmetros, se existentes, dentro de parnteses. A definio dos parmetros tem de obedecer ao esquema nome_do_parmetro : tipo_do_parmetro e no caso da
20
existncia de vrios parmetros, estes podem ser declarados separados por vrgulas. O nome_do_parmetro deve ser nico dentro de um mesmo helper. Tanto o tipo_de_contexto como o tipo_do_parmetro e o tipo_do retorno devem ser de um tipo de dados suportados pelo ATL. O corpo do helper deve ser especificado como uma expresso Object Constraint Language (OCL), explicada na seco 3.6, sendo um dos tipos de expresses suportadas. Podem existir vrios helpers com o mesmo nome numa nica transformao, contudo devem ter assinaturas distintas para serem distinguveis pelo ATL. Tambm possvel definir atributos. Um attribute helper um tipo especfico de helper que aceita a inexistncia de parmetros e pode ser definido no contexto de um mdulo ATL ou de um elemento do modelo. Um helper sem parmetros e um attribute helper so apenas equivalentes num ponto de vista funcional pois existe uma diferena significativa quando consideradas as semnticas de execuo. Enquanto que o valor de retorno de um helper calculado todas as vezes que ele chamado, o valor de retorno de um attribute helper calculado apenas uma vez, quando o valor requisitado pela primeira vez. Sendo assim, pode-se concluir que declarar um attribute helper mais eficiente. Um attribute helper que definido no contexto de um mdulo ATL inicializado (durante a fase de inicializao) na ordem em que ele declarado no ficheiro ATL. Sendo assim, pode-se concluir que a ordem importante pois isso implica que um attribute helper tenha que ser declarado depois de outro attribute helper do qual ele dependa para a sua inicializao. Caso a ordem no seja a correcta ser desencadeado um erro durante a fase de inicializao da execuo de um programa ATL.
helper def : mdiaInferior(seq : Sequence(Integer), valor : Real) : Boolean = let mdia : Real = seq->sum()/seq->size() in mdia<valor;
Cdigo 3 Exemplo de um helper
21
Este helper, chamado mdiaInferior, definido no contexto de um mdulo ATL (visto que nenhum contexto est explicitamente especificado). O resultado deste helper ser o retorno de um valor booleano. No caso do valor da mdia dos valores contidos no parmetro seq, sequncia (Sequence) de inteiros, for menor comparativamente a um valor real dado (valor) o resultado ser true, caso contrrio ser false. O corpo do helper uma expresso let, que define e inicializa a varivel mdia. Resumindo, a varivel ser comparada com o valor de referncia. 3.1.4 Rules Existem trs tipos diferentes de regras (rules), que correspondem a dois diferentes modos de programao fornecidos pelo ATL. As matched rules correspondem programao declarativa e as lazy rules e called rules que programao imperativa.
As matched rules so o principal constituinte das transformaes declarativas no ATL. Permitem especificar para que tipos de elementos fonte se deve gerar elementos alvo e a maneira como os elementos alvo devem ser inicializados.
22
A regra especifica a maneira como os elementos do modelo alvo devem ser inicializados para cada modelo fonte correspondente. As matched rules so introduzidas pela palavra rule, seguidas pelo nome_da_regra, que as identifica. So obrigatoriamente compostas pelos padres das fontes e dos alvos, e pelas seces opcionais compostas por variveis locais e imperativas. O padro fonte definido depois da palavra-chave from e permite especificar o elemento do modelo fonte, correspondente a determinado metamodelo, que ser transformado. O padro alvo introduzido pela palavra-chave to e permite especificar os elementos (atributos e associaes) que sero gerados quando o padro fonte da regra tem correspondncia e como estes elementos gerados so inicializados. O padro alvo de uma matched rule d origem a elementos distintos para cada elemento do modelo alvo da regra que gerado quando tem correspondncia. Uma associao (ou correspondncia) definida por nome_da_caracteristica expresso. Isto significa que cada regra gerar elementos alvo para cada elemento fonte que esteja de acordo com as correspondncias definidas. Um elemento de um modelo fonte de uma transformao ATL no deve ser correspondente a mais do que uma matched rule nem pode gerar valores primitivos, sendo assim, deve-se ter cuidado para respeitar sempre esta restrio. As seces de variveis locais so introduzidas pela palavra-chave using, permitindo declarar e inicializar localmente estas variveis que sero apenas visveis no mbito da regra em que esto inseridas. As seces opcionais imperativas, introduzidas pela palavra-chave do tornam possvel especificar cdigo imperativo que ser executado depois da inicializao dos elementos alvo gerados pela regra.
rule InformacaoPai2InformacaoPessoa { from s : MMPai!InformacaoPai to t : MMPessoa!InformacaoPessoa ( name <- a.name, surname <- a.surname ) }
Cdigo 4 Exemplo de uma matched rule
23
Esta regra chamada InformacaoPai2InformacaoPessoa, tem como objectivo transformar o modelo fonte InformacaoPai no modelo alvo InformacaoPessoa. Esta regra apenas contem os padres obrigatrios. O modelo alvo no define nenhum filtro, o que significa que todas as classes InformacaoPai do metamodelo MMPai sero correspondidas pela regra. O elemento padro t alocar as classes InformacaoPessoa e estas sero inicializadas com os atributos correspondentes da classe InformacaoPai.
As lazy rules so idnticas s matched rules, mas apenas podem ser aplicadas quando chamadas por outras regras. As called rules facilitam a programao imperativa, e tal como os helpers, tm de ser explicitamente chamadas para serem executadas, podendo aceitar parmetros. Contudo, podem gerar elementos em modelos alvo tal como as matched rules. As called rules tm de ser chamadas atravs de uma seco de cdigo imperativo, quer a partir de uma matched rule ou outra called rule, excepto quando se utiliza o entrypoint (cada transformao ATL apenas pode utilizar um).
24
Tal como as matched rules, estas so introduzidas pela palavra-chave rule e podem incluir as seces opcionais para variveis locais e imperativas. Contudo, visto que no necessita de fazer correspondncia, uma called rule no inclui o padro fonte. E o seu padro alvo, que possibilita a gerao de elementos de modelos alvo, opcional. Visto que no se faz a correspondncia de nenhum elemento de um modelo fonte, a inicializao de elementos de um modelo alvo tem de ser baseada na combinao de variveis locais, parmetros e atributos do mdulo. O padro alvo definido da mesma maneira que o de uma matched rule, introduzido igualmente pela palavrachave to. Uma called rule tem de ser nica numa transformao ATL e no pode ter o mesmo nome que um helper nem chamar-se main.
rule NovaPessoa (nome: String, sobrenome: String) { to t : MMPessoa!Pessoa ( nomep <- nome ) do { t.sobrenomep <- sobrenome } }
Cdigo 5 Exemplo de uma called rule
Esta called rule, chamada NovaPessoa, tem como objective gerar elementos alvo do tipo Pessoa. A regra aceita dois parmetros que correspondem com o nome e o sobrenome do modelo Pessoa que ser criado pela execuo da regra. A regra ao mesmo tempo um padro alvo chamado t e uma seco de cdigo imperativo. Este padro aloca a classe Pessoa sempre que a regra chamada e inicializa o nome do atributo. O cdigo imperativo coloca no sobrenomep o valor do parmetro sobrenome.
3.1.5 Semntica da execuo dos mdulos A execuo, no modo normal, de um mdulo ATL organizada em trs fases sucessivas:
25
Fase de inicializao do modelo. Fase de correspondncia dos elementos do modelo fonte (source). Fase de inicializao dos elementos do modelo alvo (target).
A primeira fase de execuo corresponde fase de inicializao do modelo, onde os atributos definidos no contexto do mdulo de transformao so inicializados. Se houver o uso de atributos definidos no contexto de elementos de modelos fonte, esses atributos tambm sero inicializados. Se for definida alguma called rule no mbito desse mdulo, o cdigo dessa regra, incluindo a gerao de elementos do modelo alvo, sero executados depois da inicializao dos atributos do mdulo ATL.
Durante a fase de correspondncia dos elementos fonte, as condies de correspondncia das matched rules declaradas, so testadas com os elementos dos modelos fonte do mdulo. Quando a correspondncia eficaz, a mquina ATL aloca um conjunto de elementos do modelo alvo que correspondem aos elementos do padro alvo declaradas na regra.
A ltima fase corresponde inicializao dos elementos gerados durante a fase anterior. Neste ponto, cada elemento do modelo alvo alocado inicializado pela execuo do cdigo das ligaes que esto associadas ao elemento padro alvo. A seco de cdigo imperativo que pode ser especificado no mbito de uma matched rule, executado uma vez que o passo de inicializao da regra esteja completo. Este cdigo imperativo pode provocar a execuo de algumas called rules que foram definidas no mbito do mdulo ATL. A execuo de um modo refining significa que no ocorrem cpias e as alteraes so directamente aplicadas no modelo fonte.
26
(codificados em strings) a partir de um conjunto de modelos fonte. Contudo estas queries no so limitadas computao de Strings e podem ser retornadas como valores numricos ou booleanos.
3.2.1 Estrutura de uma ATL Query Depois de uma seco para imports, deve ser definida uma instncia para queries. Esta instncia introduzida pela palavra-chave query e especifica a maneira como um resultado deve ser computado.
Esta query executada no modelo MMPessoa contendo o nmero de entidades Pessoa. A query primeiramente selecciona o conjunto de todas as classes Pessoa no modelo e v o tamanho do conjunto. Tendo em conta que se pretende gravar este valor num ficheiro, o valor resultante da operao size() (inteiro) ser convertido para string (operao toString()) e posteriormente escrito no ficheiro resultado.txt
3.2.2 Semntica da execuo da Query Tal como um mdulo ATL, a execuo de uma query organizada em sucessivas fases. A primeira a fase de inicializao que corresponde fase de inicializao dos mdulos ATL e dedicada inicializao dos atributos que so definidos no contexto do mdulo ATL.
27
A segunda fase a fase computacional em que o valor de retorno da query calculado pela execuo do cdigo declarativo de um elemento query de uma query ATL. Os helpers que foram definidos juntamente com a query podem ser chamados em ambas as fases.
conjuntos de helpers que podem ser chamados de diferentes unidades ATL. Tal como os outros tipos de unidades, uma ATL library pode incluir uma import section opcional e ainda permitir definir diversos helpers que estaro disponveis numa unidade ATL a importar. Comparativamente a um mdulo ATL, no existem elementos de modelos default, sendo assim impossvel declarar helpers que esto definidos no contexto default de um mdulo, o que significa que todos os helpers definidos numa biblioteca ATL devem ser explicitamente associados a um contexto. Uma library no pode ser executada independentemente, sendo que no est associada a nenhuma inicializao de um tempo de execuo, impossibilitando ainda definir attribute helpers.
28
as instncias definidas pelo OCL (com excepo dos tipos de dados Map e ATL module) e executadas pelo ATL.
O elemento raiz da estrutura das instncias OclType do tipo abstracto OclAny a partir do qual todos os outros tipos esto directamente ou indirectamente relacionados. A ATL considera os seguintes tipos de dados principais: Primitive Collection EnumLiteral Tuple Map OclModelElement ATL module
29
O tipo de dados primitive corresponde ao tipo de dados bsico da linguagem (String, boolean e numerical). O conjunto de tipos collection introduzido pelo OCL permite diversas formas de tratamento de coleces de elementos. Tipos de dados adicionais que incluem os enumerations, tuple, map e model element. Este ltimo corresponde ao tipo de entidades que podem ser declaradas com os modelos tratados pelo motor ATL. Por fim, o tipo de dados ATL module, especfica da linguagem ATL e associada com as unidades ATL: modules e queries.
A expresso if fornece uma facilidade de expresso alternativa. expressada com uma estrutura if-then-else-endif, de acordo com a seguinte sintaxe:
30
De acordo com a avaliao da expresso booleana, a expresso if retorna o valor correspondente expresso1, no caso de a condio ser avaliada como verdadeira, ou o valor da expresso2, no caso de a expresso ser avaliada como falsa. Uma expresso deste tipo pode ser composta por outras expresses OCL, incluindo expresses let e if.
A expresso let permite definir e inicializar novas variveis. definida de acordo com a seguinte sintaxe:
let nome_da_varivel : tipo_da_varivel = expresso_inicializao_var in expresso
A expresso de inicializao da varivel, expresso_inicializao_var, pode ser de qualquer tipo de expresso OCL, inclusive expresses let.
31
Esta transformao chamada java2uml permite criar o modelo uml, que obedece ao seu metamodelo UML2_UMLClassModel a partir do modelo java que obedece ao seu metamodelo EMF_JavaModel. A transformao em questo obedece ao ATL. Os trs metamodelos (EMF_JavaModel, ATL e UML2_UMLClassModel) obedecem semntica do seu metametamodelo Ecore.
33
Para cada projecto, o Eclipse cria uma pasta do projecto na vista Navigator. O projecto gerado recentemente pode ser aberto nessa vista e inicialmente ser
34
encontrado no seu interior o ficheiro (.project) que contm metadata Eclipse relativa ao projecto.
<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>java2uml</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>org.eclipse.m2m.atl.adt.builder.atlBuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.m2m.atl.adt.builder.atlNature</nature> </natures> </projectDescription>
Cdigo 8 Exemplo do ficheiro .project
O passo seguinte consiste na criao do ficheiro de transformao ATL. Pode ser criado atravs da vista Navigator, escolhendo: New > ATL File Esta operao desencadeia o aparecimento da janela para criar um ficheiro ATL. O nome dado ao ficheiro (.atl) ser o mesmo que o do projecto java2uml.
35
Aps a criao do ficheiro ATL, pretende-se utilizar esse ficheiro para criar um mdulo ATL onde sero escritas todas as transformaes. O seguinte cdigo fonte ATL representa o header do ficheiro java2uml.atl, ou seja, o cabealho da transformao do modelo java que obedece ao seu metamodelo EMF_JavaModel para o modelo uml que obedece ao seu metamodelo UML2_UMLClassModel:
Visto que para o processo de transformao em questo so necessrios dois modelos, foram criados os dois ficheiros a eles correspondentes. O ficheiro java.java2, contendo elementos a ttulo exemplificativo, com todo o tipo de elementos possveis de serem criados num ficheiro deste gnero, e o ficheiro uml.uml sem nenhum
36
contedo, pois ser nele que sero criados novos elementos aps a transformao ATL.
37
De seguida deve-se seleccionar ATL Transformation e carregar em New, sendo criado um novo ficheiro de configurao ATL. Neste ficheiro necessrio especificar o caminho (/java2uml/java2uml.atl), do mdulo ATL, que poder ser encontrado no workspace. ainda necessrio dizer qual o caminho para os metamodelos EMF_JavaModel e
UML2_UMLClassModel, que podem ser encontrados carregando no boto EMF Regestry, onde so mostrados todos os packages registados no EMF. Deve ainda ser escolhido o tipo de manipulador de modelos (Model handler) respectivo a cada metamodelo. No caso do EMF_JavaModel deve-se escolher o EMF, e no caso do UML2_UMLClassModel deve-se escolher o UML2. Por fim especifica-se ainda quais os caminhos para os modelos fonte e alvo, tambm eles encontrados no workspace. extremamente importante que esteja tudo bem configurado, caso contrrio, mesmo ocorrendo a transformao, esta no ser perfeita.
38
4.3.1 JModelElement (abstracta) / Element (abstracta) A classe JModelElement, classe abstracta, o elemento base do
EMF_JavaModel, sendo que todos os restantes elementos do metamodelo ao qual pertence so suas subclasses. O seu equivalente no UML2_UMLClassModel a classe Element, cujas caractersticas so semelhantes. Relativamente aos atributos do JModelElement: Atributo name, nome de um elemento, corresponde a um atributo com o mesmo nome, pertencente classe NamedElement, que suporta expresses no tipo de dados string.
UML2_UMLClassModel
EClass:Element EAttribute::name:EString (NamedElement)
39
4.3.2 JCompilationUnit A classe JCompilationUnit representa toda a unidade de compilao Java. Esta classe no pode ser representada no metamodelo UML2_UMLClassModel. Visto que no existe correspondncia directa no metamodelo
UML2_UMLClassModel, sugere-se vrias alternativas. Estas no foram abordadas no contexto deste trabalho pois como est inserido num projecto maior ainda nada foi decidido. As possveis alternativas seriam: Para um elemento JCompilationUnit, embora no seja representado explicitamente no UML2, poderia implicitamente dizer-se que este existe para todas as classes do modelo UML que no esto definidas no contexto de outra classe (isto , no so inner classes). Usar mecanismos de extenso dos modelos UML, como por exemplo esteretipos (stereotypes) para acrescentar informao que o modelo no suporta. Alterar o metamodelo UML2_UMLClassModel para incluir este conceito.
4.3.3 JMember (abstracta) A classe JMember tambm uma classe abstracta, subclasse directa de JModelElement e superclasse directa das classes: JClass JField JInitializer JMethod
No existe nenhuma classe abstracta no UML2_UMLClassModel cujo objectivo seja o mesmo que esta. No entanto possvel relacionar os seus atributos: Atributo static, varivel booleana, com o isStatic, do mesmo tipo, que pertence classe Feature.
40
Atributo visibility, varivel booleana, com uma varivel com o mesmo nome mas cujo tipo VisibilityKind, da classe NamedElement.
Visto que no existe equivalncia para a classe JMember, automaticamente no faria sentido existir uma referncia equivalente referncia containingType. Estas relaes esto esquematizadas na tabela 2.
UML2_UMLClassModel
-
4.3.4 JPackage / Package A Classe JPackage do JavaModel tem uma classe equivalente no
UML2_UMLClassModel chamada Package, no entanto, relativamente s suas superclasses, enquanto que o JPackage apenas tem o JModelElement, o seu correspondente tem as superclasses: Element NamedElement PackageableElement ParameterableElement TemplateableElement
41
Relativamente aos atributos: Referncia types, referncia para JClasses de um JPackage, equivalente ao packagedElement que especifica os packageable elements (JClasses) que pertencem a esse Package.
UML2_UMLClassModel
EClass::Package EGeneric Super Types::Element; NamedElement; Namespace; ParameterableElement; PackageableElement; TemplateableElement
EAttribute::name:EString EReference::types:JClass
4.3.5 JClass / Class A classe JClass do JavaModel pode ser transformada numa Class e tem como superclasses: JMember
JModelElement Enquanto que a Class tem como superclasses: BeavioredClassifier Classifier Element EncapsulatedClassifier NamedElement Namespace PackageableElement ParameterableElement
42
RedefinableElement StructuredClassifier TemplateableElement Type Atributos e referncias da classe JClass com correspondentes no metamodelo UML2_UMLClassModel: Atributo abstract, booleano, corresponde ao atributo isAbstract, booleano, da classe Classifier. Atributo final, booleano, corresponde ao atributo isLeaf, booleano, da classe RedefinableElement. Referncia fields, que referencia todos os elementos do tipo JField de uma JClass, corresponde referncia ownedAttribute da classe StructuredClassifier, que referencia todos os elementos do tipo Property (elemento equivalente a JField no metamodelo
UML2_UMLClassModel). Referncia methods, que referencia todos os elementos do tipo JMethod de uma JClass, corresponde referncia ownedOperation da classe Class, que referencia todos os elementos do tipo Operation (elemento equivalente a JMethod no metamodelo UML2_UMLClassModel). Referncia superTypes, que referencia todas as superclasses de uma dada classe, corresponde referncia superClass da classe Class. Referncia package, que referencia todos o JPackage ao qual uma dada JClass pertence (se aplicvel), corresponde a uma referncia com o mesmo nome, da classe Type. Referncia types, que referencia todos os elementos JClass que fazem parte de uma dada JClass, corresponde referncia nestedClassifier da classe Class.
43
Os restantes atributos e referncias no tm qualquer relao com outros no metamodelo UML2_UMLClassModel. Todas estas relaes enunciadas esto esquematizadas na tabela 4.
Tabela 5 Relao entre metamodelos: JClass EMF_JavaModel
EClass::JClass EGeneric Super Type::JMember;
UML2_UMLClassModel
EClass::Class EGeneric Super Types::EncapsulatedClassifier; BeavioredClassifier; StructuredClassifier; Classifier; Type; packageableElement; RedefinableElement; Namespace; TemplateableElement; Element; ParameterableElement; NamedElement;
EAttribute::comment:EString EAttribute::abstract:Eboolean
EAttribute::final:EBoolean
EAttribute::isLeaf:Boolean (RedefinableElement)
EReference::ownedAttribute:Property (StructuredClassifier)
EReference::methods:JMethod EReference::superTypes:JClass EReference::allSuperTypes:JClass EReference::members:JMember EReference::componentType:JClass EReference::arrayType:JClass EReference::unit:JCompilationUnit EReference::allMethods:JMethod EReference::allFields:JField EReference::package:JPackage
44
EReference::types:JClass EReference::allTypes:JClass
EReference::nestedClassifier:Classifier -
4.3.6 JField / Property A classe JField pode ser transformada numa Property e tem como superclasses: JMember
JModelElement As superclasses da Property so: ConnectableElement DeploymentTarget Element Feature MultiplicityElement NamedElement ParameterableElement RedefinableElement StructuralFeature TemplateableElement TypedElement Atributos e referncias da classe JField com correspondentes no metamodelo UML2_UMLClassModel: Atributo final, tipo booleano, corresponde ao atributo isLeaf, tambm booleano, da classe RedifinableElement. Atributo volatile, do tipo booleano, corresponde ao atributo
UML2_UMLClassModel
EClass::Property EGeneric Super Types::ConnectableElement; DeploymentTarget; Element; Feature; MultiplicityElement; NamedElement; ParameterableElement; StructuralFeature; TemplateableElement; TypedElement
EAttribute::name:EString
EAttribute::name:EString (NamedElement)
EAttribute::static:Eboolean
EAttribute::isStatic:Boolean (Feature)
EAttribute::visibility:JVisibility
EAttribute::visibility:VisibilityKind (NamedElement)
EAttribute::comment:EString EAttribute::final:EBoolean
EAttribute::transient:EBoolean EAttribute::volatile:EBoolean
EAttribute::isReadOnly:Boolean (StructuralFeature)
EAttribute::initializer:EString EReference::type:JClass
4.3.8 JMethod / Operation A Classe JMethod corresponde classe Operation no UML2_UMLClassModel e tem como superclasses: JMember JModelElement
46
Atributos e referncias da classe JMethod com correspondentes no metamodelo UML2_UMLClassModel: Atributo abstract, do tipo booleano, corresponde ao atributo
isAbstract, tambm booleano, da classe Classifier. Atributo final, tipo booleano, corresponde ao atributo isLeaf, tambm booleano, da classe RedifinableElement. Atributo synchronized, do tipo booleano, corresponde ao atributo concurrency, do tipo CallConcurrencyKind, pertencente classe BehavioralFeature. Referncia ownedParameter, do tipo Parameter, que referencia todos os elementos do tipo Parameter que pertencem Operation.
47
UML2_UMLClassModel
EClass::Operation EGeneric Super Types::BehavioralFeature; Element; Feature; NamedElement; Namespace; ParameterableElement; RedefinableElement; TemplateableElement;
EAttribute::native:EBoolean EAttribute::synchronized:EBoolean
EAttribute::concurrency:CallConcurrencyKind (BehavioralFeature)
EReference::exceptions:JClass EReference::returnType:JClass
4.3.9 JParameter A classe JParameter no EMF_JavaModel corresponde classe Parameter do UML2_UMLClassModel e apenas tem uma superclasse designada por
JModelElement. No entanto, a classe Parameter tem as superclasses: ConnectableElement Element ParameterableElement MultiplicityElement
48
NamedElement TypedElement
A nica referncia com equivalncia a method, do tipo JMethod, que referencia qual o JMethod ao qual o JParameter pertence. Esta corresponde referencia operation, do tipo Operation, da classe Parameter.
UML2_UMLClassModel
EClass::Parameter EGeneric Super Types::ConnectableElement; Element; ParameterableElement; MultiplicityElement; NamedElement; TypedElement
EAttribute::name:EString
EAttribute::name:EString (NamedElement)
EReference::operation:Operation -
49
rule JPackage2Package{ from s: EMF_JavaModel!JPackage to t: UML2_UMLClassModel!Package ( --Attributes-name <- s.name, --String --Associations-packagedElement <- s.types --PackageableElement --Class ) }
Esta regra, chamada JPackage2Package, representa a transformao dos elementos do modelo fonte JPackage (metamodelo EMF_JavaModel) para os elementos do modelo alvo Package (metamodelo UML2_UMLClassModel). Esta regra apenas contm os padres fonte e alvo, obrigatrios. O padro fonte no tem nenhum filtro definido, significa ento que todas as classes JPackage do metamodelo EMF_JavaModel sero correspondidas de acordo a regra. O padro alvo contm um nico elemento padro, chamado t, que criar classes Package para cada elemento correspondente JPackage. Os atributos dos elementos gerados so inicializados com os correspondentes atributos dos elementos do modelo fonte. Para as restantes transformaes foram tambm usadas matched rules, sendo que o funcionamento descrito idntico para todas elas.
O cdigo ATL relativo transformao do elemento JClass para Class representado atravs da seguinte matched rule:
50
rule JClass2Class{ from s: EMF_JavaModel!JClass to t: UML2_UMLClassModel!Class ( --Attributes-isAbstract <- s.abstract, --Boolean isLeaf <- s.final, --Boolean name <- s.name, --String visibility <- s.visibility, --VisibilityKind --Associations-nestedClassifier <- s.members, --Classifier --(JClass) ownedAttribute <- s.members, --Property --(JField) ownedOperation <- s.members, --Operation --(JMethod) ownedComment <- t2 --Comment ), t2: UML2_UMLClassModel!Comment ( --Attributes-body <- s.comment --String ) }
Cdigo 11 Matched rule JClass2Class
O cdigo ATL relativo transformao do elemento JField para Property representado atravs da seguinte matched rule:
rule JField2Property{ from s: EMF_JavaModel!JField to t: UML2_UMLClassModel!Property ( --Attributes-name <- s.name, --String isLeaf <- s.final, --Boolean visibility <- s.visibility, --VisibilityKind isStatic <- s.static, --Boolean isReadOnly <- s.volatile.alterar(), --Boolean --Associations-ownedComment <- t2 --Comment ), t2: UML2_UMLClassModel!Comment ( body <- s.comment --String ) }
Cdigo 12 Matched rule JField2Property
51
Nesta regra utilizado um helper simples chamado alterar. Quando chamado, no caso da varivel do tipo booleana ser true alterada para false e vice versa. Esse helper apresentado atravs do cdigo seguinte:
helper context Boolean def: alterar() : Boolean = if self= true then false else true endif;
Cdigo 13 Helper alterar()
O cdigo ATL relativo transformao do elemento JMethod para Operation representado atravs da seguinte matched rule:
rule JMethod2Operation{ from s: EMF_JavaModel!JMethod to t: UML2_UMLClassModel!Operation ( --Attributes-name <- s.name, --String isAbstract <- s.abstract, --Boolean isStatic <- s.static, --Boolean isLeaf <- s.final, --Boolean visibility <- s.visibility, --VisibilityKind --concurrency <- if s.synchronized ='True' then 'Sequencial' else 'Concurrent' endif, --Associations-ownedParameter <- s.parameters, --Parameter ownedComment <- t2 --Comment ), t2: UML2_UMLClassModel!Comment ( --Attributes-body <- s.comment --String ) }
Cdigo 14 Matched rule JMethod2Operation
O cdigo ATL relativo transformao do elemento JParameter para Parameter representado atravs da seguinte matched rule:
52
53
Neste momento pode ser feita qualquer alterao ao modelo java, seguida da execuo das configuraes, sendo automaticamente gerado um novo modelo uml relativo nova transformao.
54
5 Concluses
5.1 Objectivos realizados
O objectivo proposto de desenvolver suporte experimental para que modelos java pudessem ser manipulados e transformados em modelos de classes UML foi atingido. Numa primeira fase foi necessrio estudar e compreender a framework EMF do Eclipse, e os metamodelos relativos aos modelos Java e aos modelos de classes UML. Neste ponto foi encontrada uma grande dificuldade relativa compreenso do metamodelo do Java, o JavaModel, presente no EMF, pois no existe documentao a ele relativa. Em seguida passou-se ao estabelecimento de relaes entre os metamodelos, que apesar de no ter sido concludo deveu-se apenas incompatibilidade entre determinados elementos dos metamodelos. Por fim, estudou-se a linguagem de transformao ATL e passou-se construo das transformaes que permitiram atingir o objectivo principal, em que qualquer que fosse o modelo Java criado pudesse ser transformado com sucesso num modelo de classes UML.
55
Num trabalho futuro pretende-se que seja desenvolvido o processo inverso a este projecto, suporte para a manipulao de Modelos de Classes UML e transformao em Modelos Java. Ambas as transformaes sero integradas numa framework open source de suporte ao desenvolvimento baseado em modelos de linhas de produtos de software baseada na metodologia MoDeLine.
56
Bibliografia
Atlas Transformation Language (ATL): (2006) ATL: Atlas Transformation Language, ATL User Manual, version 0.7, Lina & Inria(Atlas Group), University of Nantes, France, Fev. http://www.eclipse.org/m2m/atl/ http://wiki.eclipse.org/index.php/ATL
Eclipse Modeling Framework (EMF): Steinberg, D., Budinsky, F., Merks, E., Ellersick, R., Grose, T.J. (2003) Eclipse Modeling Framework: A Developer's Guide, Addison Wesley Professional. Tibrea, E. (2006), Enriching EMF models with behavioral specifications, Hamburg University of Science and Technology, Software Systems Institute (STS), Hamburg, German. http://www.eclipse.org/modeling/emf/ http://wiki.eclipse.org/EMF
57
Model-Driven Engineering (MDE): Schmidt, D.C. (2006) Model-Driven Engineering, IEEE Computer Society, Vanderbilt University. Jzquel, J. (2006), Introduction to Model-Driven Engineering, Univ. Rennes 1 & INRIA, Triskell Team, IRISA, France. Bzivin, J. (2004), In Search of a Basic Principle for Model Driven Engineering, The European Journal for the Informatics Professional, Vol. V, No. 2, pp.21-24. Model Development Tools (MDT): http://www.eclipse.org/modeling/mdt/ http://wiki.eclipse.org/MDT
Unified Modeling Language (UML): (2009) OMG Unified Modeling Language (OMG UML), Infrastructure, Version 2.2, formal/2009-02-04, Object Management Group, Fev
(http://www.omg.org/spec/UML/2.2/Infrastructure/PDF/). (2009) OMG Unified Modeling Language (OMG UML), Superstructure, Version 2.2, formal/2009-02-02,
Object Management Group, Fev
58
59
Anexo 1
Metamodelo EMF_JavaModel
Pedro Dias
61
62
63
Anexo 2
Metamodelo
UML2_UMLClassModel
Pedro Dias
64
65
66
67
68
69
70
71
72
73
74
75