Programação Orientada a Objetos (POO) é um paradigma de programação que utiliza objetos como elementos funcionais na construção de uma solução (Figura 01).

Fonte: Autor.
A POO foi concebida no início da década de 70, a sua origem vem da linguagem Simula (Simula Language), concebida na Noruega na década de 60 e, como o nome indica, foi criada para fazer simulações; entretanto, seu uso alavancou um conceito que até então passava desapercebido pela maioria dos projetistas: a similaridade com o mundo real.
Em POO, um objeto é uma abstração de algum fato ou ente do mundo real, com atributos que representam as suas características e/ou propriedades. Estes objetos são instanciados de uma entidade que pode processar dados e trocar mensagens com outros objetos, encapsulando ou agrupando os atributos, além de prover os métodos que emulam o seu comportamento e/ou atividade. Esta entidade é chamada de classe e consiste em um modelo para a criação de objetos, ou seja, cada objeto é um exemplar de uma classe. Computacionalmente, quando instanciamos um objeto, estamos criando fisicamente uma representação concreta da classe na memória e referenciando sua localização (Figura 02).

Fonte: Autor.
Os programas desenvolvidos em POO são caracterizados em alguns itens essenciais para que toda a lógica e vantagens dessa metodologia possam ser aplicadas a eles. A estrutura da POO tem como base o princípio da abstração e seus pilares são a composição, encapsulamento, herança e polimorfismo (Figura 03).
Fonte: Autor.
O princípio da abstração consiste em observar os comportamentos e estruturas do dia a dia para transformá-los em uma linguagem computacional, em outras palavras, visa abstrair algo do mundo real e transformá-lo em um objeto na programação.
A composição é uma forma de combinar objetos simples com o objetivo de formar objetos mais complexos, ou seja, novos objetos podem ser criados combinados objetos já existentes (Figura 04).
Figura 04 – A classe “Carro” pode ser composta de outros objetos (“Banco”, “Roda”, “Farol” etc).
Fonte: Autor.
O encapsulamento liga os atributos e métodos de uma classe para manter ambos seguros de interferência externa e má utilização. Esse pilar visa a proteção de variáveis importantes e que não devem ser manipuladas diretamente (Figura 05).
Fonte: Autor.
A herança advêm da ideia de reaproveitamento de código fonte, na qual um conjunto de classes com características próprias podem herdar as propriedades de uma classe mestra, porém cada qual com suas peculiaridades (Figura 06).
Figura 06 – Conjunto de veículos. Os objetos “Carro” e “Caminhão” tem características próprias, mas ambos são veículos.
Fonte: Autor.
O polimorfismo é a capacidade de alterar o funcionamento interno de um método herdado de um objeto ancestral quando for necessário que suas ações sejam diferentes da atual predefinida (Figura 07).
Figura 07 – Veículos possuem sistemas de transmissão com os mesmos propósitos, mas que operam de forma singular em cada veículo.
Fonte: Jahobr/Wikipedia.
Referências
- Souza, Marcelo. Um pouco de história (POO). Desenvolvedores, 2010. Disponível em: . Acesso em: <https://techblog.desenvolvedores.net/2010/12/15/um-pouco-de-historia/> 09 set. 2020.