Hm.. eu vejo estensões de classes abstratas como uma especificação de certa classe, com a obrigação de implementação de certos aspectos.
No exemplo de Pessoa, ambas PessoaFisica e PessoaJuridica tem pouquíssimo realmente em comum, mas se for dar um exemplo: - Como atributos: "nome" e "registro" (CPF OU CNPJ), que estariam na classe Pessoa, pois todo tipo de pessoa irá possuir tais atributos. - Como método concreto: PessoaFisica e PessoaJuridica terão fim em algum momento, por isso, poderia criar o método "encerrar", que colocaria uma data de término (ou morte), motivo, e etc. Talvez esse método não precisasse se comportar de maneira diferente para PessoaFisica e Juridica, e por isso estaria implementado diretamente na classe Pessoa. - Como método abstrato: Pessoa deve ser cobrada, mas cada tipo de Pessoa será cobrada de uma maneira diferente, por isso, colocaria o método cobrar abstrato na classe Pessoa, obrigando as classes que a estendem a implementar a forma como tal pessoa será cobrada. - Como método específico: PessoaFisica anda, PessoaJuridica não, sendo assim, o método andar só poderia existir na classe PessoaFisica, e nunca na classe Pessoa. Deu pra entender? Eu, ao contrário de você, sou muito pior em citar exemplos teóricos do que práticos, acabei me bitolando na prática.. ;D 2010/10/15 Ademir C Gabardo <[email protected]> > Foi a mesma conclusão a que cheguei. > Lembrando que esse é apenas um exemplo didático, uma tentativa de > compreender como poderia ser feita a abstração de classes na estrutura do > CodeIgniter. > > Talvez (e muito provavelmente) existam exemplos mais práticos e simples de > aplicar, mas a faculdade deixa a gente meio bitolado as vezes. > Falou em abstração de classe sempre lembra da classe pessoa, exemplo > recorrente. > > > > Eu estou tentando compreender melhor esses conceitos de abstração. > > Na prática, eu crio uma classe para pessoa física e outra para jurídica. > Não costumo misturar as duas. > > > > Galera, opiniões? Críticas? Mais dúvidas? Novas sugestões? > > > > Att > Ademir > > > > > > *De:* [email protected] [mailto: > [email protected]] *Em nome de *Eric Saboia > *Enviada em:* sexta-feira, 15 de outubro de 2010 11:33 > *Para:* CodeIgniter Brasil > *Assunto:* Re: [CodeIgniter] Duvida sobre abstração de Classe > > > > Pensando bem, apesar de não fazer sentido pra mim fazer tal coisa em um > Controller, a solução seria a mesma pra Models: > > abstract class Pessoa extends Model { > > } > > class PessoaFisica extends Pessoa { > > } > > Dessa forma, PessoaFisica herdaria todos os metodos de Model, além de > herdar os métodos não abstratos de Pessoa, e seria obrigada a implementar os > métodos abstratos de Pessoa > > 2010/10/15 Eric Saboia <[email protected]> > > Nem entendi seu problema, por isso fica difícil ajudar. > > Não entendo pra que você quer estender uma classe abstrata em controllers, > no seu exemplo de Pessoas, não seria isso uma entidade, e portanto seria > feito nos Models? > > 2010/10/4 Julio Fagundes <[email protected]> > > > > Pois é! tipo em cascata. > > Nessa caso se a class abstrata herdar ao controller, acho que matou a > charada não? > > Sds > Julio Fagundes > > > Vinicius Cruz escreveu: > > Quando diz que não suporta herança múltipla, senão me engano o C suporta, > seria fazer algo assim: > > class teste extends teste1, teste3 > > Portanto, é válida a class abstrata herdar, e a concreta herdar a abstrata. > > Att, > Vinicius Cruz > http://twitter.com/vinaocruz > http://www.zime.com.br/ > > Em 4 de outubro de 2010 17:21, Ademir C Gabardo < > [email protected] <mailto:[email protected]>> escreveu: > > > > Viajar não viajou, mas o problema é que o PHP Não tem suporte a > Herança Multipla, então se ele já herda as propriedades do > Controlle não poderá herdar novamente da classe abstrata, eis o > dilema. > Alguma sugestão? > Att > Ademir > > ----- Original Message ----- > > *From:* Vinicius Cruz <mailto:[email protected]> > *To:* CodeIgniter Brasil <mailto:[email protected]> > *Sent:* Monday, October 04, 2010 5:11 PM > *Subject:* Re: [CodeIgniter]Duvida sobre abstração de Classe > > No caso, seria adicionar na class abstrata a herança do > Controller? Consequentemente, teriamos as classes concretas > com os métodos herdados da classe abstratas e os métodos do > controller principal. > > Viajei?! > > Att, > Vinicius Cruz > http://twitter.com/vinaocruz > http://www.zime.com.br/ > > > Em 4 de outubro de 2010 16:51, Ademir C Gabardo > > <[email protected] <mailto:[email protected]>> > > > escreveu: > > Galera, estou escrevendo um artigo que servirá como base > para um material para novatos em OO + PHP5 sobre abstração > de classes em PHP e o uso dos Magic Methods do PHP 5. > Para isso, estou usando como exemplo a abstração da classe > pessoa. > Mas aí surgiu uma dúvida cruel. > Imaginem o modelinho. > //Abstrata > class Pessoa(){ > } > //Concreta > class PessoaFisica extends Pessoa(){ > } > //Concreta > class PessoaJuridica extends Pessoa(){ > } > Como vocês fariam isso no CodeIgniter uma vez que > os > controladores já herdam do controller principal? > > Fiquei imaginando um modo de fazer com Interface. > Alguma dica dos membros da lista? > Abraços > Ademir Gabardo. > > _______________________________________________ > > [email protected] <mailto:[email protected]> > > > http://www.codeigniter.com.br > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > > > ------------------------------------------------------------------------ > _______________________________________________ > > [email protected] <mailto:[email protected]> > > > http://www.codeigniter.com.br > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > > _______________________________________________ > > [email protected] <mailto:[email protected]> > > > http://www.codeigniter.com.br > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > > ------------------------------------------------------------------------ > > _______________________________________________ > [email protected] > http://www.codeigniter.com.br > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > > > > _______________________________________________ > [email protected] > http://www.codeigniter.com.br > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > > > > -- > Eric Saboia - eric.saboia.org > PHP Zend Certified Engineer > > > > > -- > Eric Saboia - eric.saboia.org > PHP Zend Certified Engineer > > _______________________________________________ > [email protected] > http://www.codeigniter.com.br > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > --------------------------- > Oportunidade de negócio > http://www.franquiasargohost.net > --------------------------- > > -- Eric Saboia - eric.saboia.org PHP Zend Certified Engineer
_______________________________________________ [email protected] http://www.codeigniter.com.br http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br --------------------------- Oportunidade de negócio http://www.franquiasargohost.net ---------------------------

