Re: [問題] 類別之間的關係
※ 引述《sfp (Fru:z)》之銘言:
: http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=6679&blogId=296
: 縮網址 http://0rz.tw/f43g6
: 我的問題是第二張圖:
: 針灸
: -------->
: 長今 <-------- 吉娃娃
: 咬
: 問題: 「咬」是誰的method? 「針灸」又是誰的method?
: 是
: 長今.針灸(吉娃娃);
: 吉娃娃.咬(長今);
: 還是
: 吉娃娃.被針灸();
: 長今.被咬();
: 看來好像第一種比較直覺,
: 不過, 這不是代表, 被針灸時吉娃娃的狀態改變?
: 也就是說長今必須對吉娃娃的資料進行操作?
: 可是, 站在data hiding/encapsulation的立場, 對吉娃娃做的一切動作,
: 不是都要透過吉娃娃的 public interface(methods, properties) 來達成嗎?
: 也就是說, 也許要讓吉娃娃提供一個針灸的method, 讓它的client可以操作?
: (也就是第二種 吉娃娃.被針灸(長今);)
: 有點搞糊塗了, 請前輩指教.
嗯,一開始被誤導了,我想你的意思應該是
第一種:
長今.針灸(吉娃娃);
吉娃娃.咬(長今);
第二種:
吉娃娃.被針灸(長今);
長今.被咬(吉娃娃);
好!那麼該選擇哪一種比較好?
就目前線索的答案應該是:都可以
如果吉娃娃未來可以咬其他的東西,不僅僅是長今
那麼第一種方法的吉娃娃需要增加很多方法:
吉娃娃.咬(長今);
吉娃娃.咬(第二種東西);
吉娃娃.咬(第三種東西);
這種情況最好把「咬」放在被咬的類別裡面
也就是:
長今.被咬(古娃娃);
第二種東西.被咬(吉娃娃);
第三種東西.被咬(吉娃娃);
如此一來,每次有新的東西要被咬,就不需要更改已經寫好的類別。
但是如果可以會咬人的東西很多,不僅僅是吉娃娃
那麼第二種的長今需要增加很多方法:
長今.被咬(吉娃娃);
長今.被咬(第二種東西);
長今.被咬(第三種東西);
這種情況最好把「被咬」放在會咬人的類別裡面
也就是:
吉娃娃.咬(長今);
第二種東西.咬(長今);
第三種東西.咬(長今);
如此一來,每次有新的東西要咬人,就不需要更改已經寫好的類別。
可憐的長今一直被咬....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13
※ 編輯: H45 來自: 140.116.247.13 (11/18 19:56)
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-2
34