Associação, Composição e Agregação

Java

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?
Leia Garcia

Leia Garcia

Curtidas 1

Melhor post

Sergio Taborda

Sergio Taborda

09/04/2009

[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
GOSTEI 1

Mais Respostas

Ale

Ale

09/04/2009

Alguem pode me dar uma luz. Tudo bem, entendi como ficam as classes quando há Composicao, Agregacao e Associacao, mas e o banco ? Como ficam 'as tabelas' ? Grata
GOSTEI 0
Ale

Ale

09/04/2009

[quote="alemarx"]Alguem pode me dar uma luz. Tudo bem, entendi como ficam as classes quando há Composicao, Agregacao e Associacao, mas e o banco ? Como ficam 'as tabelas' ? Grata
Se você desenhar seu diagrama de classes, vai ficar muito parecido com o MER para o seu banco.
GOSTEI 0
Ale

Ale

09/04/2009

Entao eu tenho uma 'tabela' para Passageiro, uma para Voo e uma para o controle de voo !? Voce poderia me desenhar esta estrutura para que eu possa compreender melhor , é dificil para mim ver as primary keys e chaves estrangeiras neste modelo. Grata
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[quote="alemarx"]Entao eu tenho uma 'tabela' para Passageiro, uma para Voo e uma para o controle de voo !? Voce poderia me desenhar esta estrutura para que eu possa compreender melhor , é dificil para mim ver as primary keys e chaves estrangeiras neste modelo. Grata
Não, sou um péssimo desenhista.
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[quote="sekkuar"][quote="alemarx"]Entao eu tenho uma 'tabela' para Passageiro, uma para Voo e uma para o controle de voo !? Voce poderia me desenhar esta estrutura para que eu possa compreender melhor , é dificil para mim ver as primary keys e chaves estrangeiras neste modelo. Grata
Não, sou um péssimo desenhista.
Você pode "memetizar" essa estrutura então?
GOSTEI 0
Ale

Ale

09/04/2009

[quote="ryuuji"][quote="sekkuar"][quote="alemarx"]Entao eu tenho uma 'tabela' para Passageiro, uma para Voo e uma para o controle de voo !? Voce poderia me desenhar esta estrutura para que eu possa compreender melhor , é dificil para mim ver as primary keys e chaves estrangeiras neste modelo. Grata
Não, sou um péssimo desenhista.
Você pode "memetizar" essa estrutura então? Eu não sei muitas memes com aviões... Sem contar o meu [url=http://www.azillionthings.com/lookytouchy/orly_owl_plane.jpg]antigo papel de parede[/url] e [url=http://www.yodawgyo.com/wp-content/uploads/2419/yo%20dawg-plane-480x1525.png]uma piada que os americanos não gostam[/url]
GOSTEI 0
POSTAR