看板 CSSE 關於我們 聯絡資訊
※ 引述《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)
Eventis:我認為dynamic binding是polymorphism的手段. 61.62.49.43 06/13
Eventis:而達成polymorphism卻不一定非得dynamic binding 61.62.49.43 06/13
Eventis:雖然缺了dynamic binding,polymorphism等於沒用. 61.62.49.43 06/13
godfat:真想聽更詳細的見解… Orz140.138.241.159 06/13