Agregação, composição vish que nó!

Pessoal,

Gostaria de uma ajuda num problema aqui:

Tenho o cenário:

Produto
AtributoProduto
AtributoValor

Produto: é uma classe de produtos normal.
AtributoProduto: é uma classe que contém os atributos do Produto. Ou seja ele armazena as palavras: “Cor”, “Largura”, “Altura” e etc.
AtributoValor: é o cara que tem o valor dos AtributosProduto. Seguindo o exemplo acima teriamos: “Azul”, “12cm”, “15cm” e etc.

Uma relação válida seria:

[quote]Produto: Caixa

Atributo1: Largura
AtributoValor1: 12cm

Atributo2: Cor
AtributoValor2: Azul

Atributo3: Altura
AtributoValor3: 12cm[/quote]

Eu só não poderia ter duas alturas em um mesmo produto por exemplo. Mas atributos diferentes no mesmo produto, sim.

Inicialmente eu preciso das três classes (acho).
Pensei em Composição, pois um Atributo só existe se houver Produtos. Mas não dá certo porque tem uma terceira classe que tem os valores (a AtributosValor) que é dependente da AtributosProdutos.

Isso já foi o necessário para me dar um nó =(

Alguém tem alguma dica ?

Abraço!

Essa relação é muito estranha pois vc pode ter 5 atributos e 3 valores.

Eu pensaria em algo assim:

Produto tem Atributos

Atributo tem chave, valor ( e talvez tipo )

Perceba que eu usei a palavra chave como o identificador desse atributo. Um atributo é um objeto, ele não sabe se existe outro Atributo com o mesmo valor, essa não é a responsabilidade dele.

Atributos então seria um objeto com a responsabilidade de armazenar (de alguma forma) objetos da classe Atributo e garantir a unicidade da chave nessa “collection” interna.

Entendo.
Pensei em três classes pois posso ter:

Cor: Azul, verde, vermelho
Tamanho: pequeno, médio, grande, 12cm, 20cm …

Mesmo assim você acha que posso jogar essa AtributosValor para AtributosProduto que daria certo ?
Pelo que entendi você sugere que eu jogue como chave sendo a “cor” e o valor “azul”, por exemplo, seria isso ou entendi errado ?

E neste caso, seria relacionamento do tipo Agregação, correto ?

Agradeço a ajuda =)

Veja bem, se vc tivesse apenas um atributo e um valor, tudo bem, mas vc tem varios, isso ‘implica’ em ter uma coleção e uma relação entre um atributo e um valor. Poderia ser um hashtable, como algo mais elaborado.

Vish enrolou hehehe…
Deixa eu entender:

Você sugere que eu una as classes AtributosProdutos e AtributosValor, reduzindo a uma so classe, a AtributosProdutos. Essa AtributosProdutos controlaria o tipo (color, size) e o valor (azul, branco, pequeno). Isso confere ?

Partindo disto, vem o modo de funcionamento dessa AtributosProdutos. Eu imaginei por Arrays, pois não tenho uma “hashtable” aqui (é em PHP o sistema =]) mas fico imaginando que seria meio inviável pois eu teria que ter várias instancias de AtributosProdutos em Produtos para setar cor tamanho largura, confere ?

Por fim vem o tipo de relaciomento entre AtributosProdutos e Produtos. AtributosProdutos não existe sem um Produto, logo é composição, confere novamente ?

Obrigado pelas dicas :wink: