作者oaz ()
看板Soft_Job
標題Re: [閒聊] OOP小評
時間Thu Mar 5 22:34:27 2015
※ 引述《csfgsj (Lazy bone)》之銘言:
: ※ 引述《oaz ()》之銘言:
: : 那我再舉例,假設鞋子(資料)有一個動作(程序)叫綁鞋帶
: : 你會預期
: : I. 鞋子.綁鞋帶() 會只作用在這雙鞋?
: : II. 鞋子.綁鞋帶() 不但會作用在我腳上的鞋子,還會作用在隔壁鄰居的鞋子上
: : III. 所有人的鞋子的綁鞋帶動作,都統一在某間放裡
: 開放體系就是在我得到這雙鞋子時
: Struct Shoes {…..}
: 我不必去預先設定我會對它作什麼動作
: 對鞋子的動作可能當時有一些
: A( shoes *);
: 以後有可能再去想到另外一些
: B( shoes *)
: 我不用一開始就把所有東西都設死
看了您的寫法,我很好奇您的 Highheels 的寫法
寫法一:
strict Highheels {
// cp Shoes
// 新增 Highheels 特殊的
}
Highheels_A(Highheels*) {
// cp A()
}
Highheels_B(Highheels*) {
// cp B()
}
寫法二:
strict Highheels {
// cp Shoes
// 新增 Highheels 特殊的
}
沒有 Highheels_A() 和 Highheels_B()
如果是寫法一,你在複製時要改超多東西的
你確定你不會出錯?
直接用繼承反而更省力安排
如果是寫法二 那是災難吧!
你確定不會有一天把 Shoes 或 Highheels 的欄位移除?
難怪你會說重構是鬧革命!
寫法二不是沒有人這樣玩,gtk 好像就是這樣寫
但 gtk 寫了一些 macro,
基本上是在做類似繼承的事
那是因為 C 不支援繼承
--
Sent from my Android
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.70.203.78
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1425566070.A.0FA.html
→ dreamnook: 有同感=_= 03/05 22:36
推 CaptainH: 以他的寫法而言,重構跟重寫是一樣的 03/05 22:42
→ CaptainH: 其實他從shoes特化為highheels也是重寫,哈哈哈 03/05 22:43