• Nenhum resultado encontrado

4.2 Arquivos de Entrada

4.2.3 O Mapeamento de Modelos

O documento M3L - Model Mapping Markup Language, foi criado para suprir a inexistˆencia

de um padr˜ao capaz de armazenar o mapeamento entre um modelo orientado a objetos e os demais modelos utilizados no processo de constru¸c˜ao de um sistema.

No documento M3L est˜ao contidos os principais dados sobre cada modelo mapeado. A

Figura 4.3 ilustra o conceito de mapeamentos utilizados pelo ambiente XO2.

Figura 4.3 Mapeamentos

Por conter os principais dados sobre cada modelo, o ambiente n˜ao precisa conhecer as par- ticularidades de cada modelo em si.

Na vers˜ao atual do ambiente XO2, o mapeamento foi realizado entre o modelo Orientado a Objetos e o modelo Entidade-Relacionamento, conhecido como mapeamento OO-ER.

A estrutura do documento de mapeamento foi criada a partir de estudos feitos nos trabalhos

de Amber [Amb00]. Com o documento M3L, ultrapassando a esfera do mapeamento OO-

ER, pode-se representar praticamente qualquer tipo de mapeamento. Para isto, foi criado um documento de mapeamentos que pode sofrer modifica¸c˜oes e atender aos mais diversos requisitos. O mapeamento utilizado segue a regra 1-1 (um para um). Isto indica que cada elemento de um modelo dever´a corresponder a um e somente um elemento de cada outro modelo mapeado. A Figura 4.4 mostra os principais elementos de um mapeamento M3L.

Figura 4.4 Principais elementos do mapeamento M3L

O elemento maps ´e uma cole¸c˜ao de elementos do tipo map que por sua vez representa o mapeamento de um elemento. O map pode representar um elemento do diagrama de classes (e.g. classe ou atributo) e, ainda, um elemento do modelo relacional (e.g. tabela ou coluna).

Para representar os elementos de cada modelo s˜ao criados elementos do tipo node. Cada node representa um n´o do mapeamento. A vers˜ao atual do M3L, permite utilizar N n´os para mapear v´arios modelos, apesar dos exemplos apresentados possu´ırem apenas dois n´os.

O node possui uma s´erie de propriedades (properties) que descrevem os dados relevantes de cada modelo. Cada node corresponde a um modelo. O Exemplo 4.8 mostra a cria¸c˜ao de um mapeamento da classe Pessoa para a tabela PESSOA. A cria¸c˜ao do mapeamento ´e realizada pela

tag map e pela atribui¸c˜ao de um valor ao atributo name.

O Exemplo 4.8 representa os principais componentes de um mapeamento. Exemplo 4.8 N´o de mapeamento

1 <map name= ‘ ‘ Carro ’ ’>

2 <node i n d e x = ‘ ‘ true ’ ’ model = ‘ ‘ oo ’ ’

3 name= ‘ ‘ Carro ’ ’ xo2Type = ‘ ‘ xo2 . uml . XO2Class ’ ’/> 4 <node i n d e x = ‘ ‘ f a l s e ’ ’ model = ‘ ‘ e r ’ ’

5 name= ‘ ‘CARRO’ ’ xo2Type = ‘ ‘ ERTable ’ ’/> 6 </map>

As linhas 2 e 4 criam dois n´os da classe modelada, um para o modelo OO e outro para o modelo ER. Os atributos index, model, name e xo2Type s˜ao obrigat´orios e formam a base do mapeamento. O index indica se aquele n´o ser´a utilizado como ´ındice nas buscas. J´a model indica a qual modelo pertence o n´o. O name indica o nome do elemento no seu modelo (e.g. o nome da classe Carro no diagrama de classes). Por fim, xo2Type indica o tipo daquele elemento, podendo ser: classe (XO2Class), atributo (XO2Attribute), tabela (ERTable) e coluna (ERTableColumn).

4.2 ARQUIVOS DE ENTRADA 55

Um n´o pode receber novas propriedades para aumentar o seu n´ıvel de detalhes. Para fazˆe-lo cria-se elementos property dentro de um n´o. Um elemento property deve ter um nome e o seu valor deve ser colocado como conte´udo texto do elemento property, como ilustra o Exemplo 4.9.

Exemplo 4.9 Inserindo property em um n´o 1 . .

