Какое определение для & # 8220; метода доступа??

StackOverflow https://stackoverflow.com/questions/623618

  •  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

  • http://c2.com/cgi/wiki?AccessorsAreEvil р>

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top