Smalltalk 性格是好还是坏?

Smalltalk 性格是好还是坏?,smalltalk,squeak,traits,pharo,Smalltalk,Squeak,Traits,Pharo,这是一个开放性的问题,但我想征求SO社区对特征的一些意见;你认为Squeak/Pharo中的特征是一件好事,还是应该远离它们,转而使用组合和委派?我问这个问题是因为虽然我知道如何使用它们(多亏了Pharo的书),但我并不确定使用它们的可接受程度,也不确定在哪里可以使用它们,在哪里不可以使用它们。我不喜欢traits,因为它们在代码中引入了强烈的依赖性。这些依赖关系可以是明显的(一个导入特性的类,一个需要方法的特性),但也可以是非常微妙的(一个隐藏超级方法/实例变量的特性)。此外,没有足够的工具支

这是一个开放性的问题,但我想征求SO社区对特征的一些意见;你认为Squeak/Pharo中的特征是一件好事,还是应该远离它们,转而使用组合和委派?我问这个问题是因为虽然我知道如何使用它们(多亏了Pharo的书),但我并不确定使用它们的可接受程度,也不确定在哪里可以使用它们,在哪里不可以使用它们。

我不喜欢traits,因为它们在代码中引入了强烈的依赖性。这些依赖关系可以是明显的(一个导入特性的类,一个需要方法的特性),但也可以是非常微妙的(一个隐藏超级方法/实例变量的特性)。此外,没有足够的工具支持特征


根据我的经验,代表团用动态类型的面向对象语言(如Smalltalk)提供了一个更好、更可重用的设计。

事情各有利弊。卢卡斯正确地提到了许多缺点:

  • 在代码中引入强依赖关系
  • 没有足够的工具支持
第二个也许有一天会消失,但第一个不会

traits的目的是防止当两个不共享对象以外的超类的类共享一个实例方法时发生代码重复。现在,有时授权可以解决这个问题,但通常不能。因此,特质的优点是:

  • 减少代码重复
我的结论是缺点太重了。我认为,无论是今天还是永远,代码复制都是不可避免的。当委托不起作用时,我甚至可以想象代码复制并没有那么有害,因为它常常先于复制的代码片段的不同演化