Podemos construir métodos que permitem alterar os valores de todos ou só de alguns atributos.
No caso dos jogadores, só vamos permitir alterar os atributos que dizem respeito às pontuações. Não vamos permitir que o nome seja alterado.
xxxxxxxxxx
public class Jogador {
private String nome;
private int pontuacao;
private int maximoJogada;
// Escondemos aqui partes jah feitas
...
/**
* Registar uma nova pontuacao para este jogador
* @param pontos Os pontos a acumular ah pontuacao deste jogador
* @requires pontos > 0
*/
public void registarPontos (int pontos) {
this.pontuacao += pontos;
if (pontos > this.maximoJogada) {
this.maximoJogada = pontos;
}
}
// Ainda nao estah completa
}
Repare que este método não se limita a acumular os novos pontos na pontuação total. Também verifica se este valor a acumular é maior que o máximo numa jogada registado até ao momento (guardado no atributo maximoJogada
); no caso de ser superior, então esse valor passa a ser o novo máximo registado numa só jogada.
As três figuras seguintes ilustram o estado da memória aquando da execução da instrução meuJogador.registarPontos(5)
no main
da classe ClienteDeJogador
das secções anteriores:
this
a referenciar o objeto que foi alvo da invocação e o parâmetro pontos
com o valor dado na invocação:main
, repare que os valores dos atributos pontuacao
e maximoJogada
do objeto meuJogador
já têm novos valores, que lhes foram atribuídos pelas instruções this.pontuacao += pontos;
e this.maximoJogada = pontos;
do método registarPontos
:main
após a execução do método; repare que o jogador já tem a nova pontuação:
Quando, de seguida, a instrução meuJogador.registarPontos(9)
é executada,
Anterior: 10.4. Métodos que revelam o estado
Seguinte: 10.6. Mais construtores