Introdução
Programação Orientada a Objetos é um paradigma (um jeito de organizar código) onde você modela o problema como um conjunto de objetos que têm estado (dados) e comportamento (métodos), em vez de modelar como uma sequência de instruções que manipulam dados soltos.
A ideia central: em vez de separar "dados" de um lado e "funções que mexem nos dados" do outro, você agrupa os dois numa única unidade — o objeto.
Pra que serve / que problema resolve
Antes da POO ficar popular, a programação era predominantemente procedural: um monte de funções manipulando estruturas de dados globais ou passadas por parâmetro. Isso funciona bem em programas pequenos, mas cresce mal:
// Estilo procedural
struct ContaBancaria
{
public decimal Saldo;
}
void Sacar(ref ContaBancaria conta, decimal valor)
{
conta.Saldo -= valor; // nada impede alguém de fazer conta.Saldo = -9999 direto
}
Qualquer parte do código pode mexer em Saldo sem passar pelas regras de negócio. Conforme o sistema cresce, fica impossível garantir que os dados estão sempre num estado válido.
A POO ataca esse problema principal: acoplar dados às regras que os protegem, e além disso:
- Organiza sistemas grandes em pedaços independentes e reutilizáveis
- Modela o domínio do problema de um jeito mais próximo de como pensamos no mundo real (um
Cliente, umPedido, umaContaBancaria) - Facilita manutenção: mudanças ficam localizadas dentro da classe responsável
// Estilo orientado a objetos
class ContaBancaria
{
public decimal Saldo { get; private set; }
public void Sacar(decimal valor)
{
if (valor > Saldo)
throw new InvalidOperationException("Saldo insuficiente");
Saldo -= valor;
}
}
Agora é impossível deixar o saldo inválido de fora da classe — a regra mora junto com o dado.
Classe vs Objeto
Essa distinção é a base de tudo:
- Classe é o molde/template — a definição de que atributos e comportamentos algo terá.
- Objeto (ou instância) é uma "coisa concreta" criada a partir desse molde.
csharp
class Carro // classe: o molde
{
public string Modelo { get; set; }
public int Velocidade { get; set; }
public void Acelerar() => Velocidade += 10;
}
Carro meuCarro = new Carro { Modelo = "Civic" }; // objeto 1
Carro carroDoAmigo = new Carro { Modelo = "Corolla" }; // objeto 2
Carro é uma classe só. meuCarro e carroDoAmigo são dois objetos independentes, cada um com seu próprio estado.
Por que isso importa na prática
O ganho real não é "seguir um paradigma bonito", é que sistemas orientados a objetos bem feitos tendem a ser mais fáceis de estender sem quebrar o que já existe, mais fáceis de testar (cada objeto isolado), e mais fáceis de entender porque o código espelha o vocabulário do problema real.
Aprofundamentos (Visão Geral)
Ao entender o que o POO resolve na prática, seremos capazes de entrar nos pilares e conceitos fundamentais.
São eles:
- Principais Pilares
- Funcionalidades do Paradigma
- Model-Driven Design
Top comments (0)