Considerando nosso conhecimento no domínio bancário, iremos abstrair uma solução Orientada a Objetos em Java. Para isso, vamos interpretar o seguinte cenário: “Um banco oferece aos seus clientes dois tipos de contas (corrente e poupança), as quais possuem as funcionalidades de depósito, saque e transferência (entre contas da própria instituição).”
import java.util.List;
public class Banco {
private String nome;
private List<Conta> contas;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Conta> getContas() {
return contas;
}
public void setContas(List<Conta> contas) {
this.contas = contas;
}
}public class Cliente {
private String nome;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}public class ContaCorrente extends Conta {
public ContaCorrente(Cliente cliente) {
super(cliente);
}
@Override
public void imprimirExtrato() {
System.out.println("=== Extrato Conta Corrente ===");
super.imprimirInfosComuns();
}
}public class ContaPoupanca extends Conta{
public ContaPoupanca(Cliente cliente) {
super(cliente);
}
@Override
public void imprimirExtrato() {
System.out.println("=== Extrato Conta Corrente ===");
super.imprimirInfosComuns();
}
}public interface IConta {
void sacar (double valor);
void depositar (double valor);
void transferir (double valor, IConta contaDestino);
void imprimirExtrato();
}public class Main {
public static void main(String[] args) {
Cliente venilton = new Cliente();
venilton.setNome("Venilton");
Conta cc = new ContaCorrente(venilton);
Conta poupança = new ContaPoupanca(venilton);
cc.depositar(100);
cc.transferir(100, poupança);
cc.imprimirExtrato();
poupança.imprimirExtrato();
}
}Habilidade de concentrar-se nos aspectos essenciais de um domínio, ignorando características menos importantes ou acidentais. Nesse contexto, objetos são abstrações de entidades existentes no domínio em questão.
Encapsular significa esconder a implementação dos objetos, criando assim interfaces de uso mais concisas e fáceis de usar/entender. O encapsulamento favorece principalmente dois aspectos de um sistema: a manutenção e a evolução.
Permite que você defina uma classe filha que reutiliza (herda), estende ou modifica o comportamento de uma classe pai. A classe cujos membros são herdados é chamada de classe base. A classe que herda os membros da classe base é chamada de classe derivada.
Capacidade de um objeto poder ser referenciado de várias formas, ou seja, é capacidade de tratar objetos criados a partir das classes específicas como objetos de uma classe genérica. Cuidado, polimorfismo não quer dizer que o objeto fica se transformando, muito pelo contrário, um objeto nasce de um tipo e morre daquele tipo, o que pode mudar é a maneira como nos referimos a ele.