Tenho procurado pela internet exemplos de diagramas de classes que
envolvam uma relacao de dependencia sobre um relacionamento entre
classes, eh como chamam de “association classes”, mas tenho encontrado
muito pouca informacao sobre esse tipo de relacionamento.
Eu tenho 2 duvidas:
Como transformo em codigo, Java, esse tipo de dependencia?
(Seria acrescentando uma classe para intermediar o relacionameto das
outras classes - como se fosse um relacionamento M - N?)
Tenho testado varias ferramentas de modelagem UML e nenhuma delas
me permite modelar essa relacao de dependencia. Existe alguma ferramenta
que permita isso? Ou simplesmente tenho que modelar isso de outra forma?
Uma relação de dependência indica que o comportamento de determinada classe depende do comportamento de outra. Não tem como uma ferramenta “gerar código” a partir da informação de que há dependência.
Uma relacao de dependencia pode nao definir qual informacao eh
dependente de outra classe, como no exemplo que vc citou. Mas no meu
caso eu preciso saber de uma dependencia sobre uma associacao, exemplo:
Uma Loja tem uma lista de Produtos, essa associacao tem 2 dependencias
com informacoes proprias, que seriam a Compra e Venda. Essas duas
classes sao dependentes do relacionamento entre Loja e Produto.
Foi assim que modelei meu sistema, pode nem estar certo, MAS o fato eh
que nao achei nenhuma ferramenta que me permita criar essa
dependencia. E, supondo que nao exista, que seja impossivel “gerar
codigo” para isso, como faco para implementar isso? Ou, simplesmente,
altero o modelo para ajustar a capacidade de implementacao? Nesse caso,
pq a UML permitiria uma modelagem impossivel de ser implementada?
Err, na verdade tem, sim. Quando vc. gera uma classe Java a partir da classe UML, vc. usando uma regra de transformação que mapeia elementos do UML em correspondentes Java.
Em alguns casos o mapeamento é trivial. Ex: um atributo da classe UML vira um atributo da classe Java. Herança idem. Em outros, como no caso de associações e dependências, as opções de mapeamento podem ser mais abertas e/ou estarem vinculadas a um “profile” específico.
A título de exemplo, o AndroMDA utiliza as dependências para gerar classes com suporte a IoC, gerando setters & getters entre DAOs, Serviços e outros elementos de uma aplicação, bem como os arquivos de configuração do Spring que gerenciam o processo de injeção.