image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image

PA

Pedro Afonso04/12/2024 21:31
Compartilhe

O que é POO e seus principais pilares.

  • #Java
  • #POO

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)