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自反關聯,所得到的對象圖是環狀結構;
——最小的環就是兩個對象的環,例如“人”之間的“夫妻”自反關聯。
?
?