如何谈论伴侣对象与常规对象?

Chr*_*aki 34 scala companion-object

我是第一次教斯卡拉,我的学生们发现故意"惩罚"涉及伴侣物体非常混乱.请考虑以下示例:

class Stack {
  ... methods such as push/pop
}

object Stack {
  ... factory method(s) and possibly others
}
Run Code Online (Sandbox Code Playgroud)

当我使用诸如"堆栈对象"或"堆栈对象"之类的语言短语或尤其是"堆栈对象"时,会出现混淆.我的学生很难理解我是指单身对象Stack还是Stack类的对象.

我正在寻找替代方法来表达这些初学者可以更容易理解的东西.我一直认为Stack类的对象总是称为"Stack实例"或"Stack的实例",但是当试图教OO不能称这些东西为对象时,它似乎很疯狂.在谈论单例对象Stack时,我一直试图总是使用短语"singleton object"或"companion object",但Scala的语法在那里对我不利,因为它只使用了"object"这个词.

在这种情况下,我可以重命名单例对象StackFactory而不是Stack,但这只是我自己的类的一个选项,而不是已经内置到Scala中的一千个和一个伴随对象.

编辑:

对不起,我的问题不够清楚.主要的混淆不是在引用伴侣对象时发生的.在这种情况下,正如几个人所指出的那样,很容易使用诸如"伴侣对象"之类的短语.相反,在引用普通实例时会发生主要的混淆.然后,如果我说"堆栈对象"(意思是一些堆栈实例)或"堆栈对象"(意味着这个特定实例),一些学生会认为我的意思是伴侣对象 - 即使我没有使用单词伴侣或单身人士.

我可以很好地看到混淆来自哪里,因为"对象"这个词只出现在程序文本中,只出现伴侣对象中.

Mar*_*sky 19

我认为Stack singleton(如果它是独立的)或Stack companion(如果它有一个类)是最好的命名方式object Stack.Scala语言参考将它们称为模块.但是,模块现在已经与运行时实体(如在OSGI中)过多关联,以便对此感到满意.


Ada*_*yga 17

我认为使用短语"伴侣对象"应该足够清楚.

  • 它甚至可以简化为"伴侣",就像"堆栈伴侣"一样. (3认同)

soc*_*soc 8

Scala中的这个问题当然不是没有讽刺意味,但即使在Java空间中,也可能存在关于java.lang.Object其实例,类和类的实例的命名问题.

对于Scala,我提出以下术语:

  • 调用实例化对象"实例"
  • 调用objects"对象"

最后,我会说OO的概念包括对象(在模块和组合的意义上)和对象(在实例意义上).

无论你如何决定,一致性是关键,特别是对于教学.

  • 这两个规则(调用实例化对象实例,调用对象对象)将大大减少在Scala中的混乱,但当这些学生转向其他OO语言时可能会增加混淆. (4认同)

Vik*_*ang 7

我会去的

  • "Stack"==类Stack
  • "Stack的伴侣"== Stack类的伴随对象
  • "堆栈"==类Stack的实例