Какое определение для & # 8220; метода доступа??
-
05-07-2019 - |
Вопрос
У меня был спор об использовании слова "accessor" (контекст - это программирование на Java). Я склонен считать, что методы доступа неявно являются «средствами доступа к свойствам» то есть термин подразумевает, что он более или менее обеспечивает прямой доступ к внутреннему состоянию объекта. Другая сторона настаивает на том, что любой метод, который каким-либо образом касается состояния объекта, является средством доступа.
Я знаю, что вы, ребята, не можете выиграть спор за меня, но мне любопытно узнать, как вы определите этот термин. :) Р>
Решение
При работе с аксессорами я склонен думать о геттерах и сеттерах.
Настаивая на том, что все методы, которые касаются внутреннего состояния объекта, являются аксессорами, кажется, что любой метод экземпляра, который фактически использует состояние объекта, будет аксессором, и это просто не кажется правильным. Какой метод экземпляра не будет использовать состояние объекта? Другими словами, метод экземпляра, который каким-либо образом не использует состояние объекта, не должен начинаться с метода экземпляра - это должен быть метод класса .
Например, если BigDecimal.add
считается средством доступа? Это метод, который считывает значение экземпляра, из которого был вызван метод add
, а затем возвращает результат после добавления значения другого BigInteger
. Вполне очевидно, что метод экземпляра add
не является ни получателем, ни установщиком.
Другие советы
Метод accessor делает именно то, что говорит на жесте: доступ к некоторому состоянию из типа без побочных эффектов (возможно, кроме ленивого создания экземпляра, о котором обычно может знать вызывающий объект).
private int _age;
public int getAge()
{
return _age;
}
Методы, которые изменяют состояние, более полезны (на мой взгляд) как мутаторы.
Помимо поиска в Google и википедии, Спецификация языка Java показывает это в качестве примера метода доступа:
private static int N;
public static int getN() { return N; }
Итак, да, я бы сказал, что он просто получает значение поля. Компилятор может встроить это, преобразовав его в простое чтение, так что что-то большее, чем это, вероятно, не является аксессором.
Методы доступа & nbsp;: getRed, getGreen и getBlue
Эти методы обычно получают доступ к значению.
Методы мутации & nbsp;: setRed, setGreen, setBlue
Мутатор изменит значение
Я всегда придерживался первого определения. Итак, как правило, это относится только к геттерам и сеттерам. Если мы пойдем вторым методом, то это гораздо менее полезное различие, поскольку оно охватывает почти все методы.
Методы доступа используются для доступа к полям объекта. Таким образом, методы получения и установки являются методами доступа. Метод наблюдателя - правильный термин для метода, который делает более общее наблюдение за объектом, не вызывая внешне наблюдаемых побочных эффектов. Метод, основной целью которого является побочные эффекты, является метод мутатора . Следовательно, сеттеры являются примером метода мутатора. В целях хорошей инженерной практики следует избегать общедоступных сеттеров, поскольку они не позволяют классу принудительно применять инварианты к своим данным: они нарушают барьер абстракции, который класс обычно должен применять.
Хорошо иметь возможность различать геттеры и сеттеры в техническом разговоре. Методы Accessor
являются партнерами методов модификатора
. Accessor
считывает состояние объекта ( getA ()
), а модификатор
записывает состояние ( setA (Object) код>). Р>
Метод, который обеспечивает доступ (может быть «доступ на чтение» или «доступ на запись») к внутренним объектам, является «методом доступа».
Авторы здесь, безусловно, используют это следующим образом:
<Ол>http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html
Я думаю, что термин может происходить из Common Lisp (не все?) - с помощью setf, используемого для изменения значения слотов доступа.