"Olá Amigo! Hoje vou abrir um mundo novo e interessante para sua visão. Estou falando de Programação Orientada a Objetos (POO) . Você já conheceu classes e objetos. Hoje você vai aprender mais sobre eles, muito mais."

Começaremos com os quatro pilares da POO. Eles são abstração, encapsulamento, herança e polimorfismo. (Costumava haver três, mas a abstração foi adicionada mais tarde)

1) Abstração.

Um bom exemplo de abstração na vida real são as descrições de cargos em uma empresa. Um título de trabalho é uma coisa, mas seus deveres são uma questão totalmente diferente.

Imagine que você está criando o organograma de sua futura empresa. Você pode dividir as funções de uma secretária, distribuindo-as por vários outros cargos. Você pode dividir o trabalho do CEO em vários cargos separados: diretor financeiro, diretor de tecnologia, diretor de marketing, diretor de recursos humanos. Ou você pode combinar os cargos de gerente de escritório e recrutador em um.

Suponha que você crie nomes para os cargos em sua empresa e depois "distribua" as responsabilidades para esses cargos. Isso é abstração - dividir algo grande e monolítico em várias partes pequenas.

OOP: princípios básicos - 1

Do ponto de vista do programador, a abstração é a divisão adequada de um programa em objetos.

Um programa grande geralmente pode ser representado como objetos interativos de uma dúzia de maneiras diferentes. A abstração permite que você escolha as principais características de um objeto e omita qualquer coisa menos importante.

A abstração é como uma estratégia militar. Se você escolher a estratégia errada, nenhuma tática engenhosa salvará o dia.

2) Encapsulamento.

O encapsulamento visa melhorar a interação entre os objetos, simplificando-os.

OOP: princípios básicos - 2

A melhor maneira de simplificar algo é esconder qualquer coisa complicada de quem não precisa saber. Por exemplo, se você se sentasse atrás dos controles do piloto de um jato da Boeing, levaria muito tempo para entender como eles funcionam:

OOP: princípios básicos - 3

Por outro lado, tudo parece mais simples para os passageiros do avião: eles compram uma passagem e embarcam no avião, que decola e pousa. Pode voar facilmente de continente a continente, sabendo apenas «comprar um bilhete» e «embarcar num avião». Não vemos nenhuma complexidade relacionada à preparação do avião para voo, decolagem, pouso e várias situações de emergência em potencial. E não mencionamos navegação por satélite, piloto automático e centros de controle de tráfego aéreo. Isso simplifica nossa vida.

Em termos de programação, o encapsulamento é «ocultar a implementação». Eu gosto dessa definição. Nossa classe pode conter centenas de métodos e implementar comportamentos altamente complexos em várias situações. Mas podemos esconder todos os seus métodos de olhos curiosos (marcando-os como « privados »), deixando apenas dois ou três métodos para interação com outras classes (marcando-os como « públicos »). Em seguida, todas as outras classes em nosso programa verão apenas - e chamarão - esses poucos métodos nesta classe . Toda a complexidade da classe estará escondida no interior, assim como o cockpit é mantido longe da visão dos passageiros felizes.

3) Herança.

Herança é um conceito na programação e na vida real. Na programação, a herança é um relacionamento especial entre duas classes. Mas a herança na vida real é muito mais interessante.

Se precisarmos criar algo na vida real, temos duas opções:

1) fazer o que precisamos do zero e gastar muito tempo e esforço fazendo isso.

2) fazer o que precisamos usando coisas que já existem.

A melhor estratégia é esta: pegamos uma boa solução existente, retrabalhamos e ajustamos para atender às nossas necessidades e então a usamos.

Considere, a evolução humana. Se rastrearmos seu início até o início da vida no planeta, veremos que bilhões de anos se passaram. Mas se pensarmos nos humanos começando com os macacos, então apenas alguns milhões de anos se passaram. Criar algo do zero leva mais tempo. Muito mais tempo.

Da mesma forma, na programação podemos criar uma classe baseada em outra. A nova classe se torna descendente (herdeira) de uma classe existente. Isso é super útil quando você já tem uma classe que contém 80-90% dos dados e métodos necessários. Simplesmente declaramos uma classe adequada como pai de nossa nova classe. Todos os dados e métodos da classe pai automaticamente se tornam parte da nova classe. Conveniente, certo?

4) Polimorfismo.

Polimorfismo é um conceito de programação que descreve a situação em que diferentes implementações estão ocultas atrás da mesma interface. Para encontrar um análogo na vida real, podemos observar o processo de dirigir um carro.

Se uma pessoa pode dirigir um caminhão, ela também pode ser colocada ao volante de uma ambulância ou de um carro esporte. Uma pessoa pode dirigir um carro independentemente do tipo de carro, porque todos têm a mesma interface de controle: volante, pedais e câmbio. Os carros são organizados de maneira diferente por dentro, mas todos compartilham a mesma interface de controle.

Voltando à programação, o polimorfismo nos permite interagir com objetos de diferentes classes (geralmente com um ancestral comum) da mesma maneira. O significado disso não pode ser subestimado. Torna-se mais importante à medida que o programa cresce.

OOP é princípios. Leis de programação. Cada um deles nos restringe de alguma forma, mas em troca oferece enormes vantagens à medida que os programas crescem. Os quatro princípios da POO são como as quatro pernas de uma cadeira. Se você retirar apenas um deles, todo o sistema se tornará instável.