精華區beta Programming 關於我們 聯絡資訊
※ 引述《gsj.bbs@bbs.nchu.edu.tw (國王的新衣)》之銘言: > ※ 引述《yoco.bbs@bbs.wretch.cc (眠月..)》之銘言: > > 事實上,OO 的理念就是希望「讓你(選擇)可以不用知道內部實際作業」, > 如果是這樣的話,OO中的 "繼承" 機制本身就成了一個自我矛盾的東西 > 對於既有物件作 "繼承" 的動作,多少都有 "修改" 現行物件的意味在內 > 但卻看不到原始的物件內部的狀況 > 於是這個機制就成了,在修改一個我不完全了解的程式(或者是黑箱) > 就像是在拆一個自己不是很了解的炸彈一樣 > 你說這樣安不安全 另外,針對多型性的部分再回一篇。 多型是伴隨繼承而來的, 這也使得 header file 能說更多話, 透過 language 本身的 self-description 特性省掉很多廢話註解。 假設中箱子繼承小箱子,大箱子繼承中箱子, 在 C++ 的 header 檔可以說得比較清楚: void foo(小箱子 / 是箱子都可以放); void foo(中箱子 / 至少要中箱子以上的才能放); void foo(大箱子 / 只准放大箱子); 設計的人可以根據他想要的限制, 選用不同型別的參數設計函式, 避免別人隨便亂塞東西進去。 更複雜的情形下這種特性又很有用, 像是中箱子 A 繼承小箱子,中箱子 B 繼承小箱子 大箱子 C 和 D 繼承中箱子 A, 大箱子 E 和 F 繼承中箱子 B.... 繼承的路線上開始有了分歧, 上面講的區別能力就更加顯著。 這個思考角度比較少書會提, 因為這必須站在「使用你程式的人」的角度思考, 必須要時常在寫 code 的時候替人著想才會留意, 而書上灌輸的概念通常沒有這麼實際, 有時只是一語帶過甚至根本不提。 在 C 要達到多型目的, 大都採用 struct 包 int + union 的手法, 因此只有唯一一條路可走: void foo(只要是箱子什麼都可以放); 如果你要限制人家不准放什麼, 那除了用力打註解以外別無它法。 而且很多人個性比較急躁, 看到一個 function 就想 call 看看, 為了想要成功的 call 它, 先把 type 對到是一定要的, 所以通常會先看 type 而不去看註解, 尤其是註解不是母語或是寫得相當冗長的時候... 這個倒是很久之前就有人非常無聊統計調查過的, 現在可能已經找不到了,參考參考吧。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Chung Cheng University Department: Computer Science and Information Engineering Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.16 > ╰─╮ ╚╦═╦╝ From:218-171-143-156.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 -- * Modify: tinlans 05/08/13 9:44:48 <218-171-143-156.dynamic.hinet.net>