Programação Orientada a Objetos para iniciantes - Analogia com a vida real
Abstração, encapsulamento, polimorfismo... tudo pode parecer muito difícil no início, e realmente é dificil absorver de primeira o que cada conceito significa. Quando trabalhamos com linguagens orientadas a objetos, como Java e C#, esses conceitos são essenciais para o uso correto da linguagem. Nesse artigo eu vou tentar simplificar os 4 pilares desse paradigma de programação fazendo uma analogia com alguns objetos da vida real.
Herança
Imagine que você tenha que criar uma classe para representar um cachorro e um humano. Você poderia criar uma classe para cada e adicionar suas características, como andar, correr, pular... mas você vai adicionar isso em cada uma das classes? Se tivesse que ser criado uma classe Leão por exemplo, teria que adicionar cada característica novamente? Bom, você até pode, mas acredito que você não quer ter todo esse trabalho. É aí que a herança de classes entra em jogo. Todos os 3 podem herdar características de uma classe pai, Mamífero por exemplo. E podemos ter ainda uma classe acima: Animal. Daí cada grupo de animais como mamíferos, aves e répteis herdariam certas características da classe superior Animal, e teriam as suas próprias.
Abstração
Um celular: ele pode fazer muitas coisas, como fazer uma ligação, tirar fotos e jogar jogos. Ele não nos mostra o processo de como isso é feito. Ele abstrai a implementação dessas funcionalidades, para que a possamos focar em tirar a foto ou ligar para alguém. Uma classe que usa um método externo não deve se atentar aos detalhes da implementação desse método, deve apenas usá-lo.
Encapsulamento
Encapsulamento é o conceito de proteger os atributos de um objeto, removendo o acesso externo à propriedades que não deveriam ser expostas. Portanto, devemos sempre tornar privado atributos e métodos que não precisem ser acessados do lado de fora do objeto, evitando o "vazamento de escopo".
Uma empresa: ela pode ter vários departamentos: o departamento de RH, departamento de marketing e outro de finanças. Todos esses departamentos formam uma empresa. O departamento de RH e de finanças, que lidam com informações sensíveis que não precisam ser conhecidos externamente, são comparáveis aos métodos e atributos privados de uma classe. Enquanto o de marketing, que precisa promover e comunicar a imagem da empresa, são mais comparáveis aos métodos e atributos públicos.
Polimorfismo
Polimorfismo significa "ocorrer de diferentes formas". Ex: Uma classe Aparelho define um método tocarMusica(). A partir daí, cada classe que extender Aparelho (herança), pode definir sua própria implementação do método. Ou seja, cada classe "filha" implementa como tocarMusica() deve funcionar para si mesma.
Uma mulher: ela pode ser muitas coisas: uma mãe, uma estudante, uma escritora. Uma mulher pode assumir diferentes papéis
Conclusão
Espero que isso tenha simplificado os 4 pilares desse tão falado paradigma. Entendê-los ajuda a tirar o maior potencial das linguagens orientadas a objetos e o levam a escrever um código mais limpo e robusto!