没有会员时,课程是否特别?

时间:2010-01-25 12:55:21

标签: language-agnostic design-patterns

我刚认识到我的一些课程没有成员。它有几个公共函数和私有函数,一切都通过参数。我意识到函数式程序员一直这样做,但是如果它在类之外没有访问任何内容并且只使用它的参数进行读取(除了params和返回值之外),这个类被认为是特殊的吗?

我知道这个类可以是静态的,但静态类可以修改外部变量。我想知道这是一种技术,还是一种语言可能会给这种方式带来额外的好处等等。

-edit-这看起来像一个维基,所以让它成为一个。

8 个答案:

答案 0 :(得分:7)

它被称为“无国籍”。没什么特别的。

答案 1 :(得分:4)

没有成员的班级没有错;控制器经常这样做。

是的,你可以去静态,但是是静态的,你允许从你的无成员类继承,如果你愿意的话,可以添加成员。

答案 2 :(得分:3)

是的,这使得该类完全是线程安全的,因此不需要锁定。对我来说,这是一个很棒的属性。

答案 3 :(得分:2)

如果没有成员,则除了拥有命名空间之外不需要其他类。如果您使用Python进行编程,那么您只需将这些方法放入模块中,而不必担心类。如果您使用的是Java,那么必须使用一个类。如果你使用的是C ++,那取决于你 - 但也许你应该考虑只使用命名空间而不是类,以减少它的混乱。

答案 4 :(得分:2)

当函数不需要任何持久数据时,Sane编程语言允许您在类之外定义函数 - 如果您可以在适当的命名空间中定义它,那就更好了。如果您的语言不允许,至少在静态类中定义它们,因此很明显没有访问或变异状态。总的来说,这让我想起an excellent article关于以“纯OOP”的名义滥用课堂的不合逻辑。{/ p>

答案 5 :(得分:1)

我会让这个类变得静态。我不认为它会给它保持非静态有什么好处。但话说回来 - 我是.NET开发人员,而不是Java。这些语言很接近,但我发现还有许多微妙的差异。

答案 6 :(得分:1)

请记住,你的类的所有方法(甚至是无状态的)都有一个特殊的变量 - 对象的指针/引用 - 这个(self,whatever),它们适用于它们。

因此,如果它的方法可以被覆盖,那么在这种无状态类中是完全有意义的:在这种情况下,你必须通过这个来提供类调度。 (当然它只是模仿一流的函数,所以如果你的语言已经有了,那么这种技术就没有意义了。)

目前我无法想象为什么你需要没有任何虚拟方法的无状态类。 除非您希望通过键入objectName和dot来在IDE中进行良好的自动完成:)

答案 7 :(得分:0)

它的简单课程没有专长。

但我不明白在没有成员的情况下使用公共或私人方法有什么用处。因为成员方法是那些作用于特定实例状态的方法。

是的,你可以使用静态方法。