Vitor's Blog
Published on

Entendendo programação orientada a objeto (OOP) com Java

Authors

en | ptBR

image

O que é um objeto?

Linguagens como C, que seguem um paradigma de programação estruturada, ou seja, possuem estruturas de dados e instruções do programa atuam nesses dados. Já numa linguagem orientada a objetos - como Java, JavaScript entre outras - combinamos dados e suas instruções em objetos.

Dados e lógica de programação são combinados em um objeto. É uma entidade autocontida contendo atributos e comportamentos. Esse tipo de paradigma é uma extensão lógica de antigas técnicas da programação estrutural e tipos de dados abstratos. Porém, vale pontuar que não necessariamente objeto é um dado abstrato com adição de polimorfismo e herança. Essa generalização é feita em alguns artigos de forma errada.

Herança

Polimorfismo

De forma genérica, significa "várias formas", e isso no contexto da programação representa poder fazer "certa coisa" de várias formas. O ponto é essa "certa coisa". Estamos falando de chamadas de métodos, portanto, em Java, o polimorfismo é expresso apenas em chamdas de métodos. Ou seja, polimorfismo é um pedaço de código que trabalha com múltiplos dados.

Ser objeto, não significa implicatamente ter polimorfismo. Todo objeto é polimórfico, pois a interface dele é. Mas isso não implica em necessariamente todo objeto ter polimorfismo.

Polimorfismo é uma única interface para dados de diferentes tipos ou um símbolo que represente vários tipos diferentes. Na prática isso ocorre com as três principais classes de polimorfismo, que são:

Polimorfismo permite que referências de tipos de classes abstratas representem o comportamento de classes concretas que refenciam. Dessa forma, é possível tratar múltiplos tipos de uma mesma forma. Ou seja, é caracterizado como polimorfismo, quando mais de duas classes distintas têm métodos do mesmo nome, fazendo com que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem precisar tratar de forma diferente conforme a classe do objeto

De forma um pouco mais prática, pense num objeto "a" que chama o método "falar()" de um objeto "b", dessa forma, o objeto "b" define a forma de implementação de tal método, ou seja, o tipo do objeto "b" é o que de fato importa.

Exemplos de chamda polimórfica:

  1. Objeto "a" cria o "b"
class A {
void facaAlgo(){
Falador b;
if(...) {
b = new Pessoa();
} else {
b = new Crianca();
}
b.falar(); // chamada polimórfica
}
}
  1. Objeto "a" recebe o objeto "b" de um objeto "c"
class A {
void facaAlgo(){
Gritador b = c.meDêUmGritador(); // "c" é um objeto qualquer para o qual tenha referência
b.grita(); // chamada polimórfica
}
}
  1. O objeto "a" recebe o objeto "b" numa chamda de método
class A {
void facaAlgo(Gritador b){
b.grita(); // chamda polimórfica
}
}

O ponto geral dos exemplos é conseguir exibir que "a" tem uma refência a "b". Outra coisa é que, em Java, todas as chamdas de métodos a objetos são polimórficas. Isso no caso em métodos de OBJETOS, no caso de métodos estáticos ou também chamados de métodos de classes não há polimorfismo.

Fontes: