image

Access unlimited bootcamps and 650+ courses forever

60
%OFF
Article image
Edson Chaves
Edson Chaves14/10/2025 20:51
Share

5 Formas de Usar Orientação a Objetos em Java para Acelerar Sua Carreira

    Introdução

    Orientação a Objetos (OO) é muito mais do que uma técnica — é uma filosofia de design que transformou a forma como programamos há 30 anos. Se você quer ir além de scripts simples e criar aplicações profissionais, escaláveis e mantíveis, dominar OO em Java é obrigatório.

    Neste artigo, exploraremos as 5 pilares de OO na prática, com exemplos reais que você pode usar imediatamente em seus projetos.

    👉 Código: Mini-Aplicativo: Sistema de Gestão de Funcionários, com recursos completo deste artigo!

    https://github.com/edsongom1/java-roadmap-essentials/blob/main/mini_app_java_2.java

    image

    1. Encapsulamento: Protegendo Seus Dados

    Encapsulamento significa esconder os detalhes internos de uma classe e expor apenas o necessário através de métodos públicos.

    Por Que Encapsular?

    • 🔒 Segurança: Evita modificações não autorizadas
    • 🛡️ Controle: Valida dados antes de atribuir
    • 🔄 Flexibilidade: Muda internamente sem quebrar código externo

    Exemplo Prático: Conta Bancária

    java

    public class ContaBancaria {
      // Atributos privados (encapsulados)
      private String titular;
      private double saldo;
      private String numeroConta;
      
      // Construtor
      public ContaBancaria(String titular, double saldoInicial) {
          this.titular = titular;
          this.saldo = saldoInicial;
          this.numeroConta = gerarNumeroConta();
      }
      
      // Métodos públicos (getters e setters)
      public String getTitular() {
          return titular;
      }
      
      public double getSaldo() {
          return saldo;
      }
      
      // Método com validação
      public void depositar(double valor) {
          if (valor <= 0) {
              System.out.println("❌ Erro: Valor deve ser positivo!");
              return;
          }
          saldo += valor;
          System.out.println("✅ Depósito de R$ " + valor + " realizado!");
      }
      
      public boolean sacar(double valor) {
          if (valor > saldo) {
              System.out.println("❌ Erro: Saldo insuficiente!");
              return false;
          }
          saldo -= valor;
          System.out.println("✅ Saque de R$ " + valor + " realizado!");
          return true;
      }
      
      private String gerarNumeroConta() {
          return "CC-" + System.nanoTime();
      }
    }
    

    Benefício: O cliente não pode manipular saldo diretamente — apenas através de métodos controlados.

    2. Herança: Reutilizando Código e Criando Hierarquias

    Herança permite que uma classe herde atributos e métodos de outra, evitando duplicação.

    Estrutura Hierárquica

    java

    // Classe pai (superclasse)
    public class Funcionario {
      protected String nome;
      protected double salario;
      
      public Funcionario(String nome, double salario) {
          this.nome = nome;
          this.salario = salario;
      }
      
      public void trabalhar() {
          System.out.println(nome + " está trabalhando...");
      }
      
      public double calcularBonus() {
          return salario * 0.10; // Bônus padrão de 10%
      }
    }
    
    // Classe filha (subclasse)
    public class Gerente extends Funcionario {
      private int numEquipe;
      
      public Gerente(String nome, double salario, int numEquipe) {
          super(nome, salario); // Chama construtor da classe pai
          this.numEquipe = numEquipe;
      }
      
      @Override
      public double calcularBonus() {
          return salario * 0.20; // Gerentes recebem 20%
      }
      
      public void gerenciarEquipe() {
          System.out.println(nome + " está gerenciando " + numEquipe + " pessoas.");
      }
    }
    
    // Classe filha adicional
    public class Desenvolvedor extends Funcionario {
      private String linguagem;
      
      public Desenvolvedor(String nome, double salario, String linguagem) {
          super(nome, salario);
          this.linguagem = linguagem;
      }
      
      public void programar() {
          System.out.println(nome + " está programando em " + linguagem);
      }
    }
    

    Vantagem: Mudanças em Funcionario beneficiam automaticamente Gerente e Desenvolvedor.

    3. Polimorfismo: Flexibilidade em Ação

    Polimorfismo significa "muitas formas" — um método pode se comportar diferentemente dependendo do objeto.

    Polimorfismo em Prática

    java

    public class GerenciadorFolha {
      public static void main(String[] args) {
          // Array com referências de Funcionario
          Funcionario[] funcionarios = {
              new Gerente("Carlos", 5000, 5),
              new Desenvolvedor("Ana", 4000, "Java"),
              new Funcionario("João", 3000)
          };
          
          // Polimorfismo: cada objeto executa sua versão de calcularBonus()
          for (Funcionario f : funcionarios) {
              System.out.println(f.nome + " - Bônus: R$ " + f.calcularBonus());
              f.trabalhar(); // Cada um executa seu trabalho
          }
      }
    }
    

    Saída esperada:

    Carlos - Bônus: R$ 1000.0
    Carlos está trabalhando...
    Ana - Bônus: R$ 400.0
    Ana está trabalhando...
    João - Bônus: R$ 300.0
    João está trabalhando...
    

    4. Abstração: Simplificando a Complexidade

    Abstração significa se focar no "o quê" e não no "como". Classes abstratas definem um contrato que subclasses devem implementar.

    Usando Classes Abstratas

    java

    // Classe abstrata (contrato)
    public abstract class Veiculo {
      protected String marca;
      protected double velocidade;
      
      public Veiculo(String marca) {
          this.marca = marca;
          this.velocidade = 0;
      }
      
      // Método abstrato (sem implementação)
      public abstract void acelerar();
      public abstract void frear();
      
      // Método concreto
      public void exibirInfo() {
          System.out.println("Marca: " + marca + " | Velocidade: " + velocidade + " km/h");
      }
    }
    
    // Implementações concretas
    public class Carro extends Veiculo {
      public Carro(String marca) {
          super(marca);
      }
      
      @Override
      public void acelerar() {
          velocidade += 30;
          System.out.println("🚗 Carro acelerou! Velocidade: " + velocidade);
      }
      
      @Override
      public void frear() {
          velocidade = 0;
          System.out.println("🚗 Carro freou!");
      }
    }
    
    public class Bicicleta extends Veiculo {
      public Bicicleta(String marca) {
          super(marca);
      }
      
      @Override
      public void acelerar() {
          velocidade += 15;
          System.out.println("🚴 Bicicleta acelerou! Velocidade: " + velocidade);
      }
      
      @Override
      public void frear() {
          velocidade = Math.max(0, velocidade - 5);
          System.out.println("🚴 Bicicleta freou!");
      }
    }
    

    5. Composição: Construindo Classes Complexas

    Composição significa que uma classe contém instâncias de outras classes. É frequentemente melhor que herança.

    Composição Prática

    java

    // Classe simples
    public class Endereco {
      public String rua;
      public String cidade;
      public String cep;
      
      public Endereco(String rua, String cidade, String cep) {
          this.rua = rua;
          this.cidade = cidade;
          this.cep = cep;
      }
    }
    
    // Composição
    public class Pessoa {
      private String nome;
      private Endereco endereco; // Composição
      
      public Pessoa(String nome, Endereco endereco) {
          this.nome = nome;
          this.endereco = endereco;
      }
      
      public void exibirDados() {
          System.out.println("Nome: " + nome);
          System.out.println("Endereço: " + endereco.rua + ", " + endereco.cidade);
      }
    }
    
    // Uso
    public class Main {
      public static void main(String[] args) {
          Endereco end = new Endereco("Rua Java", "São Paulo", "01234-567");
          Pessoa p = new Pessoa("Marina", end);
          p.exibirDados();
      }
    }
    

    Diferença Entre Herança e Composição

    AspectoHerançaComposiçãoRelacionamento"é um""tem um"FlexibilidadeMenorMaiorMudançasAfeta subclassesIsoladoExemploCarro extends VeiculoCarro tem Motor
    

    Regra de Ouro: Prefira composição. Use herança apenas para relacionamentos genuínos "é um".

    Padrões de Projeto com OO

    Aplicar padrões de projeto acelera sua carreira:

    • Singleton: Uma única instância de uma classe
    • Factory: Cria objetos sem especificar classes concretas
    • Strategy: Encapsula algoritmos intercambiáveis
    • Observer: Notifica múltiplos objetos sobre mudanças

    Estes padrões são usados em 99% dos projetos profissionais.

    Referências

    Conclusão

    Orientação a Objetos não é um detalhe técnico — é a base de toda a engenharia de software moderna. Dominar os 5 pilares (Encapsulamento, Herança, Polimorfismo, Abstração e Composição) te posiciona como um desenvolvedor sênior, capaz de arquitetar sistemas escaláveis.

    Cada projeto que você construir com OO sólido será mais fácil de manter, testar e evoluir.

    Chamada para Ação

    👉 Código: Mini-Aplicativo: Sistema de Gestão de Funcionários, com recursos completo deste artigo!

    https://github.com/edsongom1/java-roadmap-essentials/blob/main/mini_app_java_2.java

    👉 Desafio: Crie um sistema de biblioteca com classes Livro, Usuario e Emprestimo usando pelo menos 3 dos 5 pilares apresentados. Compartilhe no GitHub!

    📌 Próximo passo: Explore Collections em Java para gerenciar múltiplos objetos com eficiência.ais fácil de manter, testar e evoluir.

    Share
    Recommended for you
    Cognizant - Mobile Developer
    Luizalabs - Back-end com Python
    PcD Tech Bradesco - Java & QA Developer
    Comments (1)
    Iasmin Santiago
    Iasmin Santiago - 14/10/2025 21:14

    Adorei o resumo, obrigada!! Estou aprendendo POO com Java agora e isso me ajudará quando precisar ver os conceitos de uma vez só!