[quote=hugleo]Tenho os seguintes papeis: Cliente, Fornecedor, Vendedor
Essas classes tem em comum, o endereço, como rua, telefone, e-mail, etc (uns 20 atributos).
Esses dados poderiam estar em uma classe Pessoa?
Mas aqui eu tenho o caso de por exemplo um Vendedor também poder assumir o papel de Cliente.
Qual a melhor forma de modelar isso? Eu criaria a classe Pessoa referentes a dados pessoais?
Quais a relação de classes que eu faria a herença ou agregação?
Usaria polimorfismo? Também não seria o caso, pois Cliente, Fornecedor e Vendedor possuem alguns atributos e métodos específicos.
Além disso, Cliente e Fornecedor possui outro atributos em comum mas que não fa parte de Vendedor. Nesse caso (como é somente um atributo), acredito que seria melhor que ele fique em Cliente e Fornecedor.
Essa abordagem é necessária por que minha aplicação possui um método que é responsável importar dados em comum, ou seja: O usuário da aplicação cadastra um Cliente, mas se ele quiser pode recuperar os dados em comum (como endereço, tel, etc), para não ter que digitar tudo novamente para efetuar o cadastro de Vendedor ou Fornecedor.
[/quote]
Oi,
Bom, eu faria da seguinte forma, não sei se é a ideal para o seu caso e nem a mais correta, mas vamos lá:
Cliente, Fornecedor e Vendedor são papeis, portanto eu criaria interfaces representando os métodos de cada um, lembre que você pode ter também constantes nas interfaces caso precise identificar atributos
Pessoa possui os atributos comuns aquela lista de que falou
Ai para usar voce poderia ter algo do tipo
[code]class SuperPessoa extends Pessoa implements Fornecedor, Vendedor, Cliente {
// SuperPessoa possui todos os atributos de Pessoa que devem ser declarados como protected de preferência
// atributos específicos de SuperPessoa
private String nomeDeSuperPessoa;
private int idadeDeSuperPessoa;
// método da interface Cliente, você deve colocar a lógica aqui
public int fazAlgumaCoisaComCliente() {
// TODO
}
// idem para Fornecedor
public boolean fazAlgumaCoisaComFornecedor() {
}
...
}
[/code]
A idéia de uma interface é ser um contrato que define um comportamento o que é o caso de Cliente, Fornecedor e Vendedor
A herança cuida dos casos de especialização, no caso SuperPessoa é um pouco mais do que uma Pessoa
Caso você precise ou ache necessário pode definir um interface básica que todos devem implementar…
Abs