Open jemluz opened 8 months ago
POO é um paradigma de programação onde a gente se baseia na ideia de organizar e modelar o nosso software em torno de objetos. Sendo objetos representações de qualquer entidade do mundo real.
Utilizamos pacotes (que no fim das contas nada mais são do que pastas) para organizar nossas entidades em POO
A programação orientada a objetos surgiu como uma alternativa a essas características da programação estruturada. O intuito da sua criação também foi o de aproximar o manuseio das estruturas de um programa ao manuseio das coisas do mundo real, daí o nome "objeto" como uma algo genérico, que pode representar qualquer coisa tangível.
Esse novo paradigma se baseia principalmente em dois conceitos chave: classes e objetos. Todos os outros conceitos, igualmente importantes, são construídos em cima desses dois.
Classes são abstrações, modelos que irão definir como algo (uma entidade) deve ser. E objeto é a concretização dessas abstrações.
A classe é o projeto de um carro na ainda na mão do engenheiro (no mundo das ideias). O objeto é o carro na garagem da sua casa (no mundo real).
Todos os carros, mesmo com suas características particulares e distintas: cores, marcas, portes, maquinário, preços... todos obedecem o modelo original: a ideia que deu forma e definiu os critérios mínimos necessários para que um carro, seja de fato considerado um carro.
public class Carro {
Double velocidade;
String modelo;
public Carro(String modelo) {
this.modelo = modelo;
this.velocidade = 0;
}
public void acelerar() {
/* código do carro para acelerar */
}
public void frear() {
/* código do carro para frear */
}
public void acenderFarol() {
/* código do carro para acender o farol */
}
}
class Carro:
def __init__(self, modelo):
self.modelo = modelo;
self.velocidade = 0
def acelerar(self):
# Codigo para acelerar o carro
def frear(self):
# Codigo para frear o carro
def acenderFarol(self):
# Codigo para acender o farol do carro
Nós podemos elaborar mais, adiconando métodos/funções para poupar trabalhos repetitivos.
São métodos que obrigatóriamente:
Servem para inicialização dos objetos da classe. Pense nele como um canal de automatização, alguém para facilitar sua vida e poupar que você fique declarando cada objeto de modo mais verboso, linha a linha.
Você pode ter mais de um construtor na mesma classe, todos com mesmo nome (não vai dar erro, deus fez assim) mas que recebem entradas de parâmetros diferentes. Por exemplo:
Eles serão distinguidos de acordo com a diferença na quantidade, ou ordem dos parâmetros.
Você pode não criar nenhum construtor, mas sempre há um construtor default (que não recebe parâmetro nenhum) em toda classe. Mas se você criar um construtor, para usar o default terá que declará-lo explicitamente.
Como era antes (na programação estruturada)
Na programação estruturada, um programa é composto por três tipos básicos de estruturas:
Essas estruturas são usadas para processar a entrada do programa, alterando os dados até que a saída esperada seja gerada. Até aí, nada que a programação orientada a objetos não faça, também, certo?
A diferença principal é que na programação estruturada, um programa é tipicamente escrito em uma única rotina (ou função) podendo, é claro, ser quebrado em subrotinas.
Mas o fluxo do programa continua o mesmo, de tal forma que, no final, só haja uma grande rotina que execute todo o programa.
Além disso, o acesso às variáveis não possuem muitas restrições na programação estruturada.
Em linguagens fortemente baseadas nesse paradigma, restringir o acesso à uma variável se limita a dizer se ela é visível ou não dentro de uma função (ou módulo, como no uso da palavra-chave static, na linguagem C), mas não se consegue dizer de forma nativa que uma variável pode ser acessada por apenas algumas rotinas do programa.
O contorno para situações como essas envolve práticas de programação danosas ao desenvolvimento do sistema, como o uso excessivo de variáveis globais. Vale lembrar que variáveis globais são usadas tipicamente para manter estados no programa, marcando em qual parte dele a execução se encontra.
Artigo: Programação orientada a objetos e programação estruturada