Duvida com composição / associação

Boa noite…
estou com duvida sobre associação de classes…
exemplo:

tenhu 2 classes: exemplo1 e exemplo2
a classe exemplo1 tem como atributos os mesmo atributos de exemplo2??

se for isso, como que eu xamo os atributos para o exemplo1?

pois em herança eu crio um construtor numa classe e na outra eu boto extends e o nome da classe e ai uso o super e talz, e xamo eles numa terceira classe e tal…

mais quando é assosiacao, no lugar de super de herança e extends eu uso oque, como que funciona?

se alguem puder me ajudar ai, estou perdidinho em associacao…

Grato…

Sejam duas classes A e B. Se A tem uma variável de instância do tipo de B então você tem aí uma associação. Se, mais especificamente, essa variável do tipo de B é private você caracteriza uma composição, uma vez que a variável do tipo de B diz respeito somente à implementação de A. Resumindo é isso:


class A{
   private B myVar; //composição
}

class B{
   void foo();
}

Por favor, como você é novo, dê uma lida:
http://www.guj.com.br/posts/list/118844.java

bem vamos la na vida real como acontece isso…

“um cavalo tem uma rédia”

“um cavalo é um animal”

Entao ai nos temos associacao e composicao, o cavalo está associado a um animal, e a composicao ele possui uma rédia. sendo assiim a nivel de codigo quando sua classe tem algo ai é a composicao, mais quando ela nao tem nada, apenas um relacionamento é associacao.

outro exemplo classico, vc eh socio de clube, mas vc nao tem um clube certo? vc recebe uma carteira para acesso, que todos que se associarem ao clube receberao.

class Clube{
int carteira; // relacionamento TEM-UM
}
//o clube tem uma carteira para identificacao de seus associados
class Associado1 extends Clube{
//por ser associado ele tem direito a uma carteira.... relacionamento É-UM 
}

espero ter ajudado :slight_smile:

outro exemplo classico, vc eh socio de clube, mas vc nao tem um clube certo? vc recebe uma carteira para acesso, que todos que se associarem ao clube receberao.

class Clube{
int carteira; // relacionamento TEM-UM
}
//o clube tem uma carteira para identificacao de seus associados
class Associado1 extends Clube{
//por ser associado ele tem direito a uma carteira.... relacionamento É-UM 
}

Bom mais neste caso voce esta usando herança certo?
tipo
tenhu 4 classes
a, b, c, d

b é filho de a ( herança ) exemplo: herda os atributos nome, idade

b tem Associação de c > exemplo: c tem País como atributo, e b recebe uma variavel private C c;

e d tem Associação de b

não sei se expliquei muito bem, mais é tipo assim.

[quote=LPJava]

outro exemplo classico, vc eh socio de clube, mas vc nao tem um clube certo? vc recebe uma carteira para acesso, que todos que se associarem ao clube receberao.

class Clube{
int carteira; // relacionamento TEM-UM
}
//o clube tem uma carteira para identificacao de seus associados
class Associado1 extends Clube{
//por ser associado ele tem direito a uma carteira.... relacionamento É-UM 
}

espero ter ajudado :)[/quote]

hmmm … não achei esse exemplo muito legal não. Primeiro, não acho que Associado e Clube definam uma relação É-UM. Acho muito mais coerente Clube TEM-UM (ou mais) Associado(s). Além do mais, quando dizemos que existe uma associação entre classes significa que as instâncias dessas classe mantêm pelo menos uma referência unidirecional entre elas. Exemplo:

//exemplo de associação
class Lenhador{
    private Machado m;

    public void setMachado( Machado m ){
       this.m = m;
    }

    public void cortaArvore( Arvore a ){
       //...
    }

    public void amolarMachado(){
       //....
    }

    public void dormir(){
       //...
    }
}


class Machado{
    public String getModelo();
}

//Lenhador USA-UM Machado, um Lenhador não tem um Machado em sua composição, 
//mas para executar uma tarefa específica ele precisa estar associado a um Machado

Composição, em contrapartida, é um pouco diferente :

class Carro{
    private Motor m;
    private [] Roda rodas;
    
    public Carro(){
       m = new Motor();
       rodas = new Roda[4];

       for( int i = 0 ; i < rodas.length ; i++ ){
           rodas[i] = new Roda();
       }
    } 
}

