Pular para conteúdo

Paradigma Orientado à Objetos e Java

Apesar de ser comum ouvir falar em Java como uma linguagem orientada a objetos, isso não é verdade, pois o Java também pode ser usado como uma linguagem procedural. A Orientação a Objetos é pertinente ao paradigma, enquanto a linguagem é responsável por fornecer meios de implementar aquele paradigma. Iremos ver em resumo os quatro pilares da POO.

Abstração

Programas de computador podem variar de algumas linhas à centenas de milhares de linhas. Para facilitar a manutenção de um programa monolito é comum decompor o programa em subprogramas menores. A abstração é o processo de expor detalhes essenciais de uma entidade, enquanto os detalhes irrelevantes são ignorados, facilitando a manutenção e o entendimento. A relevância de um detalhe está ligada a seu contexto, por exemplo, pensemos num teclado, o contexto para o usuário é o mais simples possível, ele apenas deve ter acesso às teclas e pronto, já para o contexto da máquina o mais importante é o circuito elétrico interno do teclado, aquilo que fica por trás das teclas, oculto ao usuário.

Encapsulamento

Linguagens de programação dão suporte a encapsulamento de diversas maneiras: um procedimento é um encapsulamento de um conjunto de passos para executar uma tarefa; um vetor (array) é o encapsulamento de diversos elementos; etc. Na Programação Orientada à Objetos, o encapsulamento é o processo de agrupar dados e procedimentos em uma entidade chamada de classe.

No Java você pode encapsular dados e procedimentos dentro de uma classe, é possível encapsular classes dentro de pacotes (packages) e pacotes dentro de um módulo.

Herança

O mecanismo de herança permite que você defina uma nova abstração através de uma abstração já existente. A nova abstração pode ser chamada de subtipo, subclasse ou classe derivada, enquanto a classe originária é chamada de supertipo, superclasse,  como também, costuma-se referenciar esta por classe-pai e aquela por classe-filha. Ao nível da programação, a herança provê um mecanismo de reutilização de código. A partir da derivação de uma classe genérica é possível criar classes específicas.

Polimorfismo

Permite que uma entidade assuma diferentes significados em diferentes contextos, com o propósito de se escrever códigos que sejam reutilizáveis e de fácil manutenção. A capacidade polimórfica decorre diretamente da herança, pois permite que uma variável de referência e o objeto sejam diferentes, isso ocorre através da sobrescrita de métodos, quando a subclasse sobrescreve o método implementado na superclasse.

O polimorfismo ainda pode ser dividido em dois tipos:

  • Ad hoc: define uma interface comum para um conjunto arbitrário de tipos especificados individualmente.
  • Universal : não especifica tipos concretos e, em vez disso, usa símbolos abstratos que podem substituir qualquer tipo.

Referências