看板 Soft_Job 關於我們 聯絡資訊
不曉得在 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
tw0517tw: 合適阿 你看上面戰得多熱鬧 03/03 18:28
csfgsj: 面對面,萬一一言不合幹起來… 03/03 19:20
vaio5566: 就會有新生命誕生了 03/03 19:40
robler: 新的簽名檔也誕生了XD 03/03 19:40
TW0981081007: 剛把Programming版加入我的最愛。 03/03 19:53
zero0828: 其實有ooad版,只是現在那邊很冷清 03/03 20:19
banjmin: 推正確的觀念 03/03 20:21
AmosYang: 推這篇 03/04 01:04
AmosYang: 補推 03/04 01:06
rofellosx: 我認為真正的誤解是物件導向的繼承和語言上class繼承 03/04 12:00
rofellosx: 有所不同.. 03/04 12:00