Класс особенный, когда у него нет членов? - PullRequest
8 голосов
/ 25 января 2010

Я просто понимаю, что у некоторых из моих классов нет участников. У него есть несколько открытых функций и, возможно, частных, и все проходит через params. Я понимаю, что функциональные программисты делают это все время, но считается ли этот класс особенным, если он не обращается к чему-либо вне класса и использует только свои параметры для чтения (кроме выходных и возвращаемых значений)?

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

-edit- Это похоже на вики, поэтому давайте сделаем его одним.

Ответы [ 8 ]

7 голосов
/ 25 января 2010

Это просто называется "без гражданства". Ничего особенного в этом нет.

4 голосов
/ 25 января 2010

В классе, в котором нет членов, нет ничего плохого;контроллеры делают это очень часто.

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

3 голосов
/ 25 января 2010

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

3 голосов
/ 25 января 2010

Если нет членов, тогда нет необходимости в каком-либо другом классе, кроме наличия пространства имен. Если бы вы программировали на Python, вы просто поместили бы эти методы в модуль и не беспокоились бы о классе. Если вы работаете в Java, то класс является обязательным. Если вы работаете в C ++, вам решать - но, возможно, вам следует подумать об использовании только пространства имен, а не класса, чтобы сделать его менее запутанным.

2 голосов
/ 25 января 2010

Разумные языки программирования позволяют вам определять функции вне классов, когда функциям не требуются постоянные данные - если вы можете определить их в соответствующем пространстве имен, тем лучше. Если ваш язык не позволяет этого, по крайней мере определите их в статическом классе, чтобы было ясно, что ни одно состояние не доступно или не изменено. В целом, однако, это напоминает мне о превосходной статье о нелогичном злоупотреблении классами во имя «чистого ООП».

1 голос
/ 25 января 2010

Помните, что все методы вашего класса (даже без сохранения состояния) имеют одну специальную переменную - указатель / ссылку на объект - это (self, что угодно), для которого они применяются.

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

В настоящий момент я не могу представить, зачем вам нужен класс без состояния без какого-либо виртуального метода. Если вы не хотите иметь хорошее автозаполнение в вашей IDE, набрав objectName и dot:)

1 голос
/ 25 января 2010

Я бы сделал класс статичным. Я не вижу, какое преимущество это даст, чтобы оно не было статичным. Но опять же - я разработчик .NET, а не Java. Языки близки, но есть много тонких различий, о которых я не знаю.

0 голосов
/ 25 января 2010

его простой класс, в котором нет специальности.

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

Да, вы можете использовать статические методы.

...