1
Inserindo o GeoProfile na Enterprise Architect.
Autores: Thiago Bicalho Ferreira e Sergio Murilo Stempliuc.
Sumário
1. Enterprise Architect .................................................................................................. 01
2. Preparando o Ambiente Enterprise Architect .......................................................... 02
3. Criando o Perfil GeoProfile ...................................................................................... 08
4. Adicionando restrições OCL .................................................................................... 15
5. Aplicando o Perfil GeoProfile................................................................................... 20
6. Importação e Exportação de arquivos XMI .............................................................. 29
1. Enterprise Architect
O Enterprise Architect (EA) é uma ferramenta CASE comercial que permite criar diagramas
e perfis UML; licenciada pela Sparx Systems é uma ótima alternativa para a especificação
de perfis; além de permitir a criação de perfis UML de forma visual oferece recursos como
suporte a OCL para definição de constraints e importação e exportação em XMI (XML
Metadata Interchange). Apesar de não permitir a inclusão e exclusão de estereótipos
gráficos, para melhor visualização e entendimento do diagrama, a vantagem desta
ferramenta é a possibilidade de transformações entre os diagramas da arquitetura MDA.
Este tutorial foi feito a versão 9.0 em Inglês.
Ambiente de trabalho da ferramenta Enterprise Architect
2
2. Preparando o ambiente da ferramenta Enterprise Architect
Antes de iniciar o processo de criação do perfil GeoProfile, deve-se preparar o ambiente da
ferramenta Enterprise Architect (EA). Para isso siga os passos listados nesta seção.
Ao clicar no ícone da EA, a primeira janela que aparecerá é a Select Version, onde será
selecionada a versão Ultimate por ser a mais completa.
Para criar um perfil nesta ferramenta primeiro deve-se criar um novo projeto, clicando em
FileNew Project...
3
Nomeie o novo projeto “GeoProfile” e salve em uma pasta de sua preferência. Depois de
salvo, a janela Model Wizard será exibida bastando confirmar clicando no botão OK.
4
No canto direito da próxima tela há uma aba com nome Project Browser, e no canto
esquerdo há um menu com nome ToolBox contendo a aba More Tools.
Caso o ambiente não esteja conFigurado dessa maneira, deve-se clicar em ViewProject
Browser e View Diagram Toolbox.
A seguir deve-se criar uma View, clicando-se na aba Project Browser e selecionar com o
botão direito do mouse no Model a opção AddAdd View.
5
Nomear então a View como Profile e escolher a opção Simple.
Uma nova View de nome Profile aparecerá então na aba Project Browser. Clicando com o
botão direito do mouse nesta View pode ser adicionado um diagrama.
Para isso vá em AddAdd Diagram.
Na tela New Diagram escolha a opção Class e clique em ok.
6
Desta forma foi disponibilizada uma área livre onde poderá ser criado o perfil GeoProfile.
Na aba More Tools escolha, dentre as diversas tecnologias, a opção Profile. Com esta opção
selecionada passará a ser exibida na aba ToolBox o conjunto de elementos necessários para
criação do perfil GeoProfile.
Neste conjunto de elementos pode ser encontrado um pacote chamado Profile que pode ser
arrastado para área de diagramação. Renomear a nova janela New Model Package para
GeoProfile.
7
Logo em seguida aparecerá uma janela de New Diagram, onde a escolha do tipo de
diagrama será Class.
Clicando duas vezes no pacote GeoProfile na area de diagramação ou então na aba Project
Browser selecionar o diagrama Geoprofile. Será então aberta uma área de diagramação
para o desenvolvimento do Perfil GeoProfile.
8
Com este ambiente preparado deve-se agora criar o Perfil GeoProfile.
3. Criando o Perfil GeoProfile
Primeiro serão criados os estereótipos do GeoProfile, começando com os estereótipos para
objetos de rede (NetworkObj, Arc, Node, UnidirectionalArc e BidirectionalArc).
Adicione os estereótipos clicando em Stereotype e arrastando para tela de diagramação.
Como ilustrado na Figura a seguir.
Observe que os estereótipos NetworkObj e Arc são abstratos. Para colocar um Estereótipo
como abstrato basta clicar com o botão direito do mouse sobre o elemento desejado e ir em
Properties. Na janela que abrir clicar na aba Details onde o elemento selecionado pode ser
classificado como Abstract.
9
Logo em seguida será utilizado o elemento de Generalização (Generalize) arrastando e
soltando nos elementos que deverão ser ligados, a fim de deixar o perfil como mostrado a
seguir.
10
O próximo passo é estender a metaclasse Class da UML utilizando os estereótipos
criados. Para isso adicione o elemento Metaclass na área de diagramação. Na janela que
aparecer selecione a metaclasse Class, adicione ao projeto e dê Ok.
A metaclasse Class irá aparecer no diagrama e será estendida através do elemento
Extension utilizando o estereótipo criado anteriormente.
11
A metaclasse Association será estendida através da criação dos estereótipos para
relacionamentos topológicos entre as classes geográficas. Existem seis tipos diferentes de
relacionamentos topológicos no GeoProfile, sendo: Cross, In, Disjoint, Overlap, Touch e
Temporal. Como exemplo será usado o estereótipo Temporal.
Inicialmente crie um elemento Estereótipo e dê a ele o nome “Temporal”. Agora inclua
um elemento metaclasse, mas desta vez selecione a metaclasse Association e então utilize o
elemento Extension para estender a metaclasse Association com o estereótipo criado, como
mostra a Figura a seguir.
Um estereótipo pode possuir propriedades, as quais podem ser referidas como tag
definitions. Quando um estereótipo é aplicado em um elemento do diagrama, os valores das
propriedades, referidas no perfil como tagged values, podem ser manipuladas no diagrama.
O próximo passo é criar o estereótipo TemporalObject, que se refere a objetos geográficos
com aspectos temporais, e suas enumerações (tagged values). O GeoProfile define dois
tipos de enumeração, TemporalPrimitive e TemporalType. Inclua no esquema dois
elementos do tipo Enumeração e nomeie-os como TemporalPrimitive e TemporalType.
12
Adicione os Literais de Enumeração (instant e interval) em TemporalPrimitive e
(valid_time, transaction_time e bitemporal) em TemporalType. Para adicionar um literal
clique com o botão direito do mouse sobre a enumeração pretendida e selecione attributes.
Na janela que de atributos adicione um nome para o novo literal, não esquecendo de marcar
a opção is literal.
Após a inserção dos literais espera-se que as enumerações fiquem como na imagem a seguir.
13
Agora, adicione ao perfil o estereótipo TemporalObj e inclua dois atributos com tipos das
enumerações criadas anteriormente: temporalPrimitive do tipo TemporalPrimitive e
temporalType do tipo TemporalType.
Para adicionar os atributos e seus tipos, basta clicar com o botão direito do mouse em cima
do estereótipo TemporalObj a fim de encontrar a opção attributes. Na janela que abrir
adicione o nome desejado e clique no botão com reticências para encontrar as enumerações
definidas anteriormente.
14
A Figura a seguir ilustra a janela aberta ao clicar nas reticências que aparecem em frente ao
Type. Podem então ser escolhidas as enumerações criadas no perfil.
Deve-se então estender a metaclasse Class novamente para o estereótipo criado. Inclua mais
um elemento Extension do estereótipo TemporalObj para a metaclasse Class.
Com isso já é possível criar o diagrama com as especificações e estereótipos do perfil
GeoProfile; inclua os demais Estereótipos Generalizações e Extensões que faltam de
forma a deixar o modelo como se segue, lembrando que o estereótipo Network também é
abstrato.
15
4. Adicionando Restrições OCL
A ferramenta Enterprise Architect oferece suporte à linguagem OCL (Object Constraint
Language), que tem como objetivo permitir a adição de constraints (restrições) aos
diagramas elaborados pelo projetista e também validar o diagrama elaborado utilizando os
construtores da UML. As restrições OCL descritas nesta seção se enquadram nesta última
opção, sendo especificadas no perfil GeoProfile para validar os diagramas elaborados
através de seus construtores possuindo sempre como contexto um de seus estereótipos.
As restrições especificadas para o GeoProfile basicamente evitam a ocorrência de três tipos
de erros: adição de estereótipos incompatíveis a um mesmo elemento; má construção de
redes; e adição de relacionamentos topológicos impossíveis de acontecer entre dois
elementos (ex.: relacionamento Cross entre dois objetos geográficos com representação de
ponto). Estes três grupos de restrições são analisados a seguir.
Para declarar Constraints, primeiro clique com o botão direito sobre o estereótipo ao qual
se deseja aplicar a restrição e em seguida na opção Properties. Na janela de propriedades
acesse o menu RulesConstraints selecione o tipo de restrição no campo Type como OCL
e Status como aprovado. Para adicionar uma expressão OCL clique em New, no campo
Constraint coloque a descrição da restrição OCL, e no campo de texto abaixo da descrição
insira a restrição OCL. Ao no botão Save será exibida uma mensagem de OCL validada com
sucesso quando a mesma estiver sintaticamente correta ou uma mensagem de alerta quando
a mesma estiver sintaticamente errada. A Figura a seguir ilustra como devem ser inseridas as
restrições OCL nos estereótipos.
16
As restrições do GeoProfile existentes até o momento da elaboração deste tutorial estão no
quadro a seguir. O campo context refere-se ao estereótipo onde a restrição será aplicada.
Restrições OCL para verificação de estereótipos incompatíveis em uma classe.
A context GeoField
inv: self.base_Class.getAppliedStereotypes() -> select(s | s.name = ‘Point’ or s.name = ‘Line’ or s.name = 'Polygon' or s.name = 'ComplexSpatialObj') -> isEmpty()
B context Network
inv:self.base_Class.getAppliedStereotypes() -> select(s | s.name = ‘Point’ or s.name = ‘Line’ or s.name = 'Polygon' or s.name = 'ComplexSpatialObj' or s.name = 'TIN' or s.name = 'Isolines' or s.name = 'GridOfCells' or s.name = 'AdjPolygons' or s.name = 'GridOfPoints' or s.name = 'IrregularPoints' or s.name = 'Node' or s.name = 'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
17
C context NetworkObj
inv: self.base_Class.getAppliedStereotypes()-> select(s | s.name = 'TIN' or s.name = 'Isolines' or s.name = 'GridOfCells' or s.name = 'AdjPolygons' or s.name = 'GridOfPoints' or s.name = 'IrregularPoints') -> isEmpty()
D context Node
inv: self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
E context UnidirectionalArc
inv: self.base_Class.getAppliedStereotypes() -> select(s | s.name = 'BidirectionalArc') -> isEmpty()
Restrições OCL para verificação da existência de estereótipos incompatíveis em uma
associação entre classes.
F context Cross
inv: self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or s.name = 'In' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
G context Disjoint
inv: self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Cross' or s.name = 'In' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
H context In
inv: self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or s.name = 'Cross' or s.name = 'Overlap' or s.name = 'Touch') -> isEmpty()
I context Overlap
inv: self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or s.name = 'Cross' or s.name = 'In' or s.name = 'Touch') -> isEmpty()
J context Touch
inv: self.base_Association.getAppliedStereotypes() -> select(s | s.name = 'Disjoint' or s.name = 'Cross' or s.name = 'In' or s.name = 'Overlap') -> isEmpty()
Restrições OCL para validação das redes definidas no esquema.
K context
inv: not self.base_Class.ownedAttribute.association.m
18
Network emberEnd.class.getAppliedStereotypes() -> select(s | s.name = 'Node') -> isEmpty()
L context Network
inv: not self.base_Class.ownedAttribute.association.memberEnd.class .getAppliedStereotypes() -> select(s | s.name = 'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
M context Arc
inv: not self.base_Class.ownedAttribute.association.memberEnd.class .getAppliedStereotypes() -> select(s | s.name = 'Node') -> isEmpty()
N context Node
inv: not self.base_Class.ownedAttribute.association.memberEnd.class .getAppliedStereotypes() -> select(s | s.name = 'UnidirectionalArc' or s.name = 'BidirectionalArc') -> isEmpty()
Restrições OCL para validação de relacionamentos topológicos do tipo In e Disjoint.
O context In
inv: self.base_Association.memberEnd.class -> forAll (c | c.getAppliedStereotypes() -> select(s | s.name = ‘Point’ or s.name = ‘Line’ or s.name = ‘Polygon’) -> notEmpty())
P context Disjoint
inv: self.base_Association.memberEnd.class -> forAll (c | c.getAppliedStereotypes() -> select(s | s.name = ‘Point’ or s.name = ‘Line’ or s.name = ‘Polygon’) -> notEmpty())
Restrições OCL para validação de relacionamentos topológicos do tipo Cross, Overlap e
Touch.
Q context Cross
inv: let classes : OrderedSet(Class) = self.base_Association.memberEnd.class -> asOrderedSet() in ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() ) or
19
((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() )
R context Overlap
inv: let classes : OrderedSet(Class) = self.base_Association.memberEnd.class -> asOrderedSet() in ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = 'Line') -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = 'Polygon') -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = 'Polygon')-> notEmpty() )
S context Touch
inv: let classes : OrderedSet(Class) = self.base_Association.memberEnd.class -> asOrderedSet() in ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() ) or((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Point’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Polygon’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes()-> select(s | s.name = ‘Polygon’) -> notEmpty() and (classes ->
20
at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Point’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Point’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() ) or ((classes -> at(1)).getAppliedStereotypes() -> select(s | s.name = ‘Line’) -> notEmpty() and (classes -> at(2)).getAppliedStereotypes() -> select(s | s.name = ‘Point’) -> notEmpty() )
Para salvar o projeto, clique em: File->Salve Project...
5. Aplicando o Perfil GeoProfile
Com o Perfil Criado, podemos utilizá-lo em nossa modelagem de classes
geográficas. Para utilizar o GeoProfile, o primeiro passo é criar um arquivo no formato
XMI, para isso clique com o botão direito do Mouse em algum espaço vago da área de
diagramação. Ao aparecer um Menu selecione a opção Salve as Profile...
Na janela Save UML Profile, preencha o campo Profile Name com GeoProfile, e o campo
Filename com o caminho desejado para salvar o arquivo XMI.
21
Crie um novo projeto para importar o perfil GeoProfile e adiciona-lo como uma tecnologia
de Perfil. Para isto a aba Resources no canto direito da tela deve estar disponível. Caso não
esteja, clique em View -> More Project Tools -> Project Resources.
Na aba Resources clique com o botão direito em UML Profiles onde aparecerá uma opção
para importar o Perfil UML. Na janela Import UML Profile preencha o campo Filename
com o caminho do arquivo XMI do GeoProfile gerado anteriormente, e clique em Import.
22
Com a nova tecnologia importada para a ferramenta é possível criar diagramas para
modelagem de Banco de Dados Geográficos. Para visualizar os elementos de modelagem
geográfica vá em Toolbox->More tools e selecione a opção GeoProfile.
Agora com os elementos do GeoProfile dispostos na barra de ferramentas, para criar
diagramas clique sobre o elemento desejado e arraste para a área de diagramação, como é
ilustrado na Figura a seguir.
A ferramenta Enterprise Architect permite usar mais de um estereótipo por classe. Isto
garante a múltipla representação geográfica de classes em diagramas criados com o
GeoProfile. A Figura a seguir ilustra a utilização de mais de um estereótipo por classe.
23
A inserção de mais de um estereótipo sobre uma classe pode ser feito da seguinte forma:
Ao clicar no estereótipo desejado e arrastar para a classe que deverá conter mais de uma
representação espacial, aparecerá um menu contendo 3 opções: a primeira para adicionar o
estereótipo na classe; a segunda para adicionar outra classe com este estereótipo; e a terceira
para cancelar. Desta forma clique na primeira opção.
Há outra forma para se adicionar estereótipos em uma classe. Ao clicar com o botão direito
do mouse sobre a classe vá em Properties. Na janela de propriedades existe um campo na
aba General de nome Stereotype seguido de um botão com reticências que ao ser clicado
abre uma janela com todos os estereótipos disponíveis. Nesta nova janela, no campo Profile
selecione a opção GeoProfile, selecione os estereótipos desejados e clique em ok.
24
Outro tipo de objeto que pode ser encontrado em aplicações geográficas é o temporal,
definido no GeoProfile como TemporalObj. Para este tipo de objeto foram definidos dois
tagged values, temporalType e temporalPrimitive. Para definir seus valores, primeiro
deve-se adicionar uma classe no modelo com o estereótipo TemporalObj.
25
Em seguida clique com o botão direito do mouse sobre a classe estereotipada e acesse a
opção Properties. Na aba GeoProfile podem ser atribuídos os valores das tag values como
exemplificado na imagem abaixo.
Por se tratar de uma ferramenta voltada para a criação de modelos utilizando a UML, outros
tipos de diagramas da UML também podem ser utilizados, como por exemplo, de
componente, atividade, implantação e até mesmo outros perfis já incorporados. Para isso use
a aba More Tools e escolha o tipo diagrama ou tecnologia a ser utilizada.
26
Para se adicionar novos atributos a uma classe, clique com o botão direito do mouse sobre a
classe e em seguida na opção Atributes. Novos atributos podem então ser adicionados
clicando-se em New, entrando-se com o nome do atributo no campo Name e adicionando
seu tipo no campo Type. Logo em seguida clique em Save para salvar as modificações. A
imagem a seguir ilustra esse procedimento.
27
Com relação a OCL, anteriormente aplicada ao perfil GeoProfile, pode ser utilizada para
avaliar o diagrama elaborado. Para isso clique em Project->Model Validation->Validate
Selected.
Após a validação a seguinte janela aparecerá.
Com relação a múltipla representação Geográfica o diagrama abaixo possui as classes
Cidade, Bairro e Escola com estereótipos do tipo <<point>> e <<polygon>> para suas
representações em uma aplicação geográfica. A múltipla representação é utilizada pelos
Sistemas de Informação Geográfica de acordo com a forma como se deseja representar, por
exemplo, um Bairro, em um determinado instante. Um exemplo típico de uso da múltipla
representação é dado de acordo com a escala utilizada, podendo-se utilizar a representação
ponto do Bairro em uma escala pequena e o polígono em uma escala grande. A classe
Professor, por não possuir representação geográfica, não possui estereótipo e foi criada
como uma classe convencional (alfanumérica).
28
Foram aplicados também estereótipos aos relacionamentos. O estereótipo <<in>> entre
Bairro e Cidade mostra que topologicamente todo elemento Bairro está dentro de um
elemento Cidade, o mesmo vale para o relacionamento entre Escola e Bairro. Não existe
relacionamento topológico entre Professor e Escola, sendo utilizada apenas uma associação
comum. Esta associação comum pode receber um nome, no caso do exemplo, Trabalha,
clicando-se com o botão direito do mouse sobre a associação e selecionando a opção
Association Properties... onde uma janela de propriedades de associação será apresentada,
podendo-se então entrar com o nome da associação no campo Name.
29
6. Importação e Exportação de arquivos XMI
A ferramenta Enterprise Architect também permite a importação e exportação de modelos
no formato XMI (XML Metadata Interchange), como por exemplo, os modelos Encore e
BPMN 2.0 XML. Para isso, acesse o menu: Project -> Model Import/Export.
Para a opção Exportar clique em Export Package to XMI..., desta forma uma janela
aparecerá onde deverá ser informado no campo Filename a pasta e o nome do arquivo XMI
onde o pacote deverá ser armazenado. Nesta tela também podem ser escolhidos outros
formatos de exportação disponíveis clicando-se em Publish. Depois de escolhido o formato
clique em Export.
30
Para importar um arquivo XML clique em Project->Model Import/Export->Import
Package to XMI. Na janela de importação informe no campo Filename a pasta e o nome
do arquivo XML a ser importado.
Mais informações a respeito desta ferramenta podem ser encontradas no site:
http://www.sparxsystems.com.au/