Orientação a objetos (OO) - Conceitos básicos
Tags: oo, ptbr, dev
Published: 2019-12-05 20:04:32

---
title: Orientação a objetos (OO) - Conceitos básicos
published: true
description: Orientação a objetos é um paradigma de desenvolvimento de software, onde temos agrupamento e interações entre unidades individuais
tags: oo, ptbr, dev
---

Orientação a objetos (OO) é um paradigma de desenvolvimento de software, onde temos o agrupamento e a interação entre unidades individuais, essas unidades se classificam como objetos.

Podemos construir objetos a partir de outros objetos. Os objetos representam entidades do mundo real: *pessoas, animais, carros, círculos, quadrados, etc*.

#Abstração

Abstração em OO é uma representação de um objeto real para o contexto da programação (classes).

Temos 3 pontos que devemos considerar na abstração: *identidade, propriedades e ações*.

* **Identidade (nomes)**: Devemos criar uma identidade para este objeto, esta identidade não se deve repetir para outros objetos, deve ser única para que não ocorram conflitos.

* **Propriedades (atributos)**: Propriedades são as características que um objeto deve possuir, são definições que identificam o objeto. Ex: um objeto *Carro* tem características *cor, portas*.

* **Ações (métodos)**: Por último, temos os métodos que o objeto pode executar. São ações ou eventos executadas por este objeto. Ex: um Carro pode *andar, correr, frear*.

#Encapsulamento

Encapsulamento em orientação a objetos é não expor detalhes de uma classe a outra. 

Temos três tipos de encapsulamento: *public, protected, private*.

* **Public**: Atributos ou métodos com o tipo public são acessíveis em qualquer parte do sistema, desde que a classe onde estes itens se encontram seja instanciada.

* **Protected**: Atributos ou métodos que são acessíveis somente na própria classe ou nas classes que estendam esta classe.

* **Private**: Utilizando o tipo private, métodos e atributos são somente acessíveis na própria classe.

Com o encapsulamento conseguimos limitar o acesso a métodos internos de classes e evitamos alterações indesejadas.

#Herança

A herança é utilizada para compartilhar (herdar) atributos e métodos entre classes. Quando duas classes são próximas, tem características parecidas, mas não são iguais, podemos utilizar herança.

Em herança temos dois tipos: *Classes Bases (classes mães) e Classes Derivadas (classes filhas)*

* **Classes Bases**: Classes bases são as que concedem as características para outras classes. São as classes que podem ser estendidas. Nestas existem métodos e atributos que podem ser utilizados por mais de uma classe.

* **Classes Derivadas**: As classes derivadas são as classes que herdam as características das classes bases. Classes derivadas também pode ser estendidas, mas estas classes geralmente são especializadas em resolver UM problema.

Tudo que temos nas classes bases teremos nas classes derivadas, podemos dizer que a classe derivada herdou as características da classe base.

Com a herança podemos dizer que a classe derivada é uma classe base.

#Polimorfismo

Polimorfismo é a possibilidade de duas ou mais classes filhas redeclararem métodos com a mesma assinatura de uma classe pai, mas tendo suas implementações internas distintas em cada uma.

Estas redeclarações dos métodos devem ter a mesma identificação da classe pai, para que não ocorram erros.

Estas implementações são feitas em tempo de execução.

Dessa maneira podem haver 2 ou mais métodos com a mesma identificação, mas com implementações diferentes em cada classe.