# Conceito de POO

**Programação orientada a objetos** (**POO**, ou **OOP** segundo as suas siglas em inglês) é um [paradigma de programação](https://pt.wikipedia.org/wiki/Paradigma_de_programa%C3%A7%C3%A3o) baseado no conceito de "[objetos](https://pt.wikipedia.org/wiki/Objeto_\(ci%C3%AAncia_da_computa%C3%A7%C3%A3o\))", que podem conter [dados](https://pt.wikipedia.org/wiki/Dados) na forma de [campos](https://pt.wikipedia.org/wiki/Campo_\(ci%C3%AAncia_da_computa%C3%A7%C3%A3o\)), também conhecidos como *atributos*, e códigos, na forma de [procedimentos](https://pt.wikipedia.org/wiki/Procedimento), também conhecidos como [métodos](https://pt.wikipedia.org/wiki/M%C3%A9todo_\(programa%C3%A7%C3%A3o\)).

Como se trata de um contexto análogo ao mundo real, tudo no qual nos referimos são objetos, exemplo: Conta bancária, Aluno, Veículo, Transferência etc.

A programação orientada a objetos é bem requisitada no contexto das aplicações mais atuais no mercado devido a possibilidade de reutilização de código e a capacidade de representação do sistema ser muito mais próximo do mundo real.

Para uma linguagem ser considerada orientada a objetos, esta deve seguir o que denominamos como ***Os quatro pilares da orientação a objetos***:

* **Encapsulamento:** Nem tudo precisa estar visível, grande parte do nosso algoritmo pode ser distribuído em métodos com finalidades específicas que complementa uma ação em nossa aplicação.

  Exemplo: Ligar um veículo exige muitas etapas para a engenharia, mas o condutor só visualiza a ignição, dar a partida e a *“magia”* acontece.
* **Herança:** Características e comportamentos comuns podem ser elevados e compartilhados através de uma hierarquia de objetos.

  Exemplo: Um Carro e uma Motocicleta possuem propriedades como placa, chassi, ano de fabricação e métodos como acelerar, frear. Logo para não ser um processo de codificação redundante, podemos desfrutar da herança criando uma classe **Veiculo** para que seja herdada por Carro e Motocicleta.
* **Abstração:** É a indisponibilidade para determinar a lógica de um ou vários comportamentos em um objeto.

  Exemplo: **Veículo** determina duas ações como acelerar e frear, logo estes comportamentos deverão ser *abstratos* pois existem mais de uma maneira de se realizar a mesma operação. ver *Polimorfismo*.
* **Polimorfismo:** São as inúmeras maneiras de se realizar uma mesma ação.

  Exemplo: Veículo determina duas ações como acelerar e frear, primeiramente precisamos identificar se estaremos nos referindo a **Carro** ou **Motocicleta** para determinar a lógica de aceleração e frenagem dos respectivos veículos.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://felipe-aguiar.gitbook.io/dio-java/gitbook/programacao-orientada-a-objetos/conceito-de-poo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
