Acho que nunca li nada sobre isso, se alguem possuir bibliografia, por favor compartilhe.
Todo mundo que ja estudou um pouquinho de OOP sabe que existem diversos tipos catalogados de relacionamento entre objetos, mas vou focar tres: Agregaçao, Composiçao e Associaçao (Aggregation, Composition e Association).
E impossivel (pelo menso que eu saiba) definir um relacionamento destes declarativamente em Java < 5. Quando voce faz:
class A{
private B b;
}
Nao da para imaginar que tipo de relaçao A e B tem, voce vai rpecisar olhar o codigo. Geralmente compostos vao ser instanciados (ou pegos de algum lugar de forem Value Objects ou coisa parecida) diretamente na classe (na declaraçao do atributo ou no cosntrutor dessa), associaçoes geralmente sao setadas.
Com o uso de annotations, daria para amrcar essas relaçoes, definindo o que eh de qual tipo. O que voces acham disso?
Em primeira instancia, coisas como persistencia poderiam ser facilitadas (quando um objeto e atualizado, seus agregados tambem devem ser, mas nao seus associados), e outros usos podem surgir.
Assim, metade do trabalho feito com XML estaria resolvido trabalhando desse modo, mas seria ótimo se houvesse uma padronização nisso. Tipo, um annotation que simbolize composição, outro agregação, pra num ficar todo mundo inventando.
Será que dá pra abrir um request só pra colocar isso no Java? :mrgreen:
O programador eh quem conhece o relacionamentod e suas classes. Os frameworks podem usar essa ifnroamçao adicional para prover algumas simplificaçoes, outros programadores podem se beneficiar das anotaçoes como documentaçao (ja que voce vai acabar precisando dum diagrama para msotrar suas agregaçoes se nao usar algo do tipo)…
Baixei a JSR 250 (da qual o michael Santos faz parte, voce ta por ai, mister m?) e vi que o trabalho esta bem no inicio, ams nao contempla nada perto diso 9apesar de eu ter adorado algumas como @generated :mrgreen: ).
Eu sei que já MUITO tempo que isso foi postado, mas vou responder mesmo assim…
Conversando com um amigo sobre esse post ele me lembrou que essa idéia já existe nos doclets, por exemplo a ferramenta OMONDO, ao gerar as classes, coloca esse tipo de configuração pra controle dela em forma de doclet.
No caso, essas configurações virariam essas annotations!
[quote=Romulinho]Eu sei que já MUITO tempo que isso foi postado, mas vou responder mesmo assim…
Conversando com um amigo sobre esse post ele me lembrou que essa idéia já existe nos doclets, por exemplo a ferramenta OMONDO, ao gerar as classes, coloca esse tipo de configuração pra controle dela em forma de doclet.
No caso, essas configurações virariam essas annotations!
Valeu![/quote]
Muito tempo mesmo. Inclusive nesta época eu usava xdoclet
A idéia expressa aqui é para er anotações semânticas no código em si, não apenas nos comentários como faz xdoclet. Pre-processamento é útil mas a idéia é meta-programação em real time com semântica OO. Eu eu ainda não vi nada muito parecido em 4 anos.
alguém sabe me dizer se existe algum framework, library ou extensão (com pré-compilador) do Java que permita construir relacionamentos (associações) N-N entre objetos sem usar atributos de objetos?
Pergunto isto porque sempre que necessita-se fazer um relacionamento Many-To-Many, entre as classes A e B, o código fonte acaba necessitando usar algum Collection (List, Set, etc) para guardar as referências de objetos de uma classe na outra. Sendo assim, métodos add, remove, get(), entre outros, acabam surgindo afim de que o objeto proprietário da coleção possa dar acesso público e controlado, a mesma.
Eu sei que tem ferramentas que fazem boa parte deste trabalho de geração de código, mas a questão toda é que olhando para o código, você não encherga um relacionamento, mas sim um atributo. A implementação dos métodos de acesso à coleção acabam se misturando ao “código original” da classe.
Outro problema condiz a mudança de cardinalidade. Se por acaso for necessário trocar de Many-To-Many para, por exemplo, Many-To-One, o atributo que aponta para objetos da classe que mudou a cardinalidade deverá mudar de Collection para um simples atributo (de único valor).
Não sei se consegui ser claro, mas o que eu quero saber é se existe, em Java, alguma forma de eu declarar relacionamentos assim como eu declaro atributos e métodos de uma classe?
Quando eu falo em “declarar relacionamentos”, significa duas coisas:
que toda a funcionalidade de adicionar, remover e recuperar os objetos, já esteja “implícita” na declaração, sem necessidade de “código extra” para se fazer isto.
que fique explícito que ali está se declarando um relacionamento entre objetos, não um atributo de objeto.
Oras… e o que dizer de associações qualificadas, navegabilidade, certas multiplicidades, classes de associação, associações ternárias, associações condicionais e etc?