De que se trata o artigo: Apresenta os conceitos iniciais de orientação a objetos, de forma leve, tentando mostrar exemplos práticos em Java que tornem mais fácil o entendimento deste paradigma. Também antecipa brevemente alguns temas que serão abordados no futuro.


Para que serve:
Serve como um guia básico aos desenvolvedores que estão dando os primeiros passos na programação orientada a objetos e também àqueles que estão se preparando para o SCJP – Certificação para Programador Java.


Em que situação o tema é útil:
A programação em Java baseia-se em classes, e compreender os conceitos de orientação a objetos é fundamental para escrever programas cujos módulos podem ser reutilizáveis e escaláveis. Os sistemas estão cada vez mais complexos, e criar programas que sejam fáceis de manter depende do entendimento dos recursos do paradigma OO e da linguagem de programação utilizada.

Resumo DevMan: Neste artigo, serão apresentados os conceitos iniciais da orientação a objetos e como eles podem ser implementados em Java. Para isso, mostramos como organizar classes em pacotes e como criar classes preocupando-se principalmente com o encapsulamento e a coesão. O texto fala sobre os relacionamentos entre as classes, e apresenta exemplos de como implementar esses relacionamentos, principalmente TEM-UM (que reúne composição, agregação e associação) e É-UM (que corresponde à generalização/especialização). Em seguida os construtores e seu encadeamento são estudados com detalhes, principalmente as regras que devem ser observadas na sua criação.

Um parâmetro que pode ser usado para medir a complexidade de um software é o número de linhas de código. Por exemplo, o Windows Vista tem cerca de 50 milhões de linhas, o kernel do Linux 3.0 tem mais de 14 milhões de linhas, a versão 2.0 do OpenOffice já apresentava mais de 10 milhões de linhas de código.

Por essa perspectiva não é difícil concluir o quanto a complexidade do software vem aumentando a cada ano que passa. Isso acarreta alguns problemas. Um deles é a dificuldade em cumprir o cronograma do projeto. Quanto maior o tamanho do programa, maior é a distância entre a estimativa de tempo prevista e o real. Segundo, os custos de desenvolvimento e manutenção aumentam consideravelmente com o tamanho do software. Estima-se, atualmente, que o custo de manutenção de um software atinge de 70 a 80% do custo total. Uma terceira dificuldade não é consequência da complexidade, mas devido à dinâmica dos negócios do usuário: os requisitos mudam. Neste século, os processos nos negócios mudam a cada seis meses ou menos. Nas décadas de 60 e 70, essas mudanças ocorriam a cada cinco anos.

Uma das peças chave para solucionar essas dificuldades chama-se reutilização. A reutilização é fundamental para o aumento da produtividade e melhoria da qualidade. De maneira geral, reutilização consiste na utilização mais de uma vez de todos os tipos de informação e artefatos encontrados durante o processo de desenvolvimento, tais como requisitos, código e testes. Existem diversas técnicas que podemos lançar mão para conseguir a reutilização. Dentre elas podemos citar os repositórios dos sistemas de controle de versão e a orientação a objetos. E é sobre a orientação a objetos que pretendemos apresentar nesta matéria.

A Programação Orientada a Objetos (Object-Oriented Programming) foi concebida na década de 60 no Centro Norueguês de Computação. Nessa época, os conceitos de classe e herança foram introduzidos através da linguagem Simula 67. No entanto, somente após o lançamento da linguagem Smalltalk nos anos 70 – considerada a linguagem orientada a objetos (OO) mais pura que existe – é que a OO começou a se popularizar. Após isso surgiram linguagens chamadas híbridas, tais como C++ e Java.

Desta forma, neste artigo serão estudados os conceitos de orientação e de que forma podemos utilizar a linguagem Java para implementá-los.

Pacotes

Em geral, quando desenvolvemos pequenas aplicações, pode ser viável manter o código em um mesmo diretório. Entretanto, em aplicações maiores, colocar todos os arquivos em uma mesma pasta, sem organização, pode prejudicar principalmente a manutenção do sistema. Por isso sugere-se que o código seja agrupado, de forma que as classes relacionadas fiquem em um mesmo diretório. Esses diretórios – juntamente com os arquivos dentro deles – são chamados de pacotes, e tanto o código fonte das classes quanto os arquivos compilados – e mesmo outros pacotes – são organizados dentro desses diretórios. Por curiosidade, todo o código da API (Application Programming Interface) do Java também está organizado em pacotes. Por exemplo: o pacote java.io contém as classes referentes a I/O (Entrada/Saída) e o pacote java.net oferece o que é necessário para lidar com redes.

Supondo que uma classe chamada Pessoa pertença ao pacote br.com.nomeempresa.nomeprojeto, então seu nome completo será br.com.nomeempresa.nomeprojeto.Pessoa. Essa é uma forma de evitar conflitos de nomes, pois classes em pacotes diferentes têm nomes completos diferentes.

Considerando este mesmo exemplo, quando o compilador encontra uma referência à classe Pessoa, ele irá procurar o arquivo Pessoa.class no diretório br/com/nomeempresa/nomeprojeto. Tenha em mente que cada um desses diretórios é um pacote.

Para indicar que um arquivo fonte Java pertence a um dado pacote, a primeira linha de código deste arquivo deve ser a declaração:

package br.com.nomeempresa.nomeprojeto

No caso em que esta declaração não está presente, o arquivo fonte fará parte do pacote default, que é o próprio diretório corrente do projeto.

Para referenciar uma classe de um pacote, é possível usar o nome completo da classe. No entanto, o que se faz normalmente é usar a declaração import. Por exemplo, pode-se declarar o seguinte no início do código:

import br.com.nomeempresa.nomeprojeto.Pessoa;  ... 

Quer ler esse conteúdo completo? Tenha acesso completo