关于小明捕鱼引发的思考

ping17909 2008-02-13 03:28:52
大家讨论讨论如下场景该如何建模:
1.小明是一个人
2.小明会捕鱼
3.并不是所有的人都会捕鱼
4.海鸥也会捕鱼,但技术跟小王的肯定不一样
5.小王是小明的朋友,他从小明这里学到了同样的捕鱼本领
6.小明和小王可以共同捕鱼,发明了两人协同捕鱼的技术
7.捕鱼分为不同等级,小明是老手,而小王还是新手
8.小明会开车,他开着自己的车去卖鱼
9.小王不会开车,只能骑三轮车去卖鱼;后来他学会了开车,也开着车去卖鱼了;
10.小明开的是奥迪,小王开的是奥拓
...全文
459 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ping17909 2008-02-13
  • 打赏
  • 举报
回复
楼上的意思增加一个接口IPartener,如下:
interface ITwoHumanFisherCast extends IFisherCast{
void setPartener(Human human2); //设置同伴
Human getPartener(); //获取同伴
}
增加两个方法;

使用时FisherCastHumanImpl和FisherCastAnimalImpl不必实现新的两个方法,
而FisherCastTwoHumanImpl要实现。


也是不错的办法;
dgqbcht 2008-02-13
  • 打赏
  • 举报
回复
我觉得这就要看你怎么看“协作捕鱼”与“捕鱼”的关系了,我觉得可以把“协作捕鱼”作为“捕鱼”的子接口,然后两个人实现“协作捕鱼”接口,可以根据需要觉得是实现“捕鱼”还是实现“协作捕鱼”。
ping17909 2008-02-13
  • 打赏
  • 举报
回复
接口是尽量要稳定,如果扩展接口,则FisherCastHumanImpl和FisherCastAnimalImpl也要实现这两个方法;
这是违背设计原则的;从上图可以看出,三个实现类都依赖于该接口;
不知道有没有其他好的办法?
ping17909 2008-02-13
  • 打赏
  • 举报
回复
回复:
发表于:2008-02-13 16:50:529楼 得分:0
另外发明应该也是个方法吧,俩人“发明”了协作捕鱼的方式。


你说的这个的是个好问题,这就是考验系统是否具有扩展性;
两人捕鱼和一个人捕鱼的实现肯定是不同的。
如果考虑两个人捕鱼的情况,就应该写另一个实现类(FisherCastTwoHumanImpl)
实现IFisherCast中的fish()方法;
如下图:

这遗留下一个问题:小明和小王两人协作完成捕鱼,但是小明fish()方法无法把
同伴(小明)作为参数输入,除非扩展IFisherCast接口,增加:
setPartener(Human partener);
Human getPartener();
这样FisherCastTwoHumanImpl类可以实现这两个方法;
dgqbcht 2008-02-13
  • 打赏
  • 举报
回复
我觉得两人协作捕鱼与两人分别捕鱼的实现应该是不同的。
ping17909 2008-02-13
  • 打赏
  • 举报
回复
回复:
发表于:2008-02-13 16:49:328楼 得分:0
好像没说协作捕鱼的事儿……


小明和小王捕鱼通过FisherCastHumanImpl中的fish方法实现;
海鸥的捕鱼通过FisherCastAnimalImpl中的fish方法实现;
ping17909 2008-02-13
  • 打赏
  • 举报
回复
=========================haiou configuration==========================
haiou = new HaiOu{
IFisherCast fisher = new FisherCastAnimalImpl();//haiou is animal
}
=========================xiaoming configration============================
xiaoming = new Human(
IFisherCast fisher = new FisherCastHumanImpl(); //xiaoming is human
IDriverCast driver = new DriverCastCarImpl() // xiaoming driver car
IFishSeller fishSeller = new FishSellerImpl( IDriverCast driver = new DriverCastCarImpl); //xiaoming sell fish by car
)
=========================xiaowang old configration============================
xiaowang_old = new Human{
IFisherCast fisher = new FisherCastHumanImpl(); //xiaowang is human
IDriverCast driver = new DriverCastBycleImpl; // xiaowang cannot drive car before xiaoming taught him
IFishSeller fishSeller = new FishSellerImpl( IDriverCast driver = new DriverCastBycleImpl); //xiaowang sell fish by bycle before he learned driving car
)
=========================xiaowang new configration============================
xiaowang_old = new Human{
IFisherCast fisher = new FisherCastHumanImpl(); //xiaowang is human
IDriverCast driver = new DriverCastCarImpl; // xiaowang can drive car now
IFishSeller fishSeller = new FishSellerImpl( IDriverCast driver = new DriverCastCarImpl); //xiaowang sell fish by car now
)

dgqbcht 2008-02-13
  • 打赏
  • 举报
回复
另外发明应该也是个方法吧,俩人“发明”了协作捕鱼的方式。
dgqbcht 2008-02-13
  • 打赏
  • 举报
回复
好像没说协作捕鱼的事儿……
ping17909 2008-02-13
  • 打赏
  • 举报
回复
看看这个如何?
xql80329 2008-02-13
  • 打赏
  • 举报
回复
这里面我感觉就是 把共同的拿出来 写到一个类中. 继承 每个对象为一个类 这里面写的是自己的特长方法
xql80329 2008-02-13
  • 打赏
  • 举报
回复
ping17909 2008-02-13
  • 打赏
  • 举报
回复
先问几个最简单的问题:
1.小明和小王是两个对象,那么他们属于不属于同一个类,觉得小明和小王的差别还是挺大的?
2.小明是应该属于Person类,还是Fisher类,Driver类,或者是FishSeller呢?
老紫竹 2008-02-13
  • 打赏
  • 举报
回复
恩!不错的题目,我先收录了!
ping17909 2008-02-13
  • 打赏
  • 举报
回复
我想要UML分析类,类与类的关系
yuanqingfei 2008-02-13
  • 打赏
  • 举报
回复
大哥,你说的都是条件,你要什么样的模型阿?数学建模? 那你要把问题说清楚阿。。。这样子没有知道你想要什么的??

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