Scala 如何区分组合和自类型用例

Scala 如何区分组合和自类型用例,scala,composition,self-type,Scala,Composition,Self Type,Scala有两种表示对象组合的工具:原始的自我类型概念和众所周知的琐碎组合。我很好奇在什么情况下我应该用什么 它们的适用性存在明显差异。自我类型要求你使用特质。对象组合允许您使用var声明在运行时更改扩展 撇开技术细节不谈,我可以找出两个指标来帮助分类用例。如果某个对象用作复杂结构(如树)的组合器,或者只是有几个类似类型的零件(1辆车到4个车轮的关系),则应使用组合。有一个极端相反的用例。让我们假设一个特征变得太大而无法清晰地观察到,然后它就分裂了。在这种情况下,使用self类型是很自然的 这些

Scala有两种表示对象组合的工具:原始的自我类型概念和众所周知的琐碎组合。我很好奇在什么情况下我应该用什么

它们的适用性存在明显差异。自我类型要求你使用特质。对象组合允许您使用var声明在运行时更改扩展

撇开技术细节不谈,我可以找出两个指标来帮助分类用例。如果某个对象用作复杂结构(如树)的组合器,或者只是有几个类似类型的零件(1辆车到4个车轮的关系),则应使用组合。有一个极端相反的用例。让我们假设一个特征变得太大而无法清晰地观察到,然后它就分裂了。在这种情况下,使用self类型是很自然的

这些规则不是绝对的。您可以做额外的工作来在这两种技术之间转换代码。e、 g.您可以在产品4上用自打字代替4轮组合。您可以使用
Cake[T}
作为Cake模式的依赖项,但这两种情况似乎都违反直觉,给了您额外的工作

虽然有很多边界用例。一对一的关系很难确定。有没有简单的规则来决定哪种技术更可取

self-type让你的类变得抽象,composition让你的代码变得冗长。self-type让你在混合名称空间方面遇到问题,还免费给你额外的键入(你得到的不仅仅是两个元素的混合物,还有汽油弹)

我如何在它们之间进行选择?有什么提示

更新:

让我们讨论以下示例:


适配器模式。selt类型和组合方法有什么好处?

下面的提示来自启发式方法(当算法方法不可行时使用的解决问题的试错方法),不受任何公式(基于数学的推理)的支持

***这里给出的提示应该参考附带的提示进行评估,没有提示是区分组合和自类型用例的完美规则

(虽然遵循下面提到的提示,但我并不关心或关注代码的冗长性、行数或编程工作输入。)

组合(字典的意思):将部分或元素组合成一个整体的行为(琐碎的组合)

特征(字典上的意思):一种显著的特征或品质

琐碎成分的提示(可通过超子类机制或关联关系实现)(如汽车和车轮):

  • 可离散计算的(如车轮)

  • 可进一步分类(根据不同标准)(例如车轮-合金车轮、钢车轮等)

  • 可以添加或删除(注意:当我们说车轮停止时,实际上是车轮的转速停止,当我们说心脏停止时,实际上是心脏的脉动速度变为零)

  • 通常适用于少数情况(在宇宙中,有些车辆和机器有轮子) (很少有可能是10-15年或数百万年——为了解释,让我们理解这一说法:当地质学家谈论时间时,说一段时间以前,它意味着几百万年前,这取决于实际的主题)

自我类型提示(特征)(如汽车和速度):

  • 它是一维的(不是物理方面的),可以绘制在数字线上(无论物理单位是什么)(例如速度)

  • 无法进一步自然分类的(例如速度)(或者至少您不会进一步分类)在这里,这个词很自然地表达了这样一种含义:要对它进行分类,你必须根据你自己的标准,并且有一定的可能性将它分为数百万个亚类型。采取行动,你可以有数百万个移动子特征…如之字形移动、旋转和前进,。。。(各种排列组合的可能性为百万)

  • 可以增加、减少或停止(如速度、愤怒、爱等)

  • 通常可以在距离较远的班级看到(例如光速、地球速度、跑步者速度)

  • 通常适用于许多(宇宙中大多数(这里每个)物体都有速度)

    软件开发就像创造你自己的宇宙,作为创造者,你定义了一切。在你的领域(你自己的宇宙)中,在遥远的类中会发现一个特征

请注意,我在任何语言(我知道的很少)中都没有看到任何特定的单词(这里是trait的对应词)来表示用于琐碎构图的部分

进一步解释:

要得到答案,您需要深入了解面向类或面向对象的软件开发哲学,并需要了解java和scala(或更多)等编程语言创建者的思想和逻辑在这些语言中灌输了面向类或面向对象的范例

你需要的另一件事是对语义学的深入理解(通过分类和检查意义和形式的变化来研究意义或语言发展),我们用它来描述现实世界和我们作为程序员使用的关键字(在编程语言中)背后的语义学

我相信,当我们创建一个类时,我们希望把真实世界表现成软件,这个类成为现实世界中的东西的代表,可能是汽车、人类、星星、梦想、思想或想象等

当有人说“轮子”时,你们会清楚地看到它的形状和用途,你们可以想到一个或多个在路上滚动的轮子。轮子总是某事物的一部分