A Programação Orientada a Objetos (POO) é um paradigma de programação que utiliza a abstração para criar modelos baseados no mundo real. Ela utiliza várias técnicas de programação anteriores, incluindo herança, polimorfismo, abstração e encapsulamento. Hoje, muitas linguagens de programação populares (como Java, JavaScript, C#, C++, Python, PHP, Ruby e Objective-C) suportam a programação orientada a objetos (OOP).
Os conceitos básicos da POO são:
Objetos
Objetos são uma instância de uma classe onde a classe pode ser vista como um blueprint enquanto os objetos são uma cópia do blueprint. Por exemplo, se a classe é um modelo de carro, então um objeto seria uma Ferrari, outro objeto seria um BMW, etc. Os objetos são compostos por estados e comportamentos.
Classes
Uma classe é um blueprint ou um conjunto de instruções para criar um objeto específico. Ela define as variáveis e os métodos (funções) que o objeto criado a partir da classe irá conter. Por exemplo, a classe Carro poderia incluir variáveis como modelo, cor, ano e métodos como dirigir, parar, etc.
Herança
A herança é um mecanismo que permite que uma classe herde propriedades e comportamentos de uma classe pai. Isso ajuda a promover a reutilização de código e a lógica de negócios. Por exemplo, se tivermos uma classe Carro com propriedades como cor e métodos como parar, e queremos criar uma nova classe Ferrari, podemos fazer a Ferrari herdar todas as propriedades e métodos da classe Carro e adicionar apenas as propriedades e métodos que são únicos para a Ferrari.
Polimorfismo
O polimorfismo é o princípio pelo qual podemos usar uma única interface para representar diferentes tipos de coisas. Um exemplo clássico de polimorfismo é a função draw em diferentes objetos como círculos, retângulos e triângulos. Cada um desses objetos teria uma implementação diferente da função draw, mas você poderia invocar a função draw em qualquer um desses objetos sem saber qual classe o objeto pertence, e eles se comportariam da maneira correta.
Abstração
A abstração é um processo de esconder os detalhes de implementação e mostrar apenas a funcionalidade para os usuários. Em outras palavras, o usuário interage apenas com o que é necessário, enquanto os detalhes internos são escondidos. Por exemplo, ao dirigir um carro, você não precisa saber como funciona o motor ou o sistema de freios. Você apenas precisa saber como usar os controles como o volante, os pedais, etc.
Encapsulamento
O encapsulamento é um conceito que implica encapsular todas as propriedades e métodos dentro de uma classe e esconder os detalhes de implementação do usuário. Ele cria uma caixa preta e protege os dados do objeto de acesso direto, que é uma maneira de reduzir a complexidade e aumentar a reutilização.
Em resumo, a Programação Orientada a Objetos é um estilo de programação que é encapsulado em torno de objetos e dados, ao invés de funções e lógica. Uma característica importante da programação orientada a objetos é a divisão de programas em partes ou objetos menores para tornar o desenvolvimento de software mais gerenciável, flexível e modular.