🎯 Programação Orientada a Objetos
Paradigma essencial para construir sistemas escaláveis, reutilizáveis e de fácil manutenção
📦 1. Abstração
Modelar entidades do mundo real em classes, focando apenas nas características e comportamentos essenciais.
🔒 2. Encapsulamento
Proteger dados internos, expondo apenas métodos controlados de acesso (getters/setters).
🧬 3. Herança
Reutilizar código: classes filhas herdam atributos e métodos da classe pai.
🔄 4. Polimorfismo
Um mesmo método pode ter comportamentos diferentes em classes distintas.
🏗️ Classes e Objetos
Classe: molde/blueprint. Objeto: instância concreta.
🔧 Métodos Especiais
- Construtor: inicializa o objeto
- Getters/Setters: controlam acesso a atributos
- Métodos estáticos: pertencem à classe, não à instância
📐 Princípios SOLID
- S - Single Responsibility
- O - Open/Closed
- L - Liskov Substitution
- I - Interface Segregation
- D - Dependency Inversion
⚖️ POO vs Outros Paradigmas
| Paradigma | Características | Quando usar |
|---|---|---|
| 🟢 Orientado a Objetos | Estado + comportamento, encapsulamento | Sistemas complexos, UI, jogos, negócios |
| 🔵 Funcional | Imutabilidade, funções puras | Processamento de dados, concorrência |
| 🟠 Procedural | Sequência de instruções | Scripts simples, algoritmos |
| 🟣 Declarativo | O que fazer, não como | SQL, HTML, CSS |
📝 Exercícios de Fixação
Crie uma classe ContaBancaria com atributos privados (saldo, titular). Implemente métodos depositar(), sacar() e getSaldo().
Crie uma classe Funcionario com atributos nome e salario. Depois crie Gerente que herda e adiciona bonus.
Implemente uma hierarquia de formas (Forma, Circulo, Quadrado) com método calcularArea().
Crie uma classe Produto com atributo privado preco, e valide que o preço nunca seja negativo.
Crie um exemplo de composição onde um Carro possui um Motor (em vez de herdar de Veiculo).
✅ Boas Práticas em POO
- ✔️ Uma classe, uma responsabilidade (SRP)
- ✔️ Prefira composição sobre herança
- ✔️ Use nomes significativos para classes e métodos
- ✔️ Mantenha encapsulamento forte
- ✔️ Programe para interfaces, não para implementações
- ✔️ Evite herança profunda (max 3 níveis)
🚀 Padrões de Projeto Essenciais
- Singleton: única instância global
- Factory: criação de objetos centralizada
- Observer: eventos e notificações
- Strategy: algoritmos intercambiáveis
- Dependency Injection: reduz acoplamento
📚 Referências
- "Design Patterns" – GoF (Erich Gamma et al.)
- "Clean Code" – Robert C. Martin
- "Head First Design Patterns"
- Documentação oficial das linguagens: Java, C#, Python, JavaScript/TypeScript
Post a Comment