Os 4 pilares da Programação Orientada a Objetos
Os 4 pilares da Programação Orientada a Objetos
Para entender a POO (Programação Orientada a Objetos) precisamos compreender seus 4 pilares fundamentais que são:
- Abstração
- Encapsulamento
- Herança
- Polimorfismo
Abstração
Abstração significa "esconder" partes da implementação do objeto expondo apenas uma interface simples para seu uso. Pense por exemplo num forno de micro-ondas, você não precisa entender toda a complexidade de como os componentes internos trabalham para gerar as ondas e produzir calor, você quer apenas apertar um ou dois botões e ter uma refeição quente pra comer. Toda essa complexidade são detalhes de implementação, você não precisa conhecê-los.
Da mesma forma seu objeto deve ter uma interface simples e amigável, deixando suas partes complexas ou detalhes de implementação protegidos do mundo exterior. Assim mudanças feitas internamente no nível da implementação não irão afetar sua interface pública e aqueles que utilizarem o objeto.
Encapsulamento
Encapsulamento se refere à construção do objeto de modo a proteger o acesso direto a seus dados internos. Ao encapsularmos um objeto estamos agrupando propriedades e métodos que estão diretamente relacionados dentro de um mesmo objeto, permitindo que essas propriedades sejam acessadas apenas através de métodos públicos. Desta forma tratamos de questões importantes como segurança e confiabilidade do estado do objeto.
Herança
A Herança é uma forma de eliminar repetição de código onde, como o próprio nome sugere, um objeto pode herdar características (ou seja, propriedades e métodos) de outra classe, sem a necessidade de se reescrever essas mesmas características.
Para um exemplo prático, pense nos objetos clt
e estagiario
. O objeto clt poderia ter métodos exclusívos como calculo_de_13
e fgts
, mas ambos compartilhariam propriedades como salario
e data_de_inicio
, e métodos como receber_salario
ou calcular_ferias
e não faria sentido implementar essas mesmas propriedades e métodos em ambas as classes, mas sim inserir essas características em uma classe pai como por exemplo funcionario
.
Polimorfismo
Poli significa muitas e Morphos significa forma, então Polimorfismo significa muitas formas. Em POO Polimorfismo é caracterizado quando duas ou mais classes possuem métodos com o mesmo nome, mas podendo ter implementações diferentes. Assim, é possível utilizar qualquer objeto que implemente o mesmo método sem nos preocuparmos com o tipo do objeto. Na prática isso nos possibilita remover do nosso código diversos if statements ou switch cases.
No exemplo dado acima, utilizando polimorfismo podemos implementar o método calcular_ferias
em cada um dos objetos clt
e estagiario
, sendo que cada um desses métodos pode ter uma implementação diferente.
Resumo
Então temos como vantagens na utilização da Programação Orientada a Objetos:
Com a Abstração nós escondemos os detalhes e o complexidade e expomos apenas o essencial, desta forma nós reduzimos a complexidade e reduzimos o impacto das mudanças feitas no código.
redução da complexidade + redução do impácto das mudanças
Usando Encapsulamento nós agrupamos propriedades e métodos relacionados e desta forma nós reduzimos a complexidade e podemos reutilizar esses objetos em outras partes do nosso projeto aumentando a reusabilidade.
redução da complexidade + aumento da reusabilidade
Com a Herança nós eliminamos repetição de código.
eliminação de repetição de código
Usando Polimorfismo nós podemos remover if/switch statements.
remoção de código desnecessários
Fonte: https://www.sergiotoledo.com.br/artigos/os-4-pilares-da-programacao-orientada-a-objetos