Fórum Associação, Composição e Agregação #568163
09/04/2009
Em termos de modelagem do diagrama de classes, é simples a diferença entre uma associação simples, composição e agregação.
Mas qual é a diferença em termos de codificação? Como faço para representar em java cada uma destas relações?
Será que alguém poderia me ajudar?
[quote="fernanda_dias"]Em termos de modelagem do diagrama de classes, é simples a diferença entre uma associação simples, composição e agregação.
Mas qual é a diferença em termos de codificação? Como faço para representar em java cada uma destas relações?
Será que alguém poderia me ajudar?
Em termos de codificação a diferença não existe. Aquilo que programáticamente distingue as 3 são os controles que vc adicionar
por exemplo
public class Aviao {
// isto é composição
Motor motor = new Motor();
// isto é aggregação
public void add(Passageiro p){
p.embarc(this);
}
public void remove(Passageiro p){
p.debarc(this)
}
// isto é uma associação
public void setFlyightController (FlyightController controller);
public FlyightController getFlyightController ();
}
Composição é responsabilidade do proprio objecto. Por isso Motor é inicializado dentro do Avião. E NUNCA poderá ser substituido por outro enquanto o Avião existir.
O controle de Voo controla vários aviões ao mesmo tempo. Ele funciona como um observador do avião com comunica com o avião e com o qual o avião se comunica. Ou seja, vc pode setar apenas um controlador para cada aviaõa, mas pode setar o mesmo para todos os aviões.
O passageiro está dentro do avião, mas depois ele sai. O passageiro não pertence ao avião e não pode estar em dois aviões ao mesmo tempo.
Para controlar essa regra passageiro teria que ser assim:
public class Passageiro {
Aviao aviao
public synchronized void enbarc(Aviao aviao ){
if (this.aviao ==null){
throw new IllegalStateException("O passageiro já consta de um aviao. Remova-o desse aviaão antes de o incluir em outro");
}
this.aviao = aviao
}
public void debarc(Aviao aviao){
if (aviao.equals(this.aviao)){
this.aviao = null;
}
}
}
Moral da historia: A diferença está nas regras de validação que você cria para amarrar uns objetos com os outros