• Nenhum resultado encontrado

XMI - XML METADATA INTERCHANGE, UML2 E PAPYRUS

B.1.1 Escrevendo Objetos Usando XMI

Documentos XMI também são documentos XML logo é necessário incluir a versão do XML bem como a codificação (por exemplo UTF-8) como mostrado no Código B.1.

1http://wiki.eclipse.org/MDT-UML2

2http://www.omg.org/mof/

3http://wiki.eclipse.org/MDT-UML2

Código B.1: Definindo codificação [31].

1 <?xml version="1.0" encoding="UTF-8"?>

Por sua vez um documento XMI pode ser escrito como mostrado no Código B.2.

Código B.2: Um documento XMI [31].

1 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>

Cada objeto em XMI é representado usando um elemento XML, por exemplo, o Có-digo B.3 mostra como definir um objeto chamado Person.

Código B.3: Representação de um objeto em XMI (adaptado de [31]).

1 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI">

2 <Person/>

3 </xmi:XMI>

O uso de namespaces é recomendado para evitar conflitos de nomes. Logo, é possível escolher diferentes prefixos dependendo do documento, como mostrado no Código B.4.

Código B.4: Usando namespaces (adaptado de [31]).

1 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:persons="http://persons">>

2 <persons:Person/>

3 </xmi:XMI>

Um dos benefícios em se usar namespaces é que com eles não é necessário informar o nome qualificado (fully qualified name) para identificar classes com o mesmo nome. Em Java4, por exemplo, foo.bar.Person indica um pacote chamado foo e dentro dele outro pacote nomeado bar e, por sua vez, a classe propriamente dita, o que é diferente de foo1.bar2.Person. Caso namespaces não sejam utilizados é possível que um arquivo de difícil leitura e manutenção seja obtido [31]. No Código B.5 isto é exemplificado por meio de um documento XMI. Nas linhas 2 e 3 do Código B.5 são definidos doisnamespaces: p1 e p2. Com a definição dos namespaces é possível, nas linhas 5 e 6, declarar dois objetos que possuem o mesmo nome.

Código B.5: XMI com dois objetos com nomes iguais (adaptado de [31]).

1 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"

A identificação de objetos em XMI é realizada por meio de três atributos. Vale ressaltar que cada um destes atributos possui uma semântica diferente: id, uuid e label [31]. Tais atributos existem para que seja possível referenciar outros elementos XML usando XML IDREFs, XLinkse XPointers [45].

O atributo id é o identificador para um objeto e este deve ser único dentro do do-cumento. Entretanto não é garantido que seja único entre documentos diferentes. Este identificador é usado para realizar relacionamentos entre os objetos. O atributouuid( uni-versally unique identifier) trata-se do identificador único global e geralmente é utilizado algum algoritmo5 para gerar este valor [31]. Esses dois atributos estão dentro de um grupo chamado IdentityAttribs [45].

O atributo label contém qualquer outra informação que se deseje atribuir ao objeto em questão. XMI não fornece um atributo chamado label. Para isso, deve-se proceder como apresentado no Código B.6 [31]. No Código B.6 é apresentado um XMI que utiliza o atributo label. Nas linhas 2 e 3 são criados dois labels com os valores "foo"e ’"bar", respectivamente.

Código B.6: Exemplo de uso do atributo label (adaptado de [31]).

1 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>

2 <Pessoa xmi:id="_1" xmi:uuid="CA 9ABC123" xmi:label="foo"/>

3 <Pessoa xmi:id="_2" xmi:label="bar"/>

4 <Pessoa xmi:id="_3"/>

5 </xmi:XMI>

B.1.2 Atributos

Em XMI atributos podem ser representados de duas maneiras: elementos XML ou atri-butos XML. Na UML existem dois tipos de valores: valores de dados e valores de objetos.

Valores de dados são atributos do tipo String e Integer, por exemplo. Valores de objetos são tipos que representam objetos complexos. Um atributo UML tem uma multiplicidade que indica o número de vezes que o valor do atributo pode aparecer em um objeto. Para que seja possível inserir um valor de um atributo UML em um atributo ou elemento XMI as seguintes condições devem ser verdadeiras:

• O valor em questão é um valor de dados; e

• Não pode haver mais de um valor para o atributo UML em um objeto.

No Código B.7 é apresentada a definição de um atributo por meio de um atributo XML. Neste exemplo Personpossui um atributo chamado name com o valor "Ana".

5http://www.ostyn.com/standards/docs/guids.htm

Código B.7: Definindo um atributo por meio de um atributo XML (adaptado de [31]).

1 <Person name="Ana"/>

No Código B.8 é apresentado o mesmo exemplo do Código B.7 usando um elemento XML. Na linha 2 é criado o atributoname com o valor "Ana".

Código B.8: Definindo um atributo por meio de um elemento XML (adaptado de [31]).

1 <Person>

2 <name>Ana</name>

3 </Person>

Valores de objetos, por sua vez, devem ser serializados usando um elemento XML ao invés de um atributo XML. Por exemplo, a classe chamada Person (Código B.10) possui um atributo do tipoAddress(Código B.11), que por sua vez possui dois atributos: streete number. O Código B.9 mostra como serializar a relação entrePersoneAddress para XMI.

Código B.9: Classe Personcom um objeto como atributo (adaptado de [31]).

1 <Person>

2 <address street="rua x" number="672"/>

3 </Person>

No Código B.9 na linha 1 é definida a classe Person e na linha 2 é criada a classe Addresscom seus dois atributos: streetenumber. Pode-se observar que na linha 2 é usado um elemento XML para representar o objeto Address. Também na linha 2 o elemento XML addressrepresenta o valor do atributo address para o objeto Person. O valor para o atributo street é "rua x" e para o atributo numberé "672".

Código B.10: ClassePerson.

A Figura B.1 contém uma estrutura de classes que consiste de uma superclasse e duas subclasses. Neste exemplo pode-se ter uma part, engine outransmission, logo é necessária uma maneira de informar o tipo da classe. O atributo type é usado para especificar o tipo do objeto que está sendo serializado quando um tipo específico não é conhecido no modelo. Isto pode acontecer em casos nos quais há subclasses, como no diagrama da Figura B.1 por exemplo [45].

Figura B.1: Car com dois tipos de partes [31]

Código B.12: ClasseCar com uma parteEngine [31].

1 <Car>

2 <part xmi:type="Engine"/>

3 </Car>

No Código B.12 é apresentado um objeto Car com um atributo Part que é do tipo Engine.

B.2 UML2

B.2.1 Instalação

A UML2 está disponível como um plugin do Eclipse6. Neste trabalho foi usada a versão Juno7, entretanto ela também pode ser usada de forma standalone. O uso por meio do Eclipse é mais recomendado pois trata-se de um ambiente amplamente usado tanto pela comunidade acadêmica quanto pela indústria. Outro ponto que fortalece o uso do Eclipse é que é possível instalar facilmente a UML2. Considerando a versão Juno, a instalação pode ser feita por meio do itemInstall New Software (Menu: Help -> Install New Software).

Deve-se instalar o item UML2 Extender SDK.