作者seamanku (SEAMAN)
看板OOAD
标题Re: [问题] 类别之间的关系
时间Wed Dec 19 19:28:13 2007
※ 引述《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
1F:→ H45:晕了我.... 12/19 23:26