2 <node i n d e x = ‘ ‘ true ’ ’ model = ‘ ‘ oo ’ ’

3 name= ‘ ‘ Carro ’ ’ xo2Type = ‘ ‘ xo2 . uml . XO2Class ’ ’> 4 <p r o p e r t y name=” i s I n n e r C l a s s ”>f a l s e </pro perty > 5 </node>

6 <node i n d e x = ‘ ‘ f a l s e ’ ’ model = ‘ ‘ e r ’ ’

7 name= ‘ ‘CARRO’ ’ xo2Type = ‘ ‘ ERTable ’ ’/> 8 . .

Como forma de tornar mais simples e organizado o acesso aos elementos do documento, pode- se criar conjuntos de mapeamentos. O agrupamento de mapeamentos ajuda no entendimento e organiza¸c˜ao do c´odigo XML e deve ser utilizado para representar atributos de uma classe e colunas de uma tabela. O agrupamento deve ser armazenado dentro de um elemento map. No Exemplo 4.10, exemplifica-se a cria¸c˜ao do mapeamento de um atributo de uma classe em uma coluna de uma tabela realizados dentro de um mapeamento classe/tabela.

Exemplo 4.10 Mapeamentos agrupados 1 <map name=” Carro ”>

2 . . . 3 <maps>

4 <map name= ‘ ‘ modelo ’ ’>

5 <node i n d e x = ‘ ‘ true ’ ’ model = ‘ ‘ oo ’ ’

6 name= ‘ ‘ modelo ’ ’ xo2Type = ‘ ‘ xo2 . uml . XO2Attribute ’ ’/> 7 <node i n d e x = ‘ ‘ f a l s e ’ ’ model = ‘ ‘ e r ’ ’

8 name= ‘ ‘CARRO MODELO’ ’ xo2Type = ‘ ‘ ERTableColumn ’ ’/> 9 </map>

10 </maps> 11 </map>

Como j´a foi dito anteriormente, o documento pode representar o mapeamento entre v´arios modelos. No Exemplo 4.11 ser´a ilustrado um mapeamento entre trˆes modelos, sendo eles: o modelo OO, o modelo ER e um modelo para representar elementos da GUI.

Exemplo 4.11 Mapeamentos 1 . . .

2 <map name= ‘ ‘ modelo ’ ’>

3 <node i n d e x = ‘ ‘ true ’ ’ model = ‘ ‘ oo ’ ’

4 name= ‘ ‘ modelo ’ ’ xo2Type = ‘ ‘ xo2 . uml . XO2Attribute ’ ’/> 5 <node i n d e x = ‘ ‘ f a l s e ’ ’ model = ‘ ‘ e r ’ ’

6 name= ‘ ‘CARRO MODELO’ ’ xo2Type = ‘ ‘ ERTableColumn ’ ’/> 7 <node i n d e x = ‘ ‘ f a l s e ’ ’ model = ‘ ‘ g u i ’ ’

8 name= ‘ ‘ Modelo ’ ’ xo2Type = ‘ ‘ e t c ’ ’>

10 <p r o p e r t y name=” widget ”>e d i t </pro pert y > 11 </node>

12 </map> 13 . . .

A quantidade de n´os deve ser igual ao n´umero de modelos mapeados. No exemplo, h´a

