A maior rede de estudos do Brasil

Grátis
118 pág.
poojava

Pré-visualização | Página 7 de 37

termina com
um sufixo através respectivamente dos métodos startsWith() e endsWith(). Ambos recebem
como argumento uma string e retornam um valor booleano.
2.5 Classes em Java
Como descrito na Seção 1.1, a definição de classes é a base da programação orientada a objetos.
Em Java, classes são definidas em arquivos fonte (extensão .java) e compiladas para arquivos de
classes (extensão .class). Classes são organizadas em pacotes.
2.5.1 Pacotes
No desenvolvimento de pequenas atividades ou aplicações, é viável manter o código da aplicação
e suas classes associadas em um mesmo diretório detrabalho — em geral, o diretório corrente. No
entanto, para grandes aplicações é preciso organizar as classes de maneira a evitar problemas com
nomes duplicados de classes e permitir a localização do código da classe de forma eficiente.
Em Java, a solução para esse problema está na organização de classes e interfaces em pacotes.
Um pacote é uma unidade de organização de código que congrega classes, interfaces e exceções
relacionadas. O código-base de Java está todo estruturado em pacotes e as aplicações desenvolvidas
em Java também devem ser assim organizadas.
Essencialmente, uma classe Xyz que pertence a um pacote nome.do.pacote tem um “nome
completo” que é nome.do.pacote.Xyz. Assim, se outra aplicação tiver uma classe de mesmo
nome não haverá conflitos de resolução, pois classes em pacotes diferentes têm nomes completos
distintos.
A organização das classes em pacotes também serve como indicação para o compilador Java
para encontrar o arquivo que contém o código da classe. O ambiente Java normalmente utiliza a
especificação de uma variável de ambiente CLASSPATH, a qual define uma lista de diretórios que
contém os arquivos de classes Java. No entanto, para não ter listas demasiadamente longas, os nomes
dos pacotes definem subdiretórios de busca a partir dos diretórios em CLASSPATH.
No mesmo exemplo, ao encontrar no código uma referência para a classe Xyz, o compila-
dor deverá procurar o arquivo com o nome Xyz.class; como essa classe faz parte do pacote
nome.do.pacote, ele irá procurar em algum subdiretório nome/do/pacote. Se o arquivo
Xyz.class estiver no diretório /home/java/nome/do/pacote, então o diretório /home/
java deve estar incluído no caminho de busca de classes definido por CLASSPATH.
Para indicar que as definições de um arquivo fonte Java fazem parte de um determinado pacote,
a primeira linha de código deve ser a declaração de pacote:
c
�
2001 FEEC/UNICAMP 20
Programação orientada a objetos com Java 2.5. Classes em Java
package nome.do.pacote;
Caso tal declaração não esteja presente, as classes farão parte do “pacote default”, que está mapeado
para o diretório corrente.
Para referenciar uma classe de um pacote no código fonte, é possível sempre usar o “nome com-
pleto” da classe; no entanto, é possível também usar a declaração import. Por exemplo, se no início
do código estiver presente a declaração
import nome.do.pacote.Xyz;
então a classe Xyz pode ser referenciada sem o prefixo nome.do.pacote no restante do código.
Alternativamente, a declaração
import nome.do.pacote.*;
indica que quaisquer classes do pacote especificado podem ser referenciadas apenas pelo nome no
restante do código fonte.
A única exceção para essa regra refere-se às classes do pacote java.lang — essas classes
são consideradas essenciais para a interpretação de qualquer programa Java e, por este motivo, o
correspondente import é implícito na definição de qualquer classe Java.
2.5.2 Definição de classes em Java
Em Java, classes são definidas através do uso da palavra-chave class. Para definir uma classe,
utiliza-se a construção:
[modif] class NomeDaClasse {
// corpo da classe...
}
A primeira linha é um comando que inicia a declaração da classe. Após a palavra-chave class,
segue-se o nome da classe, que deve ser um identificador válido para a linguagem (ver Seção 2.2). O
modificador modif é opcional; se presente, pode ser uma combinação de public e abstract ou final.
A definição da classe propriamente dita está entre as chaves { e }, que delimitam blocos na
linguagem Java. Este corpo da classe usualmente obedece à seguinte seqüência de definição:
1. As variáveis de classe (definidas como static), ordenadas segundo sua visibilidade: inici-
ando pelas public, seguidos pelas protected, pelas com visibilidade padrão (sem modificador)
e finalmente pelas private.
2. Os atributos (ou variáveis de instância) dos objetos dessa classe, seguindo a mesma ordenação
segundo a visibilidade definida para as variáveis de classe.
3. Os construtores de objetos dessa classe.
4. Os métodos da classe, geralmente agrupados por funcionalidade.
A definição de atributos de uma classe Java reflete de forma quase direta a informação que estaria
contida na representação da classe em um diagrama UML. Para tanto, a sintaxe utilizada para definir
um atributo de um objeto é:
c
�
2001 FEEC/UNICAMP 21
Programação orientada a objetos com Java 2.5. Classes em Java
[modificador] tipo nome [ = default];
onde
� o modificador é opcional, especificando a visibilidade diferente da padrão (public, pro-
tected ou private), alteração da modificabilidade (final) e se o atributo está associado
à classe (static).
� o tipo deve ser um dos tipos primitivos da linguagem Java ou o nome de uma classe;
� o nome deve ser um identificador válido da linguagem Java;
� o valor default é opcional; se presente, especifica um valor inicial para a variável.
Métodos são essencialmente procedimentos que podem manipular atributos de objetos para os
quais o método foi definido. Além dos atributos de objetos, métodos podem definir e manipular
variáveis locais; também podem receber parâmetros por valor através da lista de argumentos. A
forma genérica para a definição de um método em uma classe é
[modificador] tipo nome(argumentos) {
corpo do método
}
onde
� o modificador (opcional) é uma combinação de: public, protected ou private; abs-
tract ou final; e static.
� o tipo é um indicador do valor de retorno, sendo void se o método não tiver um valor de
retorno;
� o nome do método deve ser um identificador válido na linguagem Java;
� os argumentos são representados por uma lista de parâmetros separados por vírgulas, onde para
cada parâmetro é indicado primeiro o tipo e depois (separado por espaço) o nome.
Uma boa prática de programação é manter a funcionalidade de um método simples, desempe-
nhando uma única tarefa. O nome do método deve refletir de modo adequado a tarefa realizada. Se a
funcionalidade do método for simples, será fácil encontrar um nome adequado para o método.
Como ocorre para a definição de atributos, a definição de métodos reflete de forma quase direta a
informação que estaria presente em um diagrama de classes UML, a não ser por uma diferença vital:
o corpo do método.
Métodos de mesmo nome podem co-existir em uma mesma classe desde que a lista de argumentos
seja distinta, usando o mecanismo de sobrecarga.
O exemplo a seguir ilustra a definição de uma classe de nome Ponto2D:
public class Ponto2D {
private int x;
private int y;
c
�
2001 FEEC/UNICAMP 22
Programação orientada a objetos com Java 2.5. Classes em Java
public Ponto2D(int x, int y) {
this.x = x;
this.y = y;
}
public Ponto2D( ) {
this(0,0);
}
public double distancia(Ponto2D p) {
double distX = p.x - x;
double distY = p.y - y;
return Math.sqrt(distX*distX + distY*distY);
}
}
Um objeto dessa classe tem dois atributos privativos que definem as coordenadas do ponto bidi-
mensional, x e y — nesse caso, as coordenadas são valores inteiros.
A classe tem dois construtores. O primeiro deles recebe dois argumentos, também de nome x e y,
que definem as coordenadas do ponto criado. Para diferenciar no corpo do construtor os parâmetros
dos atributos, estes têm seu nome prefixado pela palavra-chave