1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Duvida sobre composição

Observei em muitos artigos e princípios de projetos, que é deve-se preferir utilizar a composição à herança, resolvi por curiosidade ajustar o meu projeto para o uso da composição.No meu projeto tinha uma super classe pessoa:

public class Pessoa{
   //alguns atributos
   private String telefone;
   private String email;
   private String rg;
   private String cpf;
   //gets e sets
}

E duas classes filhas:

public class Cliente extends Pessoa{
   //atributos herdados
   //mais alguns atributos
   //gets e sets
}

public class Funcionario extends Pessoa{
    //atributos herdados e mais alguns, gets e sets
}

Com esse esquema conseguia usar polimorfismo de boa por exemplo

public class Teste{
   main(){
      Pessoa p = new Cliente();
      dao.salva(p);
   }
}
public class Dao{
    public void salva(Pessoa p){
        //aqui não importo se recebo Cliente ou Funcionario
        salva(p);
    }
}

Resolvi então testar com composição

public classe Cliente{
    //aqui criei classes separadas e coesas para meus atributos ex.
    private Contato contato //onde contato possui atributos telefone e email por exemplo
    private Documento documento //cpf e rg
    gets e sets

}

O mesmo fiz com funcionario e seus atributos.

Só que me surgiu uma duvida em como continuar usando o polimorfismo daquele método salva por exemplo, onde me baseio na classe pai para receber os filhos. Pesquisei algo sobre interfaces, mas vi que interface prega o conceito de contrato entre as classes, e é mais utilizado em casos de forçar uma classe que a implementa em implementar seus métodos. Fica minha dúvida, como continuar com o polimorfismo usando composição. Agradeço a paciencia de quem puder sanar essa duvida.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.