Каково определение "метод доступа"?

У меня был аргумент об использовании слова "accessor" (контекст - это Java-программирование). Я склонен думать, что аксессоры как неявно являются "аксессуарами свойств", то есть этот термин подразумевает, что он более или менее обеспечивает прямой доступ к внутреннему состоянию объекта. Другая сторона настаивает на том, что любой метод, который затрагивает состояние объекта каким-либо образом, является аксессуаром.

Я знаю, что вы, ребята, не можете выиграть аргумент для меня, но мне любопытно узнать, как вы определяете этот термин.:)

Ответы

Ответ 1

Аксессуарами я склонен думать о геттерах и сеттерах.

Настаивая на том, что все методы, которые касаются внутреннего состояния объекта, являются аксессуарами, кажется, что любой метод экземпляра, который фактически использует состояние объекта, будет аксессуаром, и это просто не кажется правильным. Какой метод экземпляра не будет использовать состояние объекта? Другими словами, метод экземпляра, который каким-либо образом не использует состояние объекта, не должен быть методом экземпляра для начала - это должен быть метод класса.

Например, следует ли рассматривать метод BigDecimal.add как аксессор? Это метод, который будет считывать значение экземпляра, на который был вызван метод add, а затем возвращает результат после добавления значения другого BigInteger. Кажется довольно прямолинейным, что метод экземпляра add не является геттером и установщиком.

Ответ 2

Метод доступа делает точно то, что он говорит о жесте: обращается к некоторому состоянию из типа без побочных эффектов (кроме ленивого экземпляра, возможно, это не то, о чем обычно узнал вызывающий).

private int _age;

public int getAge()
{
    return _age;
}

Методы, которые изменяют состояние, более целесообразно рассматривать (на мой взгляд) как мутаторы.

Ответ 3

Помимо googling и wikipedia, Java Language Specification показывает это как пример метода доступа:

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

Итак, да, я бы сказал, что он просто получает значение поля. Компилятор может встроить это, преобразовывая его в простое чтение, поэтому что-то большее, чем это, вероятно, не является аксессуаром.

Ответ 4

Методы доступа: getRed, getGreen и getBlue

Эти методы обычно получают доступ к значению.

Мутаторные методы: setRed, setGreen, setBlue

Мутатор будет мутировать значение

Ответ 5

Я всегда придерживался первого определения. Таким образом, как правило, это относится только к геттерам и сеттерам. Если мы пойдем вторым методом, то это гораздо менее полезное различие, поскольку оно охватывает почти все методы.

Ответ 6

Методы доступа используются для доступа к полям объекта. Таким образом, getters и seters - это методы доступа. Метод наблюдателя - это правильный термин для метода, который делает более общее наблюдение за объектом, не вызывая внешних наблюдаемых побочных эффектов. Метод, основной целью которого является вызывать побочные эффекты, является метод мутатора. Поэтому сеттеры являются примером метода мутатора. Для хорошей инженерной практики следует избегать публичных разработчиков, поскольку они не позволяют классу принудительно вводить инварианты в свои данные: они нарушают барьер абстракции, который обычно должен выполнять класс.

Ответ 7

Хорошо иметь возможность различать геттеры и сеттеры в техническом разговоре. Методы Accessor являются партнерами методов modifier. Accessor прочитайте состояние объекта (getA()), а modifier напишите состояние (setA(Object)).

Ответ 8

Метод, обеспечивающий доступ (может быть "доступ для чтения" или "доступ на запись" ) к внутренним объектам, является "методом доступа".

Авторы здесь, конечно, используют его таким образом:

Я думаю, что этот термин может возникнуть из Common Lisp (не все?) - с помощью setf, используемого для изменения значения слотов доступа.