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:
- Encapsulamento,
- Abstração,
- Herança,
- 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