【发布时间】:2011-04-05 20:29:53
【问题描述】:
我经常在专业环境中使用 R 进行编程,我也为客户或同事编写包。这里的一些程序员有 Java 背景,坚持以面向对象的方式做所有事情,使用 S4 方法。另一方面,我的经验是,当试图让代码做你想做的事情时,S4 实现的性能通常会更差,并且会引起更多的头痛。
我绝对同意,在某些情况下,您必须能够以受控方式构造复杂对象或附加现有对象。但大多数时候,S4 实现也可以使用经典列表轻松完成,而无需像定义标准泛型、方法、构造函数、初始化程序等那样麻烦。
您何时考虑为 R 编写 S4 实现?
编辑:为了清楚起见,我非常感谢 R 中关于 OO 的一般答案和讨论。OOP 可以在 R 中以多种方式完成,但我的问题实际上是针对专门使用 S4 方法的附加值。
【问题讨论】:
-
但是 S3 是一个合法的面向对象!它比 S4 更现代、更灵活。
-
@Joris 多重继承?可以通过将对象及其类与
c合并来完成。正式验证?没有人说 OOP 必须通过严格的类型来完成; Smalltalk 就是一个引人注目的例子。总的来说,我认为 OOP 只是一种方式,因此没有“规范”的 OOP(尽管人们通常会选择他们最喜欢的语言并说它定义了它)。 -
@mbq :好的,那么你就明白什么是 OOP 什么不是了。您可以通过仅使用列表并手动设置所有属性来轻松地编程面向对象的方式。 My Colleagues 来自 Java 背景,如果它迫使您以面向对象的方式进行操作,则称为 OOP。 S3 没有,S4 为他们做,我也有同样的感觉。您的里程可能会有所不同,但我认为您确实同意 S3 和 S4 是两种不同的野兽。我想要一些关于 S4 使用的想法,而不是关于 R 中的 OOP 到底是什么的语义讨论。
-
我认为部分问题在于 S3 和 S4 都没有提供真正符合 Java/C++ 类型世界的人将习惯的 OO 结构,一切都在进行对于精通这种 OO 风格的人与接触过 Lisp、Dylan 等的人来说,显得陌生。
-
@geoffjentry 好点!而这并不会使它们“少 OO”。