作者H45 (!H45)
看板OOAD
标题Re: [问题] 类别之间的关系
时间Sun Nov 18 19:55:52 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可以操作?
: (也就是第二种 吉娃娃.被针灸(长今);)
: 有点搞糊涂了, 请前辈指教.
嗯,一开始被误导了,我想你的意思应该是
第一种:
长今.针灸(吉娃娃);
吉娃娃.咬(长今);
第二种:
吉娃娃.被针灸(长今);
长今.被咬(吉娃娃);
好!那麽该选择哪一种比较好?
就目前线索的答案应该是:都可以
如果吉娃娃未来可以咬其他的东西,不仅仅是长今
那麽第一种方法的吉娃娃需要增加很多方法:
吉娃娃.咬(长今);
吉娃娃.咬(第二种东西);
吉娃娃.咬(第三种东西);
这种情况最好把「咬」放在被咬的类别里面
也就是:
长今.被咬(古娃娃);
第二种东西.被咬(吉娃娃);
第三种东西.被咬(吉娃娃);
如此一来,每次有新的东西要被咬,就不需要更改已经写好的类别。
但是如果可以会咬人的东西很多,不仅仅是吉娃娃
那麽第二种的长今需要增加很多方法:
长今.被咬(吉娃娃);
长今.被咬(第二种东西);
长今.被咬(第三种东西);
这种情况最好把「被咬」放在会咬人的类别里面
也就是:
吉娃娃.咬(长今);
第二种东西.咬(长今);
第三种东西.咬(长今);
如此一来,每次有新的东西要咬人,就不需要更改已经写好的类别。
可怜的长今一直被咬....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
※ 编辑: H45 来自: 140.116.247.13 (11/18 19:56)