"jairelton":
Teria uma alteração em produto sim, pois AtributoProduto "faz parte" de Produto, portanto o que está sendo alterado é o Produto.
Se você tem um produto "Caneta" e você altera o atributo "Cor" do produto, o produto não foi alterado?
Então, neste caso sim, pois eu alterei a cor do produto.
Mas deixa eu apresentar outro exemplo:
Temos os atributos: Cor e altura no banco numa tabela que tem apenas os atributos.
Daí o o cara vai lá e adiciona no sistema o atributo Largura. De inicio os produtos não terão essa informação definida, pois há uma tabela intermediária que indicará o ID do atributo e o ID do produto para fazer as associações (puxa, é agregação mesmo =]).
Nesse meu caso o atributo é uma parte de Produto realmente, mas é uma parte gerenciável a parte, entende ? Mesmo assim essa agregação existe, correto ?
E "chamar a classe produto inteira" não é nenhum drama, fica tranquilo.
hehe, neurose minha mesmo. Preciso parar com isso =)
Talvez fosse mais adequado chamar de agregação, inves de composição, mas isso é uma questão mais de interpretação.
Vi em um livro de OOP que Composição era quando a "parte" não existia sem o "todo", e agregação quando a "parte" era instanciada fora do "todo" e essa "parte" era agregada ao "Todo" por meio de um método, algo como:
CestaCompras (todo)
Produto (parte)
CestaCompras->insereProduto(Produto p)
Mas você não é o primeiro a me falar que está invertido, talvez seja erro do autor do livro. Ele diz ainda que na agregação a ligação entre o "todo" e "parte" no banco é feita por uma tabela auxiliar que conterá as chaves estrangeiras... enfim ...
Muito obrigado pela ajuda!