none
Dúvida Programação Orientada a Objetos RRS feed

  • Pergunta

  • Pessal eu sou nova em programação e estou tendo um pouco de dificuldade de compreender o conceito de POO pesquisando na internet encontrei algo do gênero.

    public class Pessoa{
     // Implementação da classe
    }
    
    public class PessoaFisica : Pessoa{
     // Implementação da classe que herda da classe pessoa
    }

    porém encontrei uns vídeos tutoriais ao qual a pessoa se utilizava da seguinte forma.

    public class Pessoa{
      // Implementação da classe
    }
    
    public class PessoaFisica{
      public Pessoa Pessoa {get; set;}
      // Implementação da classe pessoa física
    }
    Qual é a diferença em ambos os casos? E qual forma é mais recomendável usar?


     
    quarta-feira, 3 de fevereiro de 2016 12:51

Respostas

  • Bom dia, no primeiro exemplo...PessoaFisica está herdando de Pessoa, sou seja, tudo que está como public ou protected em Pessoa será acessível em PessoaFisica...exemplo:

    public class Pessoa
    {
       public string Nome {get;set;}
    }
    
    public class PessoaFisica: Pessoa
    {
       
    }
    
    
    PessoaFisica pessoaFisica = new PessoaFisica();
    pessoaFisica.Nome = "Nome";

    já no segundo tem uma propriedade do tipo Pessoa, gerando relacionamento entre as duas classes...

    public class Pessoa
    {
       public string Nome {get;set;}
    }
    
    public class PessoaFisica
    {
       
       public Pessoa Pessoa {get;set;}
    }
    
    //GERARIA ERRO PQ PessoaFisica não herda mais Pessoa
    PessoaFisica pessoaFisica = new PessoaFisica();
    pessoaFisica.Nome = "Nome";//erro aqui
    
    //para acessar o nome, preciso usar a propriedade Pessoa dentro de PessoaFisica
    
    pessoaFisica.Pessoa = new Pessoa();
    pessoaFisica.Pessoa.Nome = "Nome";

    Quando se usa o EF, no primeiro você terá uma ÚNICA tabela PessoaFisica herdando os campos de Pessoa, já no segundo seriam 2 tabelas, Pessoa  e PessoaFisica com relacionamento de chave estrangeira.


    Diego Neves |Analista Desenvolvedor .NET MCP|MS|MCSD|ITIL


    quarta-feira, 3 de fevereiro de 2016 12:59
  • O primeiro caso é uma herança simples ( herança herda o comportamento, ações e eventos de uma classe ).

    No segundo caso é agregação, ou seja, eu estou dentro de PessoaFisica, eu componho, eu faço parte de um PessoaFisica, sendo um outra classe que é um outro objeto.

    No primeiro caso quando a instância de PessoaFisica tem todos os comportamentos da classe Pessoa ativos na memória, 

    já no segundo caso eu posso instânciar PessoaFisica e Pessoa que está dentro não ser instânciada (fica independente).


    Fulvio C

    quarta-feira, 3 de fevereiro de 2016 13:59

Todas as Respostas

  • Bom dia, no primeiro exemplo...PessoaFisica está herdando de Pessoa, sou seja, tudo que está como public ou protected em Pessoa será acessível em PessoaFisica...exemplo:

    public class Pessoa
    {
       public string Nome {get;set;}
    }
    
    public class PessoaFisica: Pessoa
    {
       
    }
    
    
    PessoaFisica pessoaFisica = new PessoaFisica();
    pessoaFisica.Nome = "Nome";

    já no segundo tem uma propriedade do tipo Pessoa, gerando relacionamento entre as duas classes...

    public class Pessoa
    {
       public string Nome {get;set;}
    }
    
    public class PessoaFisica
    {
       
       public Pessoa Pessoa {get;set;}
    }
    
    //GERARIA ERRO PQ PessoaFisica não herda mais Pessoa
    PessoaFisica pessoaFisica = new PessoaFisica();
    pessoaFisica.Nome = "Nome";//erro aqui
    
    //para acessar o nome, preciso usar a propriedade Pessoa dentro de PessoaFisica
    
    pessoaFisica.Pessoa = new Pessoa();
    pessoaFisica.Pessoa.Nome = "Nome";

    Quando se usa o EF, no primeiro você terá uma ÚNICA tabela PessoaFisica herdando os campos de Pessoa, já no segundo seriam 2 tabelas, Pessoa  e PessoaFisica com relacionamento de chave estrangeira.


    Diego Neves |Analista Desenvolvedor .NET MCP|MS|MCSD|ITIL


    quarta-feira, 3 de fevereiro de 2016 12:59
  • No meu caso, eu tenho no meu banco de dados a tabela TBL_Pessoa que implementa coisas em comum entre pessoa física e pessoa jurídica como por exemplo o endereço, daí eu tenho um tabela TBL_PessoaFisica que possui um campo CD_PessoaFisica que é chave primária nesta tabela e ao mesmo tempo chave estrangeira da TBL_Pessoa no campo CD_Pessoa então eu usaria a segunda opção? Ou poderia usar a primeira sendo que ela contém todas as características da TBL_Pessoa + algumas características particulares.
    quarta-feira, 3 de fevereiro de 2016 13:38
  • O primeiro caso é uma herança simples ( herança herda o comportamento, ações e eventos de uma classe ).

    No segundo caso é agregação, ou seja, eu estou dentro de PessoaFisica, eu componho, eu faço parte de um PessoaFisica, sendo um outra classe que é um outro objeto.

    No primeiro caso quando a instância de PessoaFisica tem todos os comportamentos da classe Pessoa ativos na memória, 

    já no segundo caso eu posso instânciar PessoaFisica e Pessoa que está dentro não ser instânciada (fica independente).


    Fulvio C

    quarta-feira, 3 de fevereiro de 2016 13:59
  • Danubia, isso depende muito da regra de negócio da app, eu usaria uma tabela Pessoa e outra PessoaFisica, para não repetir registros como Nome por exemplo, ocasionando aumento de tamanho da base de dados sem motivo relevante.

    Diego Neves |Analista Desenvolvedor .NET MCP|MS|MCSD|ITIL


    quarta-feira, 3 de fevereiro de 2016 14:51
  • Como tu es nova, vai levar tempo pra entender o metodo acima e como usa-lo. O que voce deve aprender e criar classes primeiro.

    o exemplo acima mostra que a pessoa quer ter control sobre a class Pessoa sem tem que herdadar automaticamente todas as propiedades....ele vai escolher que campos usar na class pessoa.


    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 3 de fevereiro de 2016 15:46
    Moderador
  • Obrigado a todos que respondeu... Foi de grande ajuda... Vou continuar estudando....
    quarta-feira, 3 de fevereiro de 2016 16:43