Por que eu devo ler este artigo:Apesar da grande maioria das organizações já adotar linguagens orientadas a objetos, em muitas destas a programação ainda ocorre na forma de grandes blocos de código, ignorando as vantagens da orientação a objetos.

Sendo assim, esse artigo apresenta os principais recursos da linguagem Java relativos à programação orientada a objetos, habilitando o programador a obter código reutilizável e eficiente sem complicar suas implementações, superando metodologias antigas, onde os programas são caracterizados por serem uma coleção de blocos de código.

Por ser uma linguagem orientada a objetos, todos os programas desenvolvidos em Java são compostos por um ou mais objetos que colaboram entre si para resolver um determinado problema. Como os conceitos do mundo real podem ser modelados na forma de objetos distintos e interdependentes, torna-se intuitivo desenvolver programas orientados a objetos para as mais diversas finalidades.

A correta produção de código orientado a objetos leva a muitos benefícios, como a reutilização de código, melhor organização deste, facilidade de manutenção, melhor escalabilidade da aplicação, entre outros.

Além do paradigma de programação orientado a objetos, existem muitos outros paradigmas propostos na literatura, aplicados a diferentes situações, como o paradigma lógico, para tratar de conhecimento usando regras lógicas, o paradigma funcional, que permite estruturar um programa na forma de chamadas a funções, o estruturado, que é baseado no conceito de sub-rotinas, entre outros.

O paradigma estruturado precede o paradigma orientado a objetos, e foi muito utilizado no passado, quando começaram a se tornar importantes os conceitos de função e sub-rotina. Porém, a programação estruturada não tem o mesmo poder de organização da informação e procedimentos quando comparada à programação orientada a objetos, que divide o programa em conceitos, ou seja, classes.

Entre as desvantagens da programação estruturada, destacam-se os fatos que ela leva a uma menor legibilidade do código e maior dificuldade de manutenção.

Sendo a sua alternativa natural, a orientação a objetos organiza toda a informação pertencente a um programa na forma de conceitos, onde cada conceito é representado por uma classe, e cada classe tem atributos e métodos.

Por exemplo, em uma aplicação para um mercado, o conceito Funcionário pode ser definido pelos atributos nome, data de nascimento e CPF, além dos métodos realizarAdmissao() e realizarDemisso(), que correspondem às operações ligadas ao conceito Funcionário.

Uma vez que nós conheçamos com abrangência os recursos da programação orientada a objetos, estaremos aptos a criar programas ganhando principalmente em eficiência e em reutilização de código. Tais recursos são importantes tanto para o desenvolvedor como para o analista de software, pois o segundo também precisa dominá-los para realizar a modelagem do sistema usando classes, atributos e métodos.

Classes e Objetos

Primeiramente, vamos partir do básico na orientação a objetos da linguagem Java, que é a definição de classes e objetos. Para alguém que está iniciando na linguagem Java, tais conceitos podem se confundir, porém classes e objetos são coisas bem distintas.

Uma classe tem a função de representar conceitos, contendo atributos e métodos. Em outras palavras, uma classe define um padrão de criação de objetos que contém os mesmos atributos e métodos. Por exemplo, uma classe Pessoa pode ter o atributo nome e o método setNome().

Como consequência dessa especificação, cada objeto da classe Pessoa (chamado também de instância) representa uma pessoa distinta no sistema que tem um valor específico definido para a variável nome e que pode invocar o método setNome().

Considere agora outro exemplo, onde precisamos criar uma classe referente ao conceito de cliente presente no mundo real, a que chamamos de Cliente. Supondo ainda que existem muitas outras classes que fazem parte do sistema, como Funcionário, Fornecedor e outras, pode ser muito útil definirmos uma estrutura hierárquica para organizar as classes, de forma que cada uma seja uma especialização de outra, como na Figura 1.

Diagrama de classe generalizando a modelagem de clientes

Figura 1. Diagrama de classe generalizando a modelagem de clientes.

Em nossa estrutura hierárquica de classes, observamos que a classe Pessoa é a classe mãe de todas as outras. Abaixo dela, temos as classes PessoaFisica e PessoaJuridica, que especializam a classe Pessoa. Seguindo a mesma forma de organização, abaixo de PessoaJuridica temos as especializações Fornecedor e Loja, e abaixo de PessoaFisica temos as especializações Cliente e Funcionário. Por fim, considere Vendedor como uma especialização de Funcionário, pois todo vendedor é um funcionário no nosso sistema.

Como visto, o diagrama na Figura 1 apresenta o conceito de herança (a ser definido mais adiante), um dos mecanismos básicos mais importantes oferecidos pela linguagem Java para o desenvolvimento orientado a objetos. Além deste, analisaremos ao longo do artigo outros recursos que facilitam a programação, aproveitando ao máximo a orientação a objetos.

Conceitos básicos da Orientação a Objetos

Além do mecanismo de herança, a linguagem Java oferece outros mecanismos para a programação orientada a objetos, que são os conceitos de encapsulamento e polimorfismo, definidos mais adiante. Esses conceitos formam a base da orientação a objetos, e a correta utilização deles leva a códigos simples, poderosos e eficientes, além de aplicações melhor elaboradas e uma manutenção simplificada. Vamos então conhecer como funciona o conceito de herança.

Herança entre classes

O conceito de herança é utilizado como uma forma implícita de reutilizar código, de forma que uma classe filha herda todos os atributos e métodos de uma classe mãe, o que é feito utilizando a palavra-chave extends na codificação da classe filha.

É importante saber que atributos e métodos herdados da classe mãe são implícitos, ou seja, não são visíveis no código-fonte da classe filha, mas estão presentes e acessíveis conforme a visibilidade especificada na classe mãe.

Uma definição muito importante na linguagem Java é que Object é a superclasse de todas as classes. Portanto, o que ocorre quando se define uma classe sem informar a classe mãe, é que está sendo criada uma classe filha de Object. Na Listagem 1 é apresentado um exemplo clássico de uma classe filha de Object.

Listagem 1. Declaração da classe Pessoa.
...
Quer ler esse conteúdo completo? Tenha acesso completo