Obtendo valores de atributos

O BlueJ permite visualizar todos os valores dos atributos de um objeto, no entanto, isto é um recurso que a ferramenta disponibiliza apenas para facilitar o entendimento do conceitos de classes e objetos. Na prática, quando precisarmos obter o valor de um atributo de um objeto, precisaremos adicionar uma função para tal finalidade.

Assim como fizemos com os setters, preciremos de uma função com uma estrutura definida, como abaixo:

TipoRetorno nomeFuncao() {

}

Tais funções apenas obtêm o valor de um determinado atributo, assim, não precisamos passar nenhuma informação para a função (nenhum parâmetro) para que ela execute sua tarefa. Desta forma, os parênteses da função ficam vazios. O tipo de retorno normalmente é o mesmo definido pelo atributo que deseja-se obter o valor. Assim, uma função para obter o valor do atributo endereco poderia ser como mostrado abaixo:

String getEndereco() {
    return endereco;
}
O padrão para o nome de tais funções é getNomeDoAtributo. Estas funções são chamadas de getters (get significa obter). Assim como os setters, elas devem ter um nome específico pois possuem uma finalidade bem definida: obter o valor de um atributo.

A linha return endereco; é bem mais simples do que utilizamos para o setter. Aqui não precisamos usar a palavra this para nos referirmos ao atributo, pois a função getEndereco não possui um parâmetro com o mesmo nome do atributo que estamos utilizando. De fato, ela não possui parâmetro algum.

Como um getter obtém o valor de um atributo, o tipo de retorno precisa ser diferente de void (como foi o caso para os setters). Fazendo isso, estamos indicando que nossa função de fato nos dá uma resposta quando ela terminar de executar sua tarefa.

Para as funções que dão alguma resposta após terminarem de executar, nós dizemos que elas retornam um valor, de acordo com o tipo de retorno. Para fazer uma função retornar um valor, precisamos incluir a palavra return seguida do valor a ser retornado. No caso do getter, na maioria dos casos esta é a única linha da função.

Um getter não possui parâmetros pois ele tem a função de apenas informar algo. Voltando no exemplo da secretária, o chefe poderia pedir a ela para localizar a agenda dele. Neste caso o chefe não precisa passar nenhuma informação à secretária. Ela vai apenas procurar a agenda no escritório e entregar ao chefe. Então a função da secretária de pegar a agenda e entregar ao chefe é um getter.

Inserindo o código acima na classe cliente, podemos então criar um novo cliente, alterar seu endereço e depois obter apenas o endereço do cliente quando precisarmos. Esta nova função aparecerá quando clicarmos com o botão direito sobre um objeto cliente no BlueJ, nos permitindo chamar o getter.

bluej getter.gif
Figure 1. Chamando um getter de um objeto pela interface do BlueJ.

Porque utilizar padrões de nomes para getter’s e setter’s

Depois de criar algumas classes, você verá que criar getter’s e setter’s é uma tarefa repetitiva e entendiante. Vimos no capítulo 4 que o princípio DRY prega que devemos evitar retrabalho e esta criação destes métodos vai exatamente contra isso. Porém, veremos que em ferramentas profissionais como o NetBeans permitem gerar o código necessário para tais métodos, como pode ser visto no vídeo de demonstração abaixo.

Assim, não temos que manualmente criar tais métodos. Mas como podem ver no vídeo, estas ferramentas também seguem o padrão de nomes para getter’s e setter’s. Isto permite, por exemplo, a ferramenta identificar se já existe um desses métodos para um determinado atributo e não criar um novo método para ele.

Além disso, apenas verificando o nome de um método destes, podemos imediatamente saber qual a finalidade dele, sem precisar ler o código.

Getters e Setters

Você verá que criar getters e setters é algo repetitivo e entediante. Por esse motivo, ferramentas de desenvolvimento profissionais (como NetBeans) nos dispensam deste trabalho e permitem gerar tais métodos para os atributos que desejarmos. Este é um dos motivos destes métodos terem um padrão quanto ao nome.

results matching ""

    No results matching ""