Programação Orientada a Objetos (POO)
A Programação Orientada a Objetos (POO) é um paradigma ou estilo de programação que nos ajuda a trabalhar com classes e objetos para criar vários objetos de uma única classe e assim reutilizar código.
Qual é a diferença entre uma classe e um objeto?
Uma classe é um modelo onde atribuímos as propriedades e métodos dos objetos que queremos criar. Por sua vez, propriedades são as características descritas de um objeto. Por exemplo, se quisermos criar objetos do tipo animal, as propriedades seriam seu nome e idade. Métodos são o comportamento que atribuímos ao objeto. Seguindo o exemplo anterior, que agora chamaremos de classe Animal, um método poderia ser comer e caminhar.
Dito isto, uma classe não é uma entidade real. Para que a classe realize uma ação ou execute o que está dentro dela, precisamos instanciá-la e assim criar objetos.
Então um objeto é a entidade como tal, é algo real que já podemos usar em nosso programa.
Vejamos um exemplo:
O objetivo de uma classe Animal é criar vários objetos com a mesma classe. Por exemplo, nesta classe poderíamos criar um objeto cachorro, gato, pato ou galinha (entre outros), onde as informações de cada objeto são diferentes, mas sempre utilizando os atributos e métodos da classe.
Criando a classe Animal usando PHP
Depois que a classe for criada, precisamos gerar os objetos. Para isso, precisamos instanciar a classe, ou seja, chamar a classe e utilizar seus atributos e métodos para cada objeto.
O operador new permite criar uma instância de um tipo de objeto como a classe Animal. Com base nisso, temos 2 objetos que são do tipo Animal: os objetos cachorro e gato.
Método Construtor
O construtor é um método que nos permite inicializar um objeto, ou seja, uma vez criada uma instância de uma classe, podemos enviar a informação do objeto que desejamos ou enviar informação estática de um objeto pré-determinado.
Em algumas linguagens de programação, o construtor tende a ser um método que possui o mesmo nome da classe, mas em PHP declararemos o método como __construct.
Continuando com o exemplo da classe Animal, teremos um método construtor e solicitaremos as informações do objeto da instância da classe.
No método construtor atribuímos dois parâmetros para receber as informações do objeto e esses valores serão referentes a cada atributo. Quando chamamos os atributos dentro da classe, usamos this.
This refere-se aos atributos e métodos da classe.
Ao instanciarmos a classe, temos que inicializar o objeto enviando os 2 argumentos que o construtor pede: nome e edade.
Pilares da Programação Orientada a Objetos
Na Programação Orientada a Objetos, temos quatro pilares fundamentais que são a base para a criação de nossas classes e objetos: abstração, encapsulamento, herança e polimorfismo.
Abstração
Isso nos ajuda a pensar e identificar quais atributos e métodos precisaremos para criar nossa classe. Embora os objetos possam ter muitas características e comportamentos, no processo de abstração extraímos apenas o que necessitamos para funcionar.
Suponha que tenhamos que fazer um programa com informações de alunos de uma instituição. Poderíamos levar em conta que os atributos da classe Estudante seriam: nome, telefone, endereço, RG, seção e instituição, enquanto os métodos podem ser visualizar seu perfil, registrar-se e atualizar.
Encapsulamento
É a forma como podemos restringir o acesso a determinados atributos e métodos de uma classe para fornecer maior segurança. Para entender isso, devemos saber que existem modificadores de acesso que são public, private e protected.
Quando colocamos uma propriedade ou método public, atribuímos que pode ser acessível tanto dentro como fora da turma, bem como para turmas filhas. Se usarmos protected, Atribuímos que ele só pode ser acessível dentro da classe e das classes filhas. E por ultimo, private Isso nos diz que só pode ser acessível dentro da mesma classe.
Herança
Indica que podemos ter uma classe base (ou pai) e classes filhas que dependem dela. O objetivo da herança é reutilizar as propriedades e métodos da classe pai e, assim, evitar a substituição de muito código nas classes. Normalmente, quando usamos herança, a palavra reservada extends é usada para atribuir que uma determinada classe estende outra.
Continuando com o exemplo de informações do aluno, além de ter uma turma Estudante, você também tem uma turma Professor. Ambos podem compartilhar propriedades e métodos como nome, endereço, telefone, email, etc. Então, para não repetir propriedades ou métodos que determinadas classes compartilham, é melhor criar uma classe extra, a classe Pessoa, a partir da qual as demais se estendem e que facilita o reaproveitamento de seu código.
Polimorfismo
Refere-se a quando um objeto pode mudar sua forma, ou seja, podemos sobrescrever um método já existente de uma classe e alterar seu comportamento para outro objeto. O polimorfismo pode ser realizado se tivermos herança pois, com isso, reaproveitamos métodos que já possuem um comportamento definido pelo pai. No entanto, se você quiser alterar esse comportamento em sua classe filha, substitua o método conforme ele é chamado e modifique seu comportamento.
Um dos exemplos mais comuns é o som dos animais. Suponha que temos a classe Animal e duas classes filhas: Gato e Cachorro. Ambos herdam o método fazersom(). Agora, como estamos falando de um animal diferente, o som também é diferente. Portanto, cada classe filha substitui o método e altera seu comportamento.
O que são classes abstratas?
Outro tópico relevante em Programação Orientada a Objetos são as classes abstratas, que servem apenas para serem herdadas. Ou seja: com uma classe abstrata não podemos criar um objeto ou instanciá-lo, mas apenas nos ajuda a herdá-los em outras classes e assim reutilizar seu código.
Para declarar uma classe como abstrata, precisamos atribuir a palavra reservada abstract class e deve ter, no mínimo, um método abstrato.
Vejamos um exemplo com PHP:
No nosso exemplo animal, cada animal tem seu som, certo? Portanto, podemos criar uma classe pai Animal com seu método make sound. Portanto, exigimos classes filhas como Cachorro e Gato.
Primeiro, criamos a classe abstrata com o método abstrato. Quando atribuímos um método abstrato, significa que a classe abstrata não definirá seu comportamento, mas sim as classes que herdarão o método.
A seguir, criamos as classes filhas. O interessante quando você trabalha com classes abstratas é que quando os métodos abstratos que você atribui são estendidos das subclasses, eles serão obrigatórios para elas, já que as filhas terão que definir o comportamento do método.
Neste exemplo não vimos apenas como usar uma classe abstrata, mas também aplicamos os pilares de herança e polimorfismo. Com herança, usamos a palavra reservada extends para as classes Cachorro e Gato que podem estender a classe Animal e, no caso do polimorfismo, aprendemos que em cada classe filha sobrescrevemos o método fazersom() mas com comportamento diferente.
Espero que esta informação seja útil e lembre-se de continuar praticando. Sucesso!
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.