Dúvida sobre composição

6 respostas
A

Amigos,

Há alguma inconveniência em termos de performance ou algum outro motivo ao chamar um método de um objeto que faz parte dos atributos de um outro objeto, passando para o método o próprio objeto chamador?

Algo assim.

ObjetoA {

     ObjetoB b;
     aqui outros campos...

     public a() {
        b = new ObjetoB();
      }

       public void metodoA() {
            b.metodoB(objetoA);
       }
}

...

main(...) {
     ObjetoA objetoA = new ObjetoA();
     objetoA.metodoA();
}

Tendo em conta que o objetoB precisa acessar alguns campos do objetoA, há alguma maneira melhor de resolver isso?

6 Respostas

Rodrigo_Sasaki

por que o metodoB tem que receber objetoA?

se objetoA tem nele tudo o que precisa pra executar imaginando que A é composto por B e mais outros atributos

A

digaoneves:
por que o metodoB tem que receber objetoA?

se objetoA tem nele tudo o que precisa pra executar imaginando que A é composto por B e mais outros atributos

Mesmo B sendo um objeto à parte?
Ou seja, a definição de B não está contida em A.

Rodrigo_Sasaki

como não se A contém B?

todos os atributos necessários de A e B, você consegue acessar por A…

é igual pensar em composição por partes de carro (algumas pessoas não gostam disso, mas as vezes clarifica)

Carro é composto por portas, rodas, motor, etc.

o carro não tem acesso a tudo?

A

digaoneves:
como não se A contém B?

todos os atributos necessários de A e B, você consegue acessar por A…

é igual pensar em composição por partes de carro (algumas pessoas não gostam disso, mas as vezes clarifica)

Carro é composto por portas, rodas, motor, etc.

o carro não tem acesso a tudo?

Talvez eu tenha me expressado de forma incompleta.

Eu quero delegar uma tarefa a B e não executá-la em A.

Para executar em A, eu poderia acessar os atributos de B perfeitamente.
Mas e como fazer para B executar a tarefa que é dependente de outros atributos de A?

Rodrigo_Sasaki

você pode enviar os atributos do A, e pode também enviar A como tem feito, é perfeitamente possível…
mas dependendo do caso pode não ser a maneira mais limpa de fazer.

pmlm

Podes fazer sim…

public void metodoA() {  
            b.metodoB(this);  
       }
Criado 25 de abril de 2012
Ultima resposta 26 de abr. de 2012
Respostas 6
Participantes 3