Pergunta

Tenho discutido sobre o uso da palavra "acessador" (o contexto é programação Java).Tenho tendência a pensar nos acessadores como sendo implicitamente "acessadores de propriedade" - isto é, o termo implica que eles estão mais ou menos lá para fornecer acesso direto ao estado interno do objeto.A outra parte insiste que qualquer método que toque o estado do objeto de alguma forma é um acessador.

Eu sei que vocês não conseguem vencer a discussão para mim, mas estou curioso para saber como vocês definiriam o termo.:)

Foi útil?

Solução

Pelos acessores, eu tendem a pensar em getters e setters.

Ao insistir que todos os métodos que tocam o estado interno do objeto são acessadores, parece que qualquer método de instância que realmente usa o estado do objeto seria um acessador e que simplesmente não parece certo. Que tipo de método de instância não usará o estado do objeto? Em outras palavras, Um método de instância que não usa o estado do objeto de alguma forma não deve ser um método de instância para começar - deve ser um método de classe.

Por exemplo, deve o BigDecimal.add Método ser considerado um acessador? É um método que lerá o valor da instância que o add o método foi chamado, depois retornar o resultado após adicionar o valor de outro BigInteger. Parece bastante direto que o add O método da instância não é um getter nem um setter.

Outras dicas

Um método de acessador faz exatamente o que diz na lata: acessa algum estado a partir do tipo sem efeitos colaterais (além da instanciação preguiçosa, talvez, o que não é algo que o chamador normalmente saberia).

private int _age;

public int getAge()
{
    return _age;
}

Os métodos que modificam o estado são considerados mais úteis (na minha opinião) como mutadores.

Além do Google e da Wikipedia, o Especificação da linguagem Java Mostra isso como um exemplo de método acessador:

private static int N;
public static int getN() { return N; }

Então, sim, eu diria que isso obtém o valor de um campo. O compilador pode incluir isso, convertendo -o em uma leitura simples, portanto, algo mais do que isso provavelmente não é um acessador.

Métodos de acessórios: GetGreen e GetBlue

Esses métodos geralmente acessam um valor.

Métodos do mutador: Setred, setGreen, SetBlue

Um mutador vai mudar um valor

Eu sempre fui pela primeira definição. Portanto, geralmente isso se aplica apenas a getters e setters. Se seguirmos o segundo método, é uma distinção muito menos útil, pois isso abrange quase todos os métodos.

Métodos de acesso são usados ​​para acessar campos de um objeto.Portanto, getters e setters são métodos acessadores. Método observador é o termo certo para um método que faz uma observação mais geral sobre um objeto, sem causar efeitos colaterais observáveis ​​externamente.Um método cujo objetivo principal é causar efeitos colaterais é um método mutador.Portanto, os setters são um exemplo de um método mutador.Para boas práticas de engenharia, os setters públicos devem ser evitados porque tornam impossível para uma classe impor invariantes nos seus dados:eles violam a barreira de abstração que uma classe normalmente deveria impor.

É bom poder diferenciar getters e setters em conversas técnicas. Accessor Métodos são parceiros para modifier métodos. Accessors leia o estado de um objeto (getA()), enquanto modifiers escrever o estado (setA(Object)).

A method that provides access (can be 'read access' or 'write access') to the internals of an object is an 'accessor method'.

The authors here certainly uses it in this manner:

  1. http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

  2. http://c2.com/cgi/wiki?AccessorsAreEvil

I think the term may originate from Common Lisp (doesn't everything?) -- with setf used to modify the value of accessor slots.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top