class Motor{ //... }
class Roda{ //....}

//ou seja, um Carro TEM-UM Motor E um Carro TEM Roda. Observe que os objetos da classe Motor e Roda são partes integrantes do 
//objeto Carro. O objeto do tipo Carro não existe sem um Motor e sem suas quatro Roda's

[quote=rmendes08][quote=LPJava]

outro exemplo classico, vc eh socio de clube, mas vc nao tem um clube certo? vc recebe uma carteira para acesso, que todos que se associarem ao clube receberao.

class Clube{
int carteira; // relacionamento TEM-UM
}
//o clube tem uma carteira para identificacao de seus associados
class Associado1 extends Clube{
//por ser associado ele tem direito a uma carteira.... relacionamento É-UM 
}

espero ter ajudado :)[/quote]

hmmm … não achei esse exemplo muito legal não. Primeiro, não acho que Associado e Clube definam uma relação É-UM. Acho muito mais coerente Clube TEM-UM (ou mais) Associado(s). Além do mais, quando dizemos que existe uma associação entre classes significa que as instâncias dessas classe mantêm pelo menos uma referência unidirecional entre elas. Exemplo:

//exemplo de associação
class Lenhador{
    private Machado m;

    public void setMachado( Machado m ){
       this.m = m;
    }

    public void cortaArvore( Arvore a ){
       //...
    }

    public void amolarMachado(){
       //....
    }

    public void dormir(){
       //...
    }
}


class Machado{
    public String getModelo();
}

//Lenhador USA-UM Machado, um Lenhador não tem um Machado em sua composição, 
//mas para executar uma tarefa específica ele precisa estar associado a um Machado

Composição, em contrapartida, é um pouco diferente :

[code]
class Carro{
private Motor m;
private [] Roda rodas;

public Carro(){
   m = new Motor();
   rodas = new Roda[4];

   for( int i = 0 ; i < rodas.length ; i++ ){
       rodas[i] = new Roda();
   }
} 

}

class Motor{ //… }
class Roda{ //…}

//ou seja, um Carro TEM-UM Motor E um Carro TEM Roda. Observe que os objetos da classe Motor e Roda são partes integrantes do
//objeto Carro. O objeto do tipo Carro não existe sem um Motor e sem suas quatro Roda’s
[/code][/quote]

realmente o clube TEM-UM associado ate pq um associado( uma pessoa) nao eh um clube hehe, mas a ideia era tentar clarear a questao de associacao, agora o modo mais simples eh ir em um livro de matematica no ensino fundamental e ver o assunto contem, nao contem, associacao… será bem legal pq normalmente é com desenhos.

Composição… ligação forte, onde não faz sentido a existencia da parte sem o todo, isso para o seu modelo claro
Associação… ligação mais fraca, onde as partes podem existir tranquilamente no seu modelo independentemente uma sem a outra…

Por exemplo, um aluno em uma faculdade, e um curso em uma faculdade… apesar da ligação entre os 2 poder existir, quando um aluno esta cursando algo, e um curso conter alunos, ela é apenas uma associação, visto que tranquilamente um pode existir sem o outro… neste caso a ligação é de composição, quando vc acaba com a diciplina, sua ementa vai embora automaticamente

Neste mesmo exemplo, um Diciplina de um certo curso, e suas ementa, não há sentido a ementa sem a diciplina, sendo assim, uma diciplina é composta de uma ementa, não fazendo sentido a existencia da ementa sem a existencia da diciplina…

Pense assim… em uma associação, vc pode deletar um lado da ligação, e o outro lado continuar vivo em seu modelo… em uma composição, sempre que vc destroi o lado do todo, as partes são apagadas imediatamente, pois elas não fazem sentido de existir sem esse todo…

Para deixa mais claro que depende do seu modelo, apesar de um carro ser composto de varias partes como motor, portas e etc… em uma montadora, um carro pode existir sem o motor, assim como o motor pode existir motor sem o carro e neste caso, o que existe nesse modelo, é uma associação entre as partes e o todo… assim tudo vai depender do foco de como é o seu modelo.

Obrigado por esclarecerem minha duvida
Foi de muita ajuda… :wink: