[閒聊] 關於所謂 OO 繼承的觀念

看板Soft_Job作者 (Gnimnek168)時間9年前 (2015/03/03 18:24), 編輯推噓6(605)
留言11則, 9人參與, 最新討論串1/1
不曉得在 Soft_Job 本版 po 該主題是否有適合?不知道討論軟體設計相關議題的文章改 擺在哪一個版區? 因個人從有撥接式BBB時代以來,就經常遇到討論版上的「筆戰」,且碰到往往為了要捍 衛自己的言論而導致人身的攻擊,這是不樂見的現象。 如果真有許多版友們從事軟體開發、設計一職者,對所謂的「物件導向」相關議題有興趣 者,倒是可以利用假日 (星期六、日)聚在一起研討與相互交換心得。我們經常會在位於 吳興街巷子 (莊敬路口旁)的「加爾第咖啡」聚會,那邊有地下室免費無線上網 (筆電可 免費插電),甚至可以攜帶投影機作簡報。 言歸正題,對於物件導向其中關於所謂的「繼承」往往很容易引發誤解。C++ 使用「繼承 」-Inheritance 這字眼本來就很不合適,從字義解讀,常會以為子類別係由父類別所衍 生而來的,其實類別之間從來就沒有存在什麼基因或誕生等這些關係的;而後 Java/.NET 等主流OOP則改採為「extend」這個關鍵字就合理多了。至於 UML 在設計層 次對「繼承」的用語,則是採用「一般化-特殊化 (generalization - specialization) 」那就更清楚了。 「extend」主要有兩種目的:一為覆蓋 (override)原父類別 (其實稱為 super-class 較 適合);另一為擴展原父類別所沒有的行為。前者即會帶出「多型 (polymorphism)」的重 要觀念。(這在設計 Framework 是會常看到的應用;或從 Design Patterns 一書就可以 看到這些大量的範例。) 一般程式設計人員最容易誤解物件導向的繼承觀念就在於,以為繼承是被用來「可重用 (reuse)」的:可重用既有的程式碼。其實繼承的最重要原則是在於:「可被替代性 (substitutability)」,而這正是物件導向另一個非常重要的思維– 「多型 (polymorphism)」:讓外界 (client)能以「一視同仁」的角度來看待多個特殊化類別所 抽象出的一般化類別! 這裡引用軟體巨擘 Grady Booch (UML 規格制訂者三巨頭)對於「繼承」的一段解釋 (Object-oriented analysis and design, Grady Booch, 1999, p. 61): As we evolve our inheritance hierarchy, the structure and behavior tat are common for different classes will tend to migrate to common superclasses. This is why often speak of inheritance as being a generalization/specialization hierarchy. (如同我們逐步發展我們的繼承階層,不同的類別往往會把它們之間某些相同的結構或行 為發展成為一般性的父類別。這也就是為什麼我們會把繼承稱之為「一般化/特殊化」階 層的緣故。) -- FB 社團:軟體設計鮮思維 http://ppt.cc/~4VN -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.107.221 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1425378247.A.217.html

03/03 18:28, , 1F
合適阿 你看上面戰得多熱鬧
03/03 18:28, 1F

03/03 19:20, , 2F
面對面,萬一一言不合幹起來…
03/03 19:20, 2F

03/03 19:40, , 3F
就會有新生命誕生了
03/03 19:40, 3F

03/03 19:40, , 4F
新的簽名檔也誕生了XD
03/03 19:40, 4F

03/03 19:53, , 5F
剛把Programming版加入我的最愛。
03/03 19:53, 5F

03/03 20:19, , 6F
其實有ooad版,只是現在那邊很冷清
03/03 20:19, 6F

03/03 20:21, , 7F
推正確的觀念
03/03 20:21, 7F

03/04 01:04, , 8F
推這篇
03/04 01:04, 8F

03/04 01:06, , 9F
補推
03/04 01:06, 9F

03/04 12:00, , 10F
我認為真正的誤解是物件導向的繼承和語言上class繼承
03/04 12:00, 10F

03/04 12:00, , 11F
有所不同..
03/04 12:00, 11F
文章代碼(AID): #1KzOl78N (Soft_Job)