image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Victor Jesus
Victor Jesus25/05/2025 17:23
Compartilhe
Suzano - Python Developer #2Recomendados para vocêSuzano - Python Developer #2

Entendendo os 4 Pilares da Programação Orientada a Objetos

    A Programação Orientada a Objetos (POO) é um paradigma utilizado por muitas linguagens modernas como Java, C#, Python e C++. Para desenvolver com clareza e eficiência nesses ambientes, é fundamental dominar seus quatro pilares: encapsulamento, herança, polimorfismo e abstração.

    Encapsulamento

    O encapsulamento é o princípio de ocultar os dados internos de uma classe e permitir o acesso a eles somente por meio de métodos públicos. Ele ajuda a proteger os atributos de alterações indevidas e mantém o controle sobre como eles são manipulados.

    Exemplo:

    public class ContaBancaria {
      private double saldo;
    
    
      public void depositar(double valor) {
          if (valor > 0) saldo += valor;
      }
    
    
      public void sacar(double valor) {
          if (valor > 0 && valor <= saldo) saldo -= valor;
      }
    
    
      public double getSaldo() {
          return saldo;
      }
    }
    

    Neste exemplo, o atributo saldo não pode ser acessado diretamente. As únicas formas de alterá-lo são através dos métodos depositar e sacar.

    Herança

    Herança é o mecanismo que permite a uma classe herdar atributos e métodos de outra. Isso evita duplicação de código e facilita a reutilização.

    Exemplo:

    class Animal {
      void emitirSom() {
          System.out.println("Som genérico");
      }
    }
    
    
    class Cachorro extends Animal {
      @Override
      void emitirSom() {
          System.out.println("Latido");
      }
    }
    
    

    A classe cachorro herda o método emitirSom() de Animal, mas sobrescreve com um comportamento específico.

    Polimorfismo

    Polimorfismo é a capacidade que métodos têm de se comportar de maneiras diferentes dependendo do contexto ou dos parâmetros recebidos. Ele pode ser dividido em dois conceitos principais:

    Sobrescrita de métodos (Override)

    A sobrescrita ocorre quando uma subclasse redefine um método herdado da superclasse para alterar ou especializar seu comportamento.

    • A anotação @override indica que um método está sobrescrevendo um método da classe pai.
    • Isso ajuda o compilador a verificar se realmente existe um método com a mesma assinatura na superclasse, evitando erros.

    Exemplo de sobrescrita:

    class Animal {
      void emitirSom() {
          System.out.println("Som genérico");
      }
    }
    
    class Gato extends Animal {
      @Override
      void emitirSom() {
          System.out.println("Miau");
      }
    }
    
    
    class Vaca extends Animal {
      @Override
      void emitirSom() {
          System.out.println("Muuu");
      }
    }
    
    }
    

    Aqui, o método emitirSom() das classes Vaca e Gato sobrescreve o método da classe Animal.

    Sobrecarga de métodos (Overload)

    A sobrecarga ocorre quando há vários métodos com o mesmo nome na mesma classe, mas com diferentes listas de parâmetros (assinaturas diferentes). É uma forma de polimorfismo em tempo de compilação.

    • Não envolve herança, ocorre dentro da mesma classe.
    • Permite chamar o método com diferentes tipos ou números de argumentos.

    Exemplo de sobrecarga:

    class Calculadora {
      int somar(int a, int b) {
          return a + b;
      }
    
    
      int somar(int a, int b, int c) {
          return a + b + c;
      }
    
    
      double somar(double a, double b) {
          return a + b;
      }
    }
    

    Aqui, o método somar() está sobrecarregado para aceitar diferentes números e tipos de argumentos.

    Abstração

    Abstração consiste em expor apenas os comportamentos essenciais de um objeto e esconder os detalhes da implementação. Pode ser aplicada com interfaces ou classes abstratas.

    Exemplo com interface:

    interface Forma {
      double calcularArea();
    }
    
    
    class Circulo implements Forma {
      private double raio;
    
    
      Circulo(double raio) {
          this.raio = raio;
      }
    
    
      public double calcularArea() {
          return Math.PI * raio * raio;
      }
    }
    

    Exemplo com classe abstrata:

    abstract class Veiculo {
      abstract void acelerar();
    }
    
    
    class Carro extends Veiculo {
      void acelerar() {
          System.out.println("Carro acelerando");
      }
    }
    

    A abstração define um contrato que as classes concretas devem seguir, sem impor como ele deve ser implementado.

    Conclusão

    Os quatro pilares da orientação a objetos tornam o código mais organizado, reutilizável, seguro e flexível. Entender e aplicar corretamente cada um deles é essencial para quem deseja se aprofundar no desenvolvimento de software com qualidade.

    Compartilhe
    Recomendados para você
    Ri Happy - Front-end do Zero #2
    Avanade - Back-end com .NET e IA
    Akad - Fullstack Developer
    Comentários (2)
    DIO Community
    DIO Community - 27/05/2025 10:22

    Excelente, Victor! Sua explicação sobre os 4 Pilares da Programação Orientada a Objetos é extremamente clara e didática, com exemplos práticos em Java que facilitam a compreensão. Dominar esses conceitos é, de fato, fundamental para qualquer desenvolvedor que busca clareza e eficiência no ambiente de linguagens modernas como Java, C# e Python.

    Na DIO, reconhecemos a importância de um aprendizado imersivo e prático, com foco em habilidades essenciais para o mercado. A sua capacidade de detalhar cada pilar da POO e mostrar como eles tornam o código mais organizado, reutilizável, seguro e flexível, reforça a nossa missão de transformar talentos em profissionais extraordinários de tecnologia, prontos para conquistar as melhores oportunidades.

    Qual dos quatro pilares da POO você considera mais desafiador para um iniciante em programação, e qual a sua dica para superá-lo?

    Carlos Barbosa
    Carlos Barbosa - 25/05/2025 19:00

    Ótima explicação, Victor !! 🚀

    Recomendados para vocêSuzano - Python Developer #2