a cria¸c˜ao de um modelo referente `a representa¸c˜ao gr´afica dos atributos de uma classe e foi necess´ario criar a propriedade required, que indica a obrigatoriedade do campo, e a propriedade widget, que informa o tipo de componente gr´afico que representar´a o atributo da classe.

No documento M3L h´a o conceito de heran¸ca. Atrav´es do conceito ´e permitido que um

mapeamento herde os elementos de outro mapeamento. As duas principais utilidades de utilizar heran¸ca no documento s˜ao: representar de forma fiel as heran¸cas OO e estruturar o c´odigo agrupando mapeamentos que se relacionam e, assim, evitar repeti¸c˜ao. Quando um mapeamento “herda” de outro diz-se que todos os maps contidos no “pai” estar˜ao contidos no “filho”. Para indicar que um mapeamento herda de outro basta colocar o atributo XML extends no elemento map. A Figura 4.5 acrescenta uma heran¸ca entre Carro e Automovel.

Figura 4.5 Diagrama UML com heran¸ca

O Exemplo 4.12 mostra o c´odigo necess´ario para mapear a classe Automovel a uma tabela e representar o mapeamento do atributo marca. Em seguida, faz tamb´em a declara¸c˜ao da rela¸c˜ao de heran¸ca do mapeamento Carro com Automovel.

Exemplo 4.12 Mapeamento com heran¸ca 1 . . .

2 <map name=” Automovel ”>

3 <node i n d e x=” t r u e ” model=” oo ”

4 name=” Automovel ” xo2Type=” xo2 . uml . XO2Class”/> 5 <node i n d e x=” f a l s e ” model=” e r ”

6 name=”AUTOMOVEL” xo2Type=”ERTable”/>

7 <maps>

8 <map name=”marca ”>

4.2 ARQUIVOS DE ENTRADA 57

10 name=”marca ” xo2Type=” xo2 . uml . XO2Attribute ”/> 11 <node i n d e x=” f a l s e ” model=” e r ”

12 name=”CD MARCA” xo2Type=”ERTableColumn”/>

13 </map> 14 </maps> 15 </map>

16 <map name=” Carro ” extends=” Automovel ”> 17 <node i n d e x=” t r u e ” model=” oo ”

18 name=” Carro ” xo2Type=” xo2 . uml . XO2Class”/> 19 <node i n d e x=” f a l s e ” model=” e r ”

20 name=”CARRO” xo2Type=”ERTable”/>

21 </map> 22 . . .

Para tornar mais breve o exemplo, os atributos da classe Carro foram omitidos. Entre as linhas 2 e 15, encontra-se a cria¸c˜ao de um mapeamento de nome Automovel. Em seguida, foi criado um mapeamento Carro e na sua declara¸c˜ao (linha 16) informa-se, atrav´es da tag extends, que este ser´a uma heran¸ca do mapeamento Automovel. Para fins pr´aticos, todos os mapeamentos que estiverem contidos em Automovel tamb´em estar˜ao contidos em Carro e, assim, poder˜ao ser acessados pelo ambiente.

O documento M3L permite overriding ou redefini¸c˜ao de elementos. Este conceito torna poss´ıvel que um elemento definido no mapeamento “pai” possa ser redefinido pelo “filho”. O Exemplo 4.13 apresenta uma modelagem diferente, onde o mapeamento marca est´a definido de uma forma em Automovel e de outra em Carro.

Exemplo 4.13 Mapeamento com redefini¸c˜ao 1 . . .

2 <map name=” Automovel ”>

3 <node i n d e x=” t r u e ” model=” oo ”

4 name=” Automovel ” xo2Type=” xo2 . uml . XO2Class”/> 5 <node i n d e x=” f a l s e ” model=” e r ”

6 name=”AUTOMOVEL” xo2Type=”ERTable”/>

7 <maps>

8 <map name=”marca ”>

9 <node i n d e x=” t r u e ” model=” oo ”

10 name=”marca” xo2Type=” xo2 . uml . XO2Attribute ”/>

11 <node i n d e x=” f a l s e ” model=” e r ”

12 name=”CD MARCA” xo2Type=”ERTableColumn”/>

13 </map> 14 </maps> 15 </map>

16 <map name=” Carro ” extends=” Automovel ”> 17 <node i n d e x=” t r u e ” model=” oo ”

18 name=” Carro ” xo2Type=” xo2 . uml . XO2Class”/> 19 <node i n d e x=” f a l s e ” model=” e r ”

20 name=”CARRO” xo2Type=”ERTable”/>

21 <maps>

22 <map name=”marca”>

23 <node i n d e x=” t r u e ” model=” oo ”

25 <node i n d e x=” f a l s e ” model=” e r ”

26 name=”NM MARCA” xo2Type=”ERTableColumn”/>

27 </map> 28 </maps> 29 </map> 30 . . .

Percebe-se que, depois da redefini¸c˜ao do mapeamento Carro realizada entre as linhas 16 e 29, mesmo havendo uma heran¸ca de Carro para Automovel, para o ambiente a defini¸c˜ao do atributo marca da classe Carro que estar´a em vigor ´e definida por ele mesmo. O mapeamento da classe Automovel permanece inalterado e n˜ao ser´a afetado pela sobreposi¸c˜ao.

Foram apresentados nesta se¸c˜ao os elementos constituintes de um mapeamento XO2, espera-

se com isso que o leitor tenha capacidade de entender o restante deste documento.

Documentos relacionados