Programação Orientada a Objetos Easy
Tags: poo, beginners, programming, memes
Published: 2023-05-19 23:06:29

Sabemos que Programação Orientada a Objetos (POO) é um Paradigma de Programação que ajuda a definir a estrutura de programas de computadores, baseado nos conceitos do mundo real, sejam eles Reais ou Abstratos. A ideia é simular as coisas que existem e acontecem no mundo real no mundo virtual. Coloquei alguns memes que gosto, aproveitem o ~~meme~~ artigo!


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zcnrhc4694ken0p0gr85.png)


## Objetos
Em programação (e, de certa forma também na vida real), um objeto é uma entidade caracterizada por um conjunto de operações e um estado, caracterizados por **funções (chamados de Métodos) e campos (chamados de Atributos)**, podendo ainda ser **compostos por outros Objetos (os Atributos podem ser Objetos de outras Classes)**.

Todo o Objeto portanto possui 3 características fundamentais: **Identidade** (nome), **Estado** (propriedades ou atributos) e **Comportamento** (ações ou métodos).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9qo0eam4ikuyeug4rf1d.png)

## Classes

Uma classe pode ser considerada como um "molde" de um Objeto, sendo uma descrição de como um objeto pode ser criado pois criamos objetos a partir de classes. Uma classe é a definição padrão do objeto. Toda classe tem um Nome (tipo), Atributos (propriedades, dados) e Comportamentos(métodos).


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehtyarzzp6howrkyhaxm.png)

## Abstração

Na abstração pensamos nas qualidades essenciais de uma coisa ao invés de um exemplo específico, descartando tudo que é irrelevante. Faça-se a pergunta: O que posso descartar nessa Classe, para esse código ou app seja suficiente agora? Isso é abstração, pegar o essencial e deixando as representações potenciais e úteis.

## Encapsulamento

A ideia é que uma classe deve manter os seus atributos internos protegidos de outros objetos, provendo quando necessário acesso a eles através de métodos específicos.
Não se trata de manter o seu código secreto, trata-se de reduzir as dependências de diferentes partes do aplicativo, evitando efeito dominó e exigindo várias outras alterações.

## Herança
Ele permite que uma classe herde atributos e comportamentos de outra classe, criando uma relação de hierarquia entre elas. A classe que herda é chamada de subclasse ou classe derivada, enquanto a classe que é herdada é chamada de superclasse ou classe base. A subclasse pode adicionar novos atributos e comportamentos, ou sobrescrever os que foram herdados da superclasse, permitindo a criação de classes mais especializadas sem precisar reescrever todo o código. A herança é uma técnica poderosa para reutilizar código e criar hierarquias de classes bem organizadas e flexíveis.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dpthpfr9y32wel0k4vyy.png)

## Polimorfismo 

Ele permite que objetos de diferentes classes sejam tratados de maneira uniforme, ou seja, que um mesmo método possa ser utilizado em diferentes objetos, independentemente de sua classe específica. Isso é possível porque cada objeto, apesar de ter sua própria classe, compartilha um conjunto de métodos e atributos comuns a todas as classes da hierarquia. 



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5c69203lf3bwrzg9oth4.png)

Até a próxima!