Когда объявлять методы как частные - PullRequest
3 голосов
/ 26 октября 2011

Я ищу конкретные и точные правила, чтобы определить, как видимость метода может быть объявлена. Это не зависит от языка, это относится к стандартным языкам ООП.

Ответы [ 6 ]

4 голосов
/ 26 октября 2011

Хорошее правило:

Члены не должны иметь большей доступности, чем им нужно.

Начните с private и сделайте их более доступными по мере необходимости.

1 голос
/ 26 октября 2011

С любым классом / объектом есть:
1. что он делает (поведение)
2. как он это делает (реализация)

Мир заботится о поведении вашего объекта.Это не должно (часто) заботиться о том, как он достигает этого поведения под капотом.Сохраняйте детали реализации частными и раскрывайте поведение.

1 голос
/ 26 октября 2011

В основном:

  • Публичный для того, когда метод должен быть доступен внешним классом.Здесь может подойти что-то вроде getState().
  • Приватный - для случая, когда метод не должен быть доступен любому другому классу, что-то вроде changeState(...).Как правило, это относится к фактическому изменению содержимого объекта - возможно, у вас будет публичный setX(int x), который просто вызывает приватный setXInternal(int x), таким образом, вы можете иметь дополнительную проверку типов / безопасность / и т.д.Чтобы быть в безопасности, вы могли бы также сделать все частным, пока это не будет иначе.
  • Защищенный в основном "открытый для дочерних классов, в противном случае закрытый".Может пойти в любую сторону.
0 голосов
/ 26 октября 2011

Публично для вещей, которые являются частью публичного API.
Защищено от непубличных функций, которые вы хотите, чтобы подклассы могли вызывать.
Приватный, если вы не хотите, чтобы подклассы копались в указанном методе (или даже знали о его существовании).

В C, C ++ и C # не забудьте пометить метод как виртуальный, если вы хотите, чтобы дочерний класс мог его переопределить.

0 голосов
/ 26 октября 2011

Я думаю, что полезность открытых, защищенных и закрытых ключевых слов заключается в том, чтобы сделать код более понятным.

Таким образом, вы бы использовали public для API класса, private, чтобы было понятно, как это сделать.НЕ расширяйте класс и не защищайте в любом другом случае.

Обычный прагматический подход никогда не использует private и использует только public или protected.

0 голосов
/ 26 октября 2011

Любая операция, которая не определяет поведение конкретного объекта напрямую, но полезна при реализации поведения объекта, является кандидатом на функцию закрытого члена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...