天天看點

《對象揭密:Java,Eiffel和C++》勘誤與評述

《對象揭密:Java,Eiffel和C++》勘誤與評述

       本書原名:《Objects Unencapsulated:Java,Eiffel,and  C++》,作者Ian Joyner,是鮑志雲翻譯的,2003年7月人民郵電出版社出版。

首先說說對整本書的評價。這本書并不象媒體或者什麼其它方式對外界宣布的那樣:比較這三種流行的面向對象語言的。其實這本書是從面向對象設計的角度談面向對象語言應該怎樣設計,以及這些設計可能會碰到的問題,涉及的内容非常全面。當然它的立足點需要這樣一些實踐語言來作為例子,證明作者自己的觀點。其中,我們可以看到即使是像Ian Joyner這樣的面向對象大師,好像也有在細節位置出現問題的時候(當然也可能是鮑志雲翻譯的錯誤)。從中可以看出:面向對象思想其實與具體語言的具體文法細節和表達在很多地方并沒有什麼聯系,特别是和C++這樣複雜的語言。

盡管作者說他并不是為Eiffel語言作辯護,但是,作者對Java和C++語言還是有諸多挑剔的。其實Java在書中的角色很小,被批評的自然主要就是C++了。當然大多數觀點我還是同意的,但是裡面有些批評難免讓人覺得偏頗。例如對Java中的接口,對C++中的隔離等等。

書中有基礎概念性的錯誤,我不知道是作者本來就有的,還是鮑志雲翻譯的錯誤。

不過,這本書雖然在内容上很全面,但是有幾個錯誤是不能容忍的。例如:譯者序中RL7“使用”前面缺少了“避免”兩個字。雖然這個缺失很小,但是,這本書的價值,就因為這兩個字,沒有了任何價值。如果大家按照鮑志雲的意思,那麼就是鼓勵使用書中提到的所有不好的特性。其實意思剛好相反,我們反對使用書中提到的那些不好的特性。就因為這兩個字,我覺得翻譯者的水準大有問題,還不說這是他翻譯的第一本書。

    下面就給出我認為不對的地方,觀點是個人的,可以不必完全一緻!不過,裡面有幾個概念性的錯誤,我會特别指出,注意這些就是不可容忍的錯誤。

1     譯者的話P1 RL7   “使用”->避免使用

2     P8   “自洽”->自協調

3     P25  L2   ->的

4     P32  L10  好像沒有“1950年代”這種寫法吧?

5     P43  L3   ?

6     P56  RL12      “>=”->“<=”(這個地方真是一個低級錯誤)

7     P57  RL1 “存在”也是量詞運算符    (這裡是一個概念性的錯誤)

8     P58  L7   “提入”->“提出”

9     P60  L12  “ADC”->“IDC”

10    P60  譯注:這裡譯者明知有錯也不改正,難道國内的技術人員崇洋媚外到了這種地步?(這裡提一句,孟岩也是這樣,就在譯注中說明一下,書中錯誤居然也堂而皇之的保留)Ian Joyner大師也有這種低級錯誤,呵呵!

11    P73  RL4 删除“的”

12    P73~74  不知所謂

13    P96 L9    删除“所”

14    P97  RL2 “窮親戚”具體指什麼?

15    P98  “譯注1”有所偏頗,從表達的整體上說,等價

16    P116       RL5 “組合”->與前文中的“聚合”不一緻

17    P122       “融合”->混入(設計模式中這樣翻譯的)

18    P123       RL4 “得……”不知所謂

19       P127~128 問題同10

20       P130       L8   不知所謂

21    P121       S3   同上

22    P135       L2~3     同上

23    P147       RL10      “必要”->“必須”

24    P173       定義第二行    “Formal-generics”->Formal-generic      這裡居然連EBNF都寫錯了,并且還是定義,錯的太離譜了

25    P178       L6   “脹”->“膨脹”

26    P186       L5 L7      參考不是完整形式

27    P194       RS3 是不是概念上完全有錯誤?友元和内聯相似嗎?

28    P212       L4   “不定式”->“不變式”

29    P214       RL5 “Eiffel”->“Java”  這裡居然連批判得語言都寫錯了,無言

30       P233 L11 “發”->“發現”

31    P234       L3   “變量類型”簽名和變量類型有關系嗎?

32    P242       RL2 第二個“抗變”->“協變”(這裡是一個概念性的錯誤)

33    P302       L10  “到一些”->“一些”

34    P310       RL6 “不能證明”       這裡錯誤無法改正,這是一個巨大的概念性錯誤。從中可以看出Ian Joyner在理論上的欠缺,難道是7年前這個問題沒有解決???現在程式的正确性是可以證明的,但是證明的代價高昂,是以隻有核心的系統程式和關系到生命安全的程式才可能通過這種手段來保證程式的正确性。

35    P326       L4   “破化”->“破壞”

36    P326       RL1 “BITN”是什麼?

37    P329       用兩種方式做同一件事(這裡應該是實際的問題,Eiffel違反了自己的設計原則,呵呵!)

38    P364       RL10      删除“得”

39    參考書目       “DeMarco”換行居然中間沒有連字号

by:kangtian0

Blog:http://blog.csdn.net/kangtian0