Programação Orientada a Objetos: Uma Abordagem com Java/Princípios da programação na linguagem Java/Classes Java/Definição de classes em Java: diferenças entre revisões
Criou a página com "= 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: <pre> [modi..." |
(Sem diferenças)
|
Edição atual desde as 17h43min de 16 de agosto de 2016
Definição de classes em Java[editar | editar código-fonte]
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.
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 sequência de definição:
- As variáveis de classe (definidas como static), ordenadas segundo sua visibilidade: iniciando pelas public, seguidos pelas protected, pelas com visibilidade padrão (sem modificador) e finalmente pelas private.
- 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.
- Os construtores de objetos dessa classe.
- 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 é:
[modificador] tipo nome [ = default];
onde
- modificador
- é opcional, especificando a visibilidade diferente da padrão (public, protected ou private), alteração da modificabilidade (final) e se o atributo está associado à classe (static).
- tipo
- deve ser um dos tipos primitivos da linguagem Java ou o nome de uma classe;
- nome
- deve ser um identificador válido da linguagem Java;
- valor default
- é opcional; se presente, especifica um valor inicial para a variável.
Métodos implementam as operações de uma classe. 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
- modificador
- é opcional e pode ser uma combinação de: public, protected ou private; abstract ou final; e static.
- tipo
- é um indicador do valor de retorno, sendo void se o método não tiver um valor de retorno;
- nome do método
- deve ser um identificador válido na linguagem Java;
- 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, desempenhando 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; 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 bidimensional, 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 this. O segundo construtor ilustra outro uso da palavra-chave this. Esse construtor não recebe argumentos e assume portanto o ponto tem como cordenadas a origem, ou seja, o ponto (0,0). O corpo desse construtor poderia ser simplesmente
x = 0; y = 0;
A alternativa apresentada usa a forma
this(0,0);
que equivale a “use o construtor desta mesma classe que recebe dois argumentos inteiros, passando os valores aqui especificados”.
Finalmente, a classe define um método público para calcular a distância entre o ponto que invocou o método (this) e outro ponto especificado como o argumento p. Nesse caso, como não há risco de confusão, não é preciso usar a palavra-chave this antes dos atributos da coordenada do objeto. Assim, as expressões que calculam distX e distY equivalem a
double distX = p.x - this.x; double distY = p.y - this.y;
Usualmente, métodos definidos em uma classe são aplicados a objetos daquela classe. Há, no entanto, situações nas quais um método pode fazer uso dos recursos de uma classe para realizar sua tarefa sem necessariamente ter de estar associado a um objeto individualmente. Para lidar com tais situações, Java define os métodos da classe, cuja declaração deve conter o modificador static. Um método estático pode ser aplicado à classe e não necessariamente a um objeto. A expressão de retorno do método que calcula a distância entre dois pontos ilustra a utilização de um método estático da classe Math do pacote java.lang para o cômputo da raiz quadrada. Outros exemplos de métodos estáticos em Java incluem os métodos para manipulação de tipos primitivos definidos nas classes Character, Integer e Double, todas elas do pacote java.lang, assim como todos os métodos definidos para a classe Math.