DDD领域驱动设计批评文集
做强化自测题获得“软件方法建模师”称号
《软件方法》各章合集
《分析模式》第2章这一段:
划线处的single inheritance,2004中译本的翻译:
翻译为“单继承”,是正确的。
2020中译本的翻译:
翻译为“唯一的继承”,这个就不对了。
这里的single inheritance应该就是面向对象编程语言里面的single inheritance。
找了几本不同编程语言的书,看看其中是怎么翻译的:
single inheritance主要出现在一些编程语言中。UML规范用的词是generalization,不是用inheritance,所以,纯UML建模书里面不一定会出现single inheritance的用词。
百度,我们搜‘“single inheritance 继承”,出来的是“单继承”:
我们来看另外一个问题:
如果译者觉得就是不喜欢把single inheritance译作“单继承”,创新一下,译作“唯一继承”,可不可以呢?
我们来看看下面这个图:
我们还是顺着《分析模式》原文,以医生作为例子。医生按科室分子类,有儿科医生、内科医生、外科医生,按级别分子类,有住院医生、主治医生、主任医生。
这是不同的泛化集(generalization set),表现为两棵泛化树。
图上依然是“单继承”,一个类最多有一个超类,但不是“唯一的继承结构”。
**********
我们看一下自反关联的不同多重性所得到的对象图的不同结构,就可以知道原文的意思。
多对多自反关联,所得到的对象图是网状结构;
1对多自反关联,所得到的对象图是树状结构;
——只允许单继承的泛化结构,有泛化关系的类就组成了一棵树。当子类被取消,成为“**类型”的一个实例时,之前由类组成的树,就变成了“**类型”的实例组成的树,即“**类型”的1对多自反关联的对象图。
0..1对0..1自反关联,所得到的对象图是队列结构;
严格的1对1自反关联,所得到的对象图是环状结构;
——最小的环就是两个对象的环,例如“人”之间的“夫妻”自反关联。