Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera!
To iniciando no mundo da POO e estou com uma duvida que esta me deixando cada vez mais confuso...
Qual é a diferença basica e utilidade das classes "abstract" e "interface"?
Segundo algumas apostilas que li pela net, elas servem para fazer polimorfismo, não sei se isso é verdade...
Desde já, obrigado!
Vlw! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Bem, valeu kra!Sobre a teoria eu ja intendi, basicamente é isso mesmo...A minha duvida é de como utilizar esses tipos de classe...Vlw...
seria tipo PUBLIC e PRIVATEnao exatamente isso, mas tipo issorsss
Bom,pela minha resposta se voce pensar um pouco, ja acha uma utilidade:a Interface nao eh uma classe e sim algo que ajuda voce a organizar o codigo, com ela voce define quais metodos(funcoes,etc) e variaveis a classe deve implementar e depois na classe na qual a interface for implementada voce diz o conteudo dos metodos, eh algo como que pra organizar.classe Abstrata serve, ao meu ver, para poubar linhas de codigos, como no exemplo que eu citei, das classes FORMA, TRIANGULO e TRAPEZIO, a classe FORMA soh vai ser escrita uma unica vez e herdada para as outras ja que vai ser sempre a mesma coisa e o fato de nenhum objeto ser criado a partir dela unicamente eh que a torna uma classe abstrata.Bom, nao tenho 100% de certeza do que escrevi, mesmo porque isso eu estou estudando agora com a ajuda de uns amigos do serviço e do www.php.net :P Restou alguma duvida??[]s Luis Fernando
Agora sim... :) Valeu pela ajuda!Já deu uma clareada nas idéias...Eu tava fuçando na internet e vi um artigo falando que o abstract pode ser usado pra fazer polimorfismo, assim você pode usar um unico metodo que é comum entre todas as classes filhas, para então, dependendo dos dados inputados, se fazer a herança da classe certa, que consegue processar esses dados...Só não sei ainda como fazer isso ainda... :P Valeu pessoal...
Vamos supor o seguinte cenário para entender classes abstratas.
Teremos a classe Pessoa, Pessoa Juridica e Pessoa Fisica.
Concorda comigo que Pessoa vai conter dados comuns a Pessoa Fisica e Pessoa Juridica, mas que esses 2 terão informações diferentes? beleza? Em nosso sistema, por um motivo qualquer de requisito, não faz sentido existir uma pessoa simplesmente como Pessoa, este tem que ser uma Pessoa Fisica ou uma Pessoa Juridica.
Código:
PHP
- private $nome;
- private $login;
- private $senha;
- private $email;
- private $telefone;
-
-
- function incluir() { }
- function excluir() { }
- function alterar() { }
- function ler() { }
- function autenticar() { }
-
-
-
class PessoaFisica extends Pessoa {
- private $cpf;
- private $dtnascimento;
- private $rg;
-
-
-
-
class PessoaJuridica extends Pessoa {
- private $cnpj;
- private $razaosocial;
- private $inscestadual;
-
-
Sendo assim, se você inicializar um objeto desta forma:
PHP
Não será possivel, a seguinte mensagem de erro será exibida:
Fatal error: Cannot instantiate abstract class Pessoa in ... on line XX
Para um funcionamento correto, você teria que inicializar um objeto de PessoaFisica ou de PessoaJuridica, tipo:
PHP
- $pf = new PessoaFisica();
- $pj = new PessoaJuridica();
É isso ai pessoas, uma classe abstrata tem o unico objetivo de não poder ser instanciada. Isto depende unica e exclusivamente da modelagem do projeto.
Hmm intendi...Ela funciona como um encapsulamento de classes, assim impede alguem de instanciar alguns metodos da classe abstrata, é isso?
Artigo excelente recomendado pelo Prog em outro fórum:
http://www.rau-tu.unicamp.br/nou-rau/softw...ument/?down=133
Isso mesmo, a classe abstrata só pode ser extendida.
E como o Prog amostrou como declarar um método opcional:
function incluir() { }
Você também pode declarar um obrigatório:
public abstract function incluir();
Leia o artigo do Pablo Dall'Oglio, bom apetite! =)
Legal com esse seu segundo exemplo todas as classes filhas deverão ter um metodo "incluir", jah no primeiro não...
Agora já dá para eu seguir em frente... ;)
Ahh e muito bom esse artigo, já tive a oportunidade de ler antes e gostei pra caramba, aliás, foi através dele que comecei a pesquisar mais sobre POO no PHP...
Valeu todo mundo! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
Fala cara,olha eu nao manjo muuito de oop em php, mas pelo que venho estudando, eh mais ou menos assim:classe abstrata -> por exemplo uma classe FORMAS, classe TRIANGULO e classe TRAPEZIO. As classes TRIANGULO e TRAPEZIO herdam as caracteriticas da classe FORMAS e nao da pra se criar um objeto da classe FORMAS soh por exemplo, do que eu li e do que meu amigo Kino explicou pra mim, uma classe abstrata eh basicamente isso, algo como uma classe generica, que serve pra outras mas nenhum objeto pode ser criado apartir dela...interface-> sobre interface pode ser lido aqui: http://www.php.net/manual/pt_BR/language.oop5.interfaces.php . Mais ou menos como pra que organizar o code, uma interface serve pra voce listar quais metodos existem e quais variaveis vao ser atribuidas
E é isso, le mais no link que voce vai intender melhor do que eu tentando explicar...se puis algo errado alguem corrige por favor...[]sluis