5 Dicas Essenciais para Dominar a Orientação a Objetos em Java
Introdução
Java move a nuvem e o mercado, e a Orientação a Objetos (OO) é seu coração. Neste artigo prático, você irá além da teoria, aplicando Polimorfismo e Encapsulamento para criar um código mais limpo e profissional. Descubra como esses pilares transformam sua carreira e como as Collections otimizam a gestão de dados.
O Coração do Java: Classes, Objetos e Pilares
A Programação Orientada a Objetos (OO) organiza o código em torno de Objetos (entidades do mundo real) em vez de apenas funções e lógica. Para dominar Java, você deve entender seus quatro pilares:
- Encapsulamento: Proteger os dados, escondendo a lógica interna do objeto (
private). Acessamos os dados apenas por métodos (getters/setters). - Herança: Permitir que uma classe (subclasse) herde atributos e métodos de outra (superclasse), promovendo o reuso de código.
- Polimorfismo: A capacidade de um objeto assumir várias formas. Exemplo: um objeto
Cachorroe um objetoGatopodem ser tratados de forma genérica como umAnimal. - Abstração: Focar nos detalhes essenciais, ignorando o background complexo (ex.: interfaces e classes abstratas).
Parar na teoria é um erro comum. Vamos aplicar Encapsulamento e Polimorfismo agora!
Construindo um Sistema Simples com OO na Prática
Vamos simular um sistema de gerenciamento de itens em estoque. Criaremos uma classe base e aplicaremos o Encapsulamento e a Herança.
Subtítulo: Encapsulamento com a Classe Base Produto
A classe Produto define a estrutura básica, garantindo a segurança dos dados com Encapsulamento.
public class Produto {
private String nome;
private double preco;
// Construtor
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
// Getters para acesso controlado
public String getNome() { return nome; }
public double getPreco() { return preco; }
// Método para ser sobrescrito
public String exibirDetalhes() {
return "Produto: " + nome + ", Preço: R$" + preco;
}
}
💡 Dica de Escrita: Inclua um print de tela deste código no seu ambiente (IntelliJ ou VS Code) para visualização.
Subtítulo: Herança e Especialização
Criamos uma subclasse Eletronico que herda de Produto e adiciona um atributo específico (garantiaMeses).
public class Eletronico extends Produto {
private int garantiaMeses;
public Eletronico(String nome, double preco, int garantiaMeses) {
super(nome, preco); // Chama o construtor da superclasse
this.garantiaMeses = garantiaMeses;
}
// Sobrescreve o método da superclasse (Polimorfismo)
@Override
public String exibirDetalhes() {
return super.exibirDetalhes() + ", Garantia: " + garantiaMeses + " meses";
}
}
Dominando as Collections e o Polimorfismo
O verdadeiro poder de OO se manifesta quando usamos estruturas de dados. Em vez de criar listas separadas para cada tipo de produto, usamos o Polimorfismo dentro de uma Collection.
Subtítulo: Listas Genéricas com Polimorfismo
Usaremos a interface List do pacote java.util para criar uma lista genérica que pode armazenar tanto Produto quanto Eletronico.
Java
import java.util.ArrayList;
import java.util.List;
public class Estoque {
public static void main(String[] args) {
// A lista é do tipo Produto (superclasse)
List<Produto> itensEstoque = new ArrayList<>();
// Adicionando um Produto (forma base)
itensEstoque.add(new Produto("Caderno", 25.0));
// Adicionando um Eletronico (subclasse) - Polimorfismo em ação!
itensEstoque.add(new Eletronico("Smartphone X", 1800.0, 12));
// Iterando e chamando o método 'exibirDetalhes()'
System.out.println("--- Relatório de Estoque ---");
for (Produto item : itensEstoque) {
// O Java decide qual método chamar em tempo de execução
System.out.println(item.exibirDetalhes());
}
}
}
O resultado é que o método exibirDetalhes() correto é chamado para cada objeto, provando o Polimorfismo.
Saída no Console:
--- Relatório de Estoque ---
Produto: Caderno, Preço: R$25.0
Produto: Smartphone X, Preço: R$1800.0, Garantia: 12 meses
Conclusão e Próximos Passos
A aplicação correta de Encapsulamento e Polimorfismo, combinada com o uso eficiente de Collections (List, Map, Set), não é opcional em Java; é fundamental. Dominar esses fundamentos garante códigos mais flexíveis, seguros e fáceis de manter.
Continue Evoluindo: Aprofunde seus estudos sobre a Stream API, que trabalha perfeitamente com Collections para manipulação de dados de forma funcional, e JUnit para garantir a qualidade do seu código.



