※ 引述《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>