Curso de PHP Orientado a Objetos – Parte 5

Slide1Quinto artigo do curso de PHP Orientado a Objetos. Neste artigo entenderemos o conceito de abstração. Veremos na prática como se aplicam as classes abstratas, finais, métodos abstratos e métodos finais.

Este é quinto artigo do Curso de PHP Orientado a Objetos.

Para conhecer as demais partes, clique aqui.

Ao final deste artigo, você será capaz de:
  • Entender o conceito de Abstração
  • Criar Classes Abstratas
  • Criar Classes Finais
  • Criar Métodos Abstratos
  • Criar Métodos Finais

Abstração

Podemos considerar abstração uma forma de separar mentalmente, simplificar ou mesmo considerar isoladamente. Um sistema orientado a objetos não deve ser visto como uma única peça, devamos separá-lo em partes, concentrando nas peças mais importantes e ignorando os detalhes (em primeiro momento) para que possamos construir peças bem-definidas que possam ser reaproveitadas mais tarde, formando uma estrutura hierárquica.
Sempre que estiver desenvolvendo um sistema OO, você deve aplicar este conceito, abstraia ao máximo, concentre-se em separar o sistema em módulos.

Classes Abstratas e Métodos Abstratos

Seguindo o conceito de abstração que acabamos de expor, encontraremos classes que irão servir como classes estruturais ou seja, que estão na nossa hierarquia de classes para servirem de base para outras classes, mas que nunca serão instanciadas em objetos, somente suas filhas. Neste contexto, é interessante definir está classe como abstrata, de modo que ninguém consiga instancia-la.
A grosso modo, classe abstrata nada mais é do que um modelo comum, que deve ser seguido pelas classes filhas, nunca é instanciado em objeto ou seja, não existe isoladamente.

Métodos abstratos possuem uma definição semelhante, não podem ser implementados nas classes abstratas, deve ser definido somente a assinatura do método e deve obrigatoriamente, ser implementado na integra pela classe filha que o estender. Em suma, um método abstrato é definido em uma classe abstrata, mas deve conter somente sua assinatura, o “corpo” do método fica por conta das classes filhas.

 

Com exemplo fica ainda mais fácil de entender:

 


Temos nessa classe todas as características comuns de um animal. Todo animal possui um nome e todo animal possui uma idade, todo animal fala (o cachorro faz Au Au, o gato faz Miau). Perceba que o método Falar não possui nada implementado, além disso, a definição do método é precedida pela palavra abstract, o que significa que o método deve ser implementado em TODAS as classes que estenderem a classe Animal.

Estamos levando para o mundo OO uma definição que temos no mundo real, veja: Um cachorro, um gato, um cavalo são animais, cada um com suas características especificas, mas todos são animais, todos possuem nome, idade e falam. Não faria sentido criar o objeto Animal.

Se tentarmos instanciar a classe animal teríamos o seguinte erro:

Fatal error: cannot instantiate abstract class Animal in animal.class.php on line 5

Obviamente agora temos que criar uma subclasse de Animal, chamaremos de Cachorro. 


Agora podemos instanciar a classe Cachorro sem problemas:

Da mesma forma que criamos a classe Cachorro, poderíamos criar a classe Gato, Cavalo, Pato, todas herdando da classe Animal.

Classes Finais

Classes finais podem ser definidas como classes que não podem ser estendidas ou seja, não pode ser uma superclasse. 

Uma classe é definida como final quando colocamos a palavra reservada final antes da palavra class.

A classe cachorro definida aqui, não pode ser herdada por nenhuma outra classe.

Métodos finais

Assim como classes finais, um método final não pode ser estendido e obviamente não pode ser abstrato, pois métodos abstratos foram feitos para serem estendidos e declarados na classe filha.

Para declarar um método como final basta usar a palavra reservada final antes da palavra function.

Terminamos assim mais um módulo do curso.

No próximo artigo falaremos sobre o encapsulamento.

Utilize o espaço de comentários para tirar suas dúvidas.


13 Responses to Curso de PHP Orientado a Objetos – Parte 5

  1. Estevam disse:

    Parabéns pelo curso estou nesse post e aprendendo bastante sobre OO. Obrigado por compartilhar seus conhecimentos!!!

  2. Ediaimo disse:

    Só me tire uma dúvida, a subclasse de Animal, Cachorro deve ser criada no mesmo arquivo da Class Animal? Ou eu posso criar um novo arquivo e criar esse subclasse?

    • Leandro disse:

      Isso você escolhe. É uma questão de organização. Eu costumo separar.
      Obrigado pelo comentário.

    • rafael moura disse:

      O correto é vc criar outro arquivo para representar as subclasses, não sei se estou falando besteira mas não sei se pode criar até 2 classes em um arquivo, como estou aprendendo tbm vou tirar essa dúvida, se tem alguém mais experiente ai que possa dar esse up ai, mas a principio amigo, subclasses crie sempre em arquivos separados, assim cm o leandro, tbm crio os meus separados tbm

  3. Marlene disse:

    O que faço com classes e métodos abstratos não posso fazer simplesmente com a aplicação pura e simples de herança? Sem o uso de “abstract”, criação de classe-pai, classe-filha, etc? Se sim, por que devo usar “classes e métodos abstratos”? É opcional? Quando é recomendado expressamente seu uso?

    Nota: estou começando meus estudos de PHP Orientado a Objetos e encontrei o seu site. Parabéns pela iniciativa e pela qualidade do material. Deveria continuar com as “aulas” no site, vejo que já faz um tempo que não posta material novo – continue que você está no caminho certo.

  4. Estou começando a estudar OO, e já estou me sentindo quase no nivel 5, hehe

    vlw cara, Deus te abenço mais e mais!

  5. Jéssica disse:

    Excelente Conteúdo muitíssimo obrigada Leandro! acho q se eu não tivesse encontrado esse conteúdo
    nunca iria aprender tão bem POO! :)

  6. João Rubens disse:

    Obrigado por compartilhar seu conhecimento assim vc ajuda as pessoas que estao começando e adiqui mais e mais conhecimeto com essa sua atitudo adimirado pelo seu talento e paciencia obrigado de novo ate agora nao tive nenhuma duvida, muito bem esplicado valeu :)

  7. Douglas disse:

    Primeiramente, parabéns pelo ótimo conteúdo e pela iniciativa.

    Tenho uma dúvida quanto aos métodos finais: Se eu tenho uma classe comum X, não final, mas tenho um método final x nela e crio uma classe filha Y para essa classe X, o método x não poderá ser herdado por Y ou apenas não poderá ser sobrescrito em Y?

    Mais uma coisa, você poderia citar um exemplo onde seria necessário um método final numa classe comum? Pois eu não consegui imaginar uma classe filha que não pudesse realizar uma ação da classe pai numa situação do mundo real, como nos animais, por exemplo.

    Desde já agradeço.

  8. erick leandro disse:

    Cara muito bom seus tutoriais, está me ajudando bastante, continue assim !

  9. Yurisebio disse:

    Estou aprendendo muito com seus totoriais agradeceria se continuaces com os tutoriais.

    Muita força e muito obrigado cara!

  10. Fernando disse:

    Olá estou aprendendo bastante com as suas aulas, mas me surgiu uma dúvida: Na pratica qual a necessidade de usar uma classe abstrata? Não é mais fácil fazer uma simples herança?

Deixe uma resposta para Fernando Cancelar resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *