Article image

PA

Pedro Afonso04/12/2024 21:31
Compartilhe

O que é POO e seus principais pilares.

    O que é POO?

    A POO(Programação orientada a objetos) é um paradigma da programação que surgiu na década de 70, se tornando popular entre os desenvolvedores por aproximar o mundo real do virtual. Ele surgiu para oferecer um modo mais intuitivo, de fácil desenvolvimento e reutilizável , pois divide o código em objetos que contém atributos e métodos.

    Pilares da POO.

    Esse paradigma tem 4 pilares e guiam sua implementação e permite você criar um sistema baseado em objetos, esse pilares são:

    Herança: a Herança permite que uma classe "filha" herde atributos e métodos existentes dentro da classe "Pai". A seguir veremos um exemplo desse pilar:

    public class Animal {
      private String nome;
    
    
      public Animal(String nome) {
          this.nome = nome;
      }
    
    
      public void emitirSom() {
          System.out.println("O animal faz um som.");
      }
    }
    
    
    public class Cachorro extends Animal {
      public Cachorro(String nome) {
          super(nome);
      }
    
    
      @Override
      public void emitirSom() {
          System.out.println("O cachorro late.");
      }
    }
    
    
    public class TesteHeranca {
      public static void main(String[] args) {
          Animal animal = new Animal("Animal Genérico");
          animal.emitirSom();
    
    
          Cachorro cachorro = new Cachorro("Rex");
          cachorro.emitirSom();
      }
    }
    

    Explicação do exemplo: A classe Cachorro herda a variável {nome} da classe e o método emitirSom() que ela extende. Podendo ter seu próprio nome e uma função emitirSom() diferente.

    Encapsulamento: o Encapsulamento permite esconder detalhes importantes de uma classe, permitindo acesso e modificação deles somente por métodos(Getters e Setters). A seguir veremos um exemplo desse pilar:

    public class ContaBancaria {
      private double saldo;
    
    
      public ContaBancaria(double saldoInicial) {
          this.saldo = saldoInicial;
      }
    
    
      public double getSaldo() {
          return saldo;
      }
    
    
      public void depositar(double valor) {
          if (valor > 0) {
              saldo += valor;
              System.out.println("Depósito realizado. Saldo atual: " + saldo);
          } else {
              System.out.println("Valor de depósito inválido.");
          }
      }
    
    
      public void sacar(double valor) {
          if (valor > 0 && valor <= saldo) {
              saldo -= valor;
              System.out.println("Saque realizado. Saldo atual: " + saldo);
          } else {
              System.out.println("Saque inválido.");
          }
      }
    }
    

    Explicação do exemplo: a classe ContaBancaria permite que seu saldo seja visualizado somento pelo método Get e que seu valor seja alterado após a inicialização da classe somente pela função depositar().

    Polimorfismo: o Polimorfismo permite que um método que herda características de outro possam ter comportamentos diferente dependendo do objetivo do desenvolvedor. A seguir veremos um exemplo do pilar:

    public class Veiculo {
      public void mover() {
          System.out.println("O veículo está se movendo.");
      }
    }
    
    
    public class Bicicleta extends Veiculo {
      @Override
      public void mover() {
          System.out.println("A bicicleta está pedalando.");
      }
    }
    
    
    public class TestePolimorfismo {
      public static void main(String[] args) {
          Veiculo veiculo = new Veiculo();
          veiculo.mover(); // Saída: O veículo está se movendo.
    
    
          Veiculo bicicleta = new Bicicleta();
          bicicleta.mover(); // Saída: A bicicleta está pedalando.
      }
    }
    

    Explicação do exemplo: a classe Bicicleta herda características de Veiculo, pois ela é um veiculo, porém a função mover() é diferente da sua classe "Pai".

    Abstração: a Abstração permite que sejam escondidos aspectos essenciais de um objeto podendo implementar eles posterior mente, a abstração é a união dos conceitos de polimorfismo e encapsulamento. A seguir veremos um exemplo do pilar:

    public abstract class Veiculo {
      private String marca;
    
    
      public Veiculo(String marca) {
          this.marca = marca;
      }
    
    
      public String getMarca() {
          return marca;
      }
    
    
      // Método abstrato: implementado nas subclasses
      public abstract void mover();
    }
    
    
    public class Carro implements Veiculo {
      public Carro(String marca) {
          super(marca);
      }
    
    
      @Override
      public void mover() {
          System.out.println("O carro está se movendo.");
      }
    }
    

    Explicação do exemplo: a classe abstrata Veiculo tem um método mover() abstrato que não tem corpo, ou seja, não faz nenhuma ação, porém a classe Carro implementa ela e é obrigada a adicionar um corpo ao método mover().

    Conclusão

    A POO é um paradigma essencial para desenvolver sistemas modernos que sejam moduláveis, escaláveis, que evita redundância deixando assim o código mais legível e de fácil manutenção, porém como tudo tem suas desvantagens sendo elas a dificuldade para iniciantes entender alguns conceitos e não ser ideal para problemas muito simples.

    Considerações Finais

    Agradeço a todos que lerem esse meu primeiro artigo, espero ter ajudado de alguma forma =).

    Compartilhe
    Comentários (0)