FC

Filipe Cardoso20/07/2024 10:27
Compartilhe

Java e Programação Orientada a Objetos (POO)

    Programação orientada a objetos (POO) é um modelo de programação que organiza o software como uma coleção de objetos com características e comportamentos distintos. Os quatro pilares desse paradigma são:

    1. Encapsulamento,
    2. Abstração,
    3. Herança,
    4. Polimorfismo

    Herança

    Permite criar uma nova classe a partir de uma classe existente, herdando os atributos (características) e métodos (ações, funções). A classe mãe é conhecida como superclasse ou classe base. Já a classe filha é a subclasse. Herança promove a reutilização de código e estabelece uma relação "é um" entre as classes.

    A classe "Conteudo", no exemplo abaixo, é a superclasse abstrata que define o comportamento comum para todos os tipos de conteúdo. As classes "Curso" e "Mentoria" são subclasses que herdam de "Conteudo".

    public abstract class Conteudo {
      protected static final double XP_PADRAO = 10d;
      private String titulo;
      private String descricao;
    
    
      public String getTitulo() {
          return titulo;
      }
    
    
      public void setTitulo(String titulo) {
          this.titulo = titulo;
      }
    
    
      public String getDescricao() {
          return descricao;
      }
    
    
      public void setDescricao(String descricao) {
          this.descricao = descricao;
      }
    
    
      public abstract double calcularXp();
    }
    
    
    public class Curso extends Conteudo {
      private int cargaHoraria;
    
    
      public int getCargaHoraria() {
          return cargaHoraria;
      }
    
    
      public void setCargaHoraria(int cargaHoraria) {
          this.cargaHoraria = cargaHoraria;
      }
    
    
      @Override
      public double calcularXp() {
          return XP_PADRAO * cargaHoraria;
      }
    
    
      @Override
      public String toString() {
          return "Curso [titulo=" + getTitulo() + ", descricao=" + getDescricao() + ", cargaHoraria=" + cargaHoraria + ", xp=" + calcularXp() + "]";
      }
    }
    
    
    
    
    public class Mentoria extends Conteudo {
      private LocalDate data;
    
    
      public LocalDate getData() {
          return data;
      }
    
    
      public void setData(LocalDate data) {
          this.data = data;
      }
    
    
      @Override
      public double calcularXp() {
          return XP_PADRAO + 20d;
      }
    
    
      @Override
      public String toString() {
          return "Mentoria [titulo=" + getTitulo() + ", descricao=" + getDescricao() + ", data=" + data + ", xp=" + calcularXp() + "]";
      }
    }
    

    Polimorfismo

    Em Java, polimorfismo permite que uma superclasse seja referenciada por uma subclasse; facilitando a utilização de um único método ou interface para operar em diferentes tipos de objetos.

    Conteudo curso = new Curso();
    curso.setTitulo("Curso de Java");
    curso.setDescricao("Aprenda Java do básico ao avançado");
    ((Curso) curso).setCargaHoraria(8);
    
    
    Conteudo mentoria = new Mentoria();
    mentoria.setTitulo("Mentoria de Java");
    mentoria.setDescricao("Tire suas dúvidas sobre Java");
    ((Mentoria) mentoria).setData(LocalDate.now());
    
    
    System.out.println(curso.calcularXp()); // Saída: 80.0
    System.out.println(mentoria.calcularXp()); // Saída: 30.0
    

    Sobrecarga

    Quando métodos distintos apresentam o mesmo nome.

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

    Referências:

    • https://www.freecodecamp.org/portuguese/news/principios-de-programacao-orientada-a-objetos-em-java-conceitos-de-poo-para-iniciantes/
    • https://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452
    • https://www.javatpoint.com/pt/conceitos-de-poo-em-java

    Links úteis:

    • https://br.linkedin.com/in/filipe-mesel-lobo-costa-cardoso
    • https://github.com/FilipeMesel
    Compartilhe
    Comentários (0)