У меня проблемы с разграничением методов доступа / геттеров, которые представляют свойства объекта и обычные методы.В C ++ соглашения об именах для методов доступа и обычных методов различаются (например, руководство по стилю Google предлагает строчные буквы для методов доступа и PascalCase для обычных методов).Кроме того, порядок обычных методов и методов доступа / получателей (до или после) также является предметом соглашений.В Java может возникнуть дилемма, должен ли метод начинаться с «get» или «compute» / «find», чтобы указывать метод получения и нормальный метод, соответственно.В C # возникает дилемма, каким должно быть свойство, а каким должно быть метод.Всякий раз, когда я создаю новый класс, я не уверен, как классифицировать методы к обычным методам и получателям.
Есть ли простой способ определить, является ли свойство объекта / средства доступа / получателя и что должно бытьобычный метод?
И имеет ли какое-либо из перечисленных ниже отношение к разнице между средством доступа / получателем и обычным методом:
- Вычисление дешево
- Новый (или копия) возвращается, вместо (const) ссылки
- Нет сеттера
- Существует способ повлиять на это "свойство", но косвенно
Чтобы проиллюстрировать это, вот пример (на C ++): Предположим, я хочу создать структуру данных, которая может содержать фиксированное количество элементов, и кроме операций вставки / удаления, она предлагает ряд методов, которые работают надсодержащиеся элементы (то есть среднее, медиана, минимум, максимум и т. д.).Теперь возьмем функцию, которая вычисляет среднее значение, например;Можно сказать, что это свойство объекта, и пересчитывать его всякий раз, когда элемент вставляется / удаляется, и, таким образом, обрабатывать его как метод получения, подобный const double& average()
.Другой способ - вычислить его по требованию и рассматривать как обычный метод, т. Е. double ComputeAverage()
.Также предположим, что есть метод, который возвращает набор содержащихся элементов;он может рассматриваться как получатель const set<int>& unique_elements()
, если нет необходимости каждый раз вычислять его, но если класс вычисляет его каждый раз, тогда set<int> ComputeUniqueElements()
будет более подходящим.