A programação orientada a objetos (POO) é uma forma de organizar o código em torno de "coisas" do mundo real ou do problema: um aluno, uma conta bancária, um produto. É um dos temas mais pedidos em cursos de informática e quase todas as linguagens modernas a suportam. Vamos explicá-la sem complicar.
A ideia central
Em vez de ter dezenas de variáveis e funções soltas, juntas dados e comportamentos numa mesma unidade, o objeto. Uma conta bancária, por exemplo, tem dados (titular, saldo) e comportamentos (depositar, levantar).
Classes e objetos
- Classe: o molde, a planta. Define como é e o que faz uma conta.
- Objeto (instância): uma conta concreta criada a partir desse molde.
class ContaBancaria:
def __init__(self, titular, saldo=0):
self.titular = titular
self.saldo = saldo
def depositar(self, valor):
if valor <= 0:
raise ValueError("O valor tem de ser positivo")
self.saldo += valor
def levantar(self, valor):
if valor > self.saldo:
raise ValueError("Saldo insuficiente")
self.saldo -= valor
conta = ContaBancaria("Maria", 10000)
conta.depositar(2500)
conta.levantar(4000)
print(conta.titular, conta.saldo) # Maria 8500__init__é o construtor: corre quando crias o objeto.selfrepresenta o próprio objeto.titularesaldosão atributos (dados).depositarelevantarsão métodos (funções da classe).
Os quatro pilares
1. Encapsulamento
Esconder os detalhes internos e proteger os dados. No exemplo, o saldo só deve mudar através de depositar e levantar, que validam os valores. Em Python, usa-se a convenção _saldo para indicar que é interno.
2. Abstração
Mostrar só o essencial. Quem usa a conta não precisa de saber como o saldo é guardado; só precisa de saber que pode depositar e levantar.
3. Herança
Criar uma classe nova a partir de outra, reaproveitando o que já existe:
class ContaPoupanca(ContaBancaria):
def __init__(self, titular, saldo=0, taxa=0.02):
super().__init__(titular, saldo)
self.taxa = taxa
def render_juros(self):
self.saldo += self.saldo * self.taxa
p = ContaPoupanca("João", 50000)
p.render_juros()
print(p.saldo) # 51000.0A ContaPoupanca tem tudo o que a ContaBancaria tem, mais o que é seu.
4. Polimorfismo
Objetos diferentes respondem ao mesmo "pedido" à sua maneira. Por exemplo, Circulo e Retangulo podem ter ambos um método area(), calculado de forma diferente. Quem chama só precisa de saber que existe area().
Quando usar POO
- Quando o programa tem muitas entidades com dados e comportamentos (utilizadores, produtos, encomendas).
- Quando vários objetos partilham características (herança).
- Em projetos grandes, onde a organização é crucial.
Para scripts pequenos, funções simples bastam. Não é preciso usar classes em tudo.
Erros comuns de iniciantes
- Criar classes demasiado grandes, que fazem tudo.
- Usar herança só para reaproveitar código, quando os objetos não têm relação lógica ("é um").
- Deixar todos os atributos abertos, sem validação.
- Esquecer o
selfnos métodos.
Em que linguagens existe
Python, Java, C#, PHP, JavaScript, Kotlin, Swift, C++ e muitas outras. Os conceitos são os mesmos; muda a sintaxe. Por isso vale a pena aprendê-los bem numa linguagem.
Como praticar
- Cria uma classe
Alunocom nome e notas, e um método que devolve a média. - Cria uma classe
Produtoe uma classeCarrinhoque soma os preços. - Faz uma pequena biblioteca com
Livro,UtilizadoreEmprestimo.
Antes, garante que dominas variáveis, funções e listas.
Perguntas frequentes
POO é obrigatória para ser programador?
Não é obrigatória para tudo, mas é muito comum e aparece em cursos e entrevistas. Vale a pena dominá-la.
Qual a diferença entre classe e objeto?
A classe é o molde; o objeto é uma coisa concreta feita com esse molde.
POO é melhor do que programação funcional?
Nenhuma é "melhor" em absoluto. São estilos diferentes e muitos projetos misturam os dois.




