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可以操作?
: (也就是第二種 吉娃娃.被針灸(長今);)
: 有點搞糊塗了, 請前輩指教.
說一下我的看法,
以針灸的例子來說
長今的方法是
長今.針灸(病人:吉娃娃)
有個病人提供方法 : 病人.被針灸(穴道)
吉娃娃繼承病人 (繼承或者實作,端看使用的語言不同)
在長今的針灸()裡,會去操作病人的被針灸(),
並且把針灸的穴道傳進去,
至於吉娃娃的這個穴道被針灸後的身理(心理?)反應,則是被隱藏在被針灸()裡面,
因此並不違反 data hiding
同理有個被咬的人提供方法 : 被咬的人.被咬(部位)
長今繼承被咬的人
在吉娃娃咬人的時候,呼叫被咬的人的被咬()... 好繞口 :P
並且把咬的部位傳進去,
長今被咬後會怎麼樣也是被隱藏在被咬()內
所以要是我的話,會寫成
被咬的人.被咬(部位)
{
流血(部位);
}
病人.被針灸(穴道)
{
病好了();
}
長今.針灸(病人)
{
病人.被針灸(湧泉穴);
}
長今.被咬(部位)
{
哭();
}
吉娃娃.被針灸(穴道)
{
生氣();
咬(長今);
}
吉娃娃.咬(被咬的人)
{
被咬的人.被咬(大腿);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.92.61.162
→
12/19 23:26, , 1F
12/19 23:26, 1F
討論串 (同標題文章)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30