作者reader (讀者)
看板CSSE
標題Re: [問題] oop
時間Sun Jun 12 04:08:54 2005
※ 引述《spanky (小莫)》之銘言:
: 有4個特點
: Encapsulation
: Imfomation hiding
: Inheritance
: Polymorphism
: 我總覺得Encapsulation Information hiding
: 根本是一樣的東西
: 因為有了前者當然會有後者的產生
: 可是為什麼要分開列出呢
: 這其中有什麼差異嗎???
這好像是我在十年前搞的東西了,嗯,記得我們那幾個討論的結果,
都覺得資訊隱藏不是物件導向獨有的特性,而是物件導向所要達成的
目標之一,所以在寫書時就以封裝、繼承、動態連結 (多型) 為物件
導向的三個主要特性,而不是四個。
資訊隱藏不必然要經由封裝達成,所以這兩者分開是對的,但把資訊
隱藏視為物件導向的特性,我覺得這也太獨斷了,資訊隱藏算是一種
軟體製作上的一個概念,我們希望軟體能朝著這個方向走,但被這樣
一講,就會變成物件導向佔住了歷史的發展方向,這個說法頗有宣傳
性質而不太誠懇。
實際上從模組化程式設計興起,所有的軟體技術都宣稱它們可以達成
資訊隱藏,然後每一種技術的資訊隱藏定義都不太一樣,於是只有它
一家能夠成立,別家都是有問題的。
還可以特別一說,早年模組化程式設計興起時,就已宣稱達成了資訊
隱藏,而在 C 和 Pascal 之爭當中, C 就是在這一點上吃了大虧,
被譏為開歷史倒車,結果到了 C++, 資訊隱藏反而是成為物件導向的
成就了。歷史都是由成功者定義的,由此可見一班。
這東西要討論起來還頗複雜,認真來說,物件導向也還離完全的資訊
隱藏甚遠,倒是像 Prolog 這類先天就不需要在乎內部實作的語言,
才是真的資訊隱藏。
不只資訊隱藏,這些特性歸納全都是有問題的,每一個都有例外,有
封裝未必是物件導向,物件導向也未必有繼承和多型,只是大家喜歡
簡化過的東西,所以就成了主流的、簡單易明的判準而已,特別是在
C++ 獨大的狀況下。
--
※ 編輯: reader 來自: 61.222.173.29 (06/12 04:12)
1F:推 Eventis:我認為dynamic binding是polymorphism的手段. 61.62.49.43 06/13
2F:→ Eventis:而達成polymorphism卻不一定非得dynamic binding 61.62.49.43 06/13
3F:→ Eventis:雖然缺了dynamic binding,polymorphism等於沒用. 61.62.49.43 06/13
4F:推 godfat:真想聽更詳細的見解… Orz140.138.241.159 06/13