Polimorfismo com classe pai abstrata, como fazer uma list ou associacao?
-
16 Januari 2012 13:25
estou desenvolvendo um controle de estoque e tem as seguintes classes:
pessoa - classe pai(abstrata)
fisico - filho
juridico - filho
A questao é, se for fazer uma associacao eu devo fazer na classe filha? ja que nao posso instanciar uma classe pai.
se eu for fazer uma list, tenho que fazer na classe filha também?
me desculpem mais comecei a mecher com OO a pouco tempo e fico em duvidas na hora de programar.
Semua Balasan
-
16 Januari 2012 15:32
Olá Sandman,
Se vc for fazer uma associação vc deve avaliar a qual contexto pertence a esta associação.
Por exemplo: se em seu sistema vc tiver uma classe chamada contas a pagar, provavelmente esta classe deverá fazer uma referência a uma pessoa juridica, pois vc irá possivelmente efetuar um pagamento a uma empresa. Mas, se vc tiver que fazer o disparo de um e-mail com propagandas, então talvez vc queira disparar a ambos, neste caso vc deve fazer o disparo desse e-mail para todas as entidades que possuem referência a pessoa, indiferente de serem pessoas físicas ou juridicas.
Em suma, quando seu contexto contiver regras próprias para uma entidade em específico, então vc deve fazer uma associação a essa classe em específico. Caso o comportamento seja genérico, sendo executado o mesmo para todas as classes, então vc deve fazer uma associação a classe que é comum a todas.
No caso da lista a mesma coisa, dependo do conteúdo que deve ser armazenado na lista, então o tipo de dados será influenciado.
Vou postar alguns exemplos de código que podem ajudá-lo.
abstract class Pessoa { public abstract void FuncaoCompartilhada(); public void FazAlgo() { } } class Fisico : Pessoa { public void FuncaoRestritaPessoaFisica() { } public override void FuncaoCompartilhada() { } } class Juridico : Pessoa { public void FuncaoRestritaPessoaJuridica() { } public override void FuncaoCompartilhada() { } }
List<Pessoa> pessoas = new List<Pessoa>(); pessoas.Add(new Juridico()); pessoas.Add(new Juridico()); pessoas.Add(new Fisico()); pessoas.Add(new Fisico());
List<Juridico> juridicos = new List<Juridico>(); juridicos.Add(new Juridico()); List<Fisico> fisicos = new List<Fisico>(); fisicos.Add(new Fisico());
Pessoa pessoa = null; pessoa = new Juridico(); pessoa = new Fisico();
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Ditandai sebagai Jawaban oleh Gustavo Vieira Akatsu 16 Januari 2012 15:41
-
16 Januari 2012 15:41
obrigado Fernando... deu uma luz na minha cabeca...
valeu
Gustavo Vieira Akatsu, Analista de Sistemas