O EMF – Eclipse Modeling Framework
Pasteur Ottoni de Miranda Junior
O EMF –Eclipse Modeling Framework -é um framework e uma ferramenta para
geração de código Java baseada em um modelo estruturado. É uma alterntiva ao MOF.
O código pode ser gerado a partir de um documento XMI ou um modelo mdl (Rose),
interfaces Java Anotado e ainda esquemas XML. Uma vez criado o modelo, o gerador
EMF gera um conjunto de classes de implementação, que podem ser modificadas e
editadas. Possui suporte a persistência via XMI .
É constituído por dois frameworks fundamentais: O core framework, suporte para
criação de classes de implementação e o framework EMF.edit, suporte para edição do
modelo.
A Figura 1 abaixo exibe a estrutura básica do EMF, denominada ECore e constitui o
core framework do mesmo. Repare na semelhança com o MOF, pela existência de
estruturas para representação de classes (EClass), atributos (EAtributte), operações
(EOperation), pacotes (EPackage), objetos (EObject) dentre outras.
Figura 1 – Estrutura básica do EMF (ECore)
Representação de estruturas no EMF
Na Figura 2 temos um exemplo de classe denominada Book, contendo dois atributos,
title e pages.
2
Figura 2- Classe Book e seus atributos
Essa classe e sua representação em XMI, Java anotado e esquema XML são exibidos
nas Figuras 3, 4 e 5.
Figura 3 – Representação da classe Book em XMI
Figura 4 – Representação da classe Book em Java anotado
3
Figura 5 – Representação da classe Book em XMI
O código Java gerado a partir do modelo
Para cada classe no modelo, uma interface Java e a classe de implementação respectiva
são geradas. Essa interface contém métodos para armazenar (métodos setter como
setTitle() no exemplo) e recuperar (métodos getter como getTitle() no exemplo) dados:
Figura 6 – Interface Book gerada
Repare que a interface Book estende a classe EObjetc do EMF.
Também é gerada a implementação da interface Book, como mostrado abaixo. Repare
que os métodos getters e setters são implementados.
Figura 7 – Implementação da classe Book
4
Repare acima, na implementação dos getters e setters. No setter, método eNotify()
envia notificações a observadores que possam estar monitorando (listening) o
objeto. Quando não há, eNotificationRequired() retorna false.
Código gerado para estruturas no EMF
Referências unidirecionais
Na Figura 8 vemos a classe Book e uma associação unidirecional com seu Writer
(autor). Repare que são criados os métodos setAuthor(Writer value) e getWriter() que
respectivamente armazenam e recuperam um objeto do tipo Writer.
Figura 8 – Classe Book e uma associação unidirecional com a classe Writer
Relacionamento um para muitos
Na Figura 9, vemos que o EMF gera objetos EList (lista de objetos Book) para
representação de relacionamentos um para muitos. Repare no código for (iterator... que
percorre essa lista de objetos.
5
Figura 9 – Representação de relacionamento um para muitos
Agregações
Como em relacionamentos um para muitos, agregações são implementadas como listas
(EList).
Figura 10- Implementação de agregações como Elist
Enumerações
Na Figura 11 abaixo, exibe-se a implementação de enumerações. A classe
BookCategory implementa como enumeration algumas categorias de livros, que são
atributos dela. Veja na implementação em Java gerada pelo EPF, essas categorias
implementadas como atributos. Na classe Book, são gerados os métodos getCategory()
e setCategory() que retornam e atribuem categorias de livros.
6
Figura 11- Implementação de enumerações
Factories
O EPF utiliza o padrão de projeto Factory Method para criar objetos. Veja na Figura 12
a classe LibraryFactory, que contém os factory methods createBook(), createLibrary()
e createWriter().
7
Figura 12 – Factory methods para criação de objetos
Herança
A Figura 13 exibe a implementação gerada pelo EPF, da estrutura de herança.
Figura 13-Implementação da herança
Modificação do código gerado
A tag \@generated indica porções do código que foram geradas pelo EPF. Se removida,
como na Figura 14, o código inserido abaixo será mantido.
8
Figura 14 – Como modificar código gerado
Criar e acessar instâncias
Na Figura 14 abaixo, podemos ver no código gerado pelo EPF a criação da instância da
fábrica de objetos (objeto Factory) e a criação dos objetos book e writer por meio dos
respectivos factory methods (createBook() e createWriter()).
9
Figura 15- Criação de instâncias
Persistir instâncias
O código exibido na Figura 16 mostra o código gerado pelo EPF para armazenamento
persistente de instâncias. Essas instâncias são armazenadas em arquivos XMI, no
exemplo, mylibray.xmi (Figura 17).
Figura 16-Armazenamento persistente de objetos em arquivo XMI
10
Figura 17- Arquivo XMI gerado para armazenamento de instâncias
Carregar instâncias armazenadas em arquivo XMI
A Figura 18 mostra como instâncias são recuperadas a partir de arquivos XMI (no
exemplo, o arquivo mylbrary.xmi).
Figura 18- Recuperando instâncias salvas em arquivo XMI
Referência
http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.emf.doc/references/overvi
ew/EMF.html
11
Download

O EMF – Eclipse Modeling Framework Pasteur Ottoni de Miranda