Programação Orientada a Objetos (POO)
- #Java
- #POO
Introdução
A Programação Orientada a Objetos (POO) é um paradigma de programação que se baseia na organização do código em torno de "objetos". Esses objetos são unidades autônomas que incorporam dados e métodos para operar nesses dados. Neste texto, vamos explorar os conceitos fundamentais da POO e fornecer exemplos em Java para ilustrar cada um deles.
Encapsulamento
O encapsulamento é um dos princípios fundamentais da POO, focado em ocultar os detalhes internos de um objeto e fornecer uma interface pública para interagir com ele. Em Java, esse conceito é implementado definindo os atributos de uma classe como privados e controlando o acesso a esses atributos por meio de métodos de acesso (getters) e de modificação (setters).
Exemplo em Java:
public class Pessoa {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String novoNome) {
this.nome = novoNome;
}
}
Abstração
A abstração refere-se à capacidade de representar objetos do mundo real de forma simplificada e encapsulada em classes. Isso facilita a resolução de problemas em programas de computador, tornando o código mais legível e organizado.
Herança
A herança permite que uma classe herde atributos e métodos de outra classe, estabelecendo uma relação de herança entre elas. Isso promove a reutilização de código, generalização e extensibilidade.
Exemplo em Java:
class Veiculo {
void mover() {
System.out.println("Veículo em movimento");
}
}
class Aviao extends Veiculo { //Essa classe herdará o método mover()
}
public class Main {
public static void main(String[] args) {
Aviao meuAviao = new Aviao();
meuVeiculo.mover();
}
}
Polimorfismo
O polimorfismo é um dos conceitos fundamentais da POO e pode ser dividido em duas categorias principais: polimorfismo universal e polimorfismo ad-hoc.
- Polimorfismo Universal:
O polimorfismo universal permite que objetos de diferentes classes sejam tratados de forma uniforme através de uma mesma interface. Esta categoria abrange principalmente o polimorfismo de subtipo e o polimorfismo de parametrização.
- Polimorfismo de Subtipo: Envolve a herança, onde uma classe filha pode substituir ou estender um método da classe pai. Isso promove a reutilização de código e a extensibilidade do software. Veja um exemplo em Java:
class Veiculo {
void mover() {
System.out.println("Veículo em movimento");
}
}
class Carro extends Veiculo {
@Override
void mover() {
System.out.println("Carro em movimento");
}
}
class Moto extends Veiculo {
@Override
void mover() {
System.out.println("Moto em movimento");
}
}
- Polimorfismo de Parametrização: Usa classes genéricas ou interfaces para permitir que diferentes tipos de objetos sejam tratados de forma polimórfica, aumentando a flexibilidade do código. Veja um exemplo em Java:
interface Forma {
void desenhar();
}
class Circulo implements Forma {
@Override
public void desenhar() {
System.out.println("Desenhando um círculo");
}
}
class Quadrado implements Forma {
@Override
public void desenhar() {
System.out.println("Desenhando um quadrado");
}
}
- Polimorfismo Ad-hoc:
O polimorfismo ad-hoc engloba a capacidade de sobrecarga e sobreescrita de métodos. Estes conceitos permitem que métodos com o mesmo nome realizem tarefas diferentes com base nos argumentos passados e que uma subclasse forneça uma implementação específica para um método definido na classe pai. Veja exemplos em Java para sobrecarga e sobreescrita.
// Exemplo de sobrecarga
public class Calculadora {
public int somar(int a, int b) {
return a + b;
}
public double somar(double a, double b) {
return a + b;
}
}
// Exemplo de sobreescrita
class Animal {
void fazerBarulho() {
System.out.println("Animal fazendo barulho");
}
}
class Cachorro extends Animal {
@Override
void fazerBarulho() {
System.out.println("Cachorro latindo");
}
}
Exceções
As exceções são usadas para lidar com situações inesperadas durante a execução de um programa. Existem exceções verificadas (que exigem tratamento) e exceções não verificadas (que não exigem tratamento).
Exemplo em Java:
public class ExemploExcecao {
public static void main(String[] args) {
try {
int resultado = dividir(10, 0);
System.out.println("Resultado: " + resultado);
}
catch (ArithmeticException e) {
System.out.println("Erro: Divisão por zero");
}
}
static int dividir(int a, int b) {
return a / b;
}
}
Conclusão
Dominar os conceitos fundamentais da Programação Orientada a Objetos (POO) em Java não só torna o código mais organizado, reutilizável e flexível, mas também contribui para a eficiência, robustez e manutenibilidade dos sistemas. Essas habilidades são essenciais para qualquer programador que busque excelência na programação Java e no desenvolvimento de software de qualidade.