论坛首页 Java企业应用论坛

OO—现实与实现的分歧

浏览 15212 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-05  
taya 写道
关键要看调用者的上下文,看其对行为方式的预期
在上下文中正方形和长方形的行为方式相同的才能继承,不同的话就不能

Bob大叔在《敏捷软件开发》的LSP一章中提到过这个问题


我觉得根据正方形和长方形的行为方式可以分为两种情况考虑:
1.行为方式相同时:将正方形看作是长方形的特例,也就是说我设计的时候不考虑正方形这个类,要构造一个正方形需要通过构造一个长宽相等的长方形来实现。
2.行为方式不同时:长方形 正方形继承同一个接口Shape,各自实现自己的行为

另外是否可以考虑把Rectangle等设计成不变模式(Immutable Pattern),这样就不需要考虑由于对象长宽变换而导致的形状的变化

另外2:对于正方形继承长方形这种方式有点牵强
0 请登录后投票
   发表时间:2007-03-05  
8错,LSP一章中提到过这个问题,他说  IS-A 是关于行为的,意思很明显:如果行为不同,就不赞成设计成为继承。我觉得应当抽取公共部分,设计为接口
0 请登录后投票
   发表时间:2007-03-10  
将正方形当成长方形来用,可能会造成不可理解的结果。但是仔细追究,正方形的面积计算实际上是一种简化的方法,其本意还是“长”乘以“宽”。如果一定要我写一个继承于长方形的正方形的话,我会在 setHeight() 方法里面写上 throw MethodNotImplementedException();
0 请登录后投票
   发表时间:2007-03-12  
人、女人、男人、老人、年轻人,都是现实中存在的实体对象。

它们之间存在任何继承关系吗?如果存在,应该如何设计呢?

属性及行为如何影响我们的设计?

最后,当我们陷于矛盾及困扰的时候,是不是从一开始我们就已经错了呢?
0 请登录后投票
   发表时间:2007-03-12  
age0 写道
人、女人、男人、老人、年轻人,都是现实中存在的实体对象。

它们之间存在任何继承关系吗?如果存在,应该如何设计呢?

属性及行为如何影响我们的设计?

最后,当我们陷于矛盾及困扰的时候,是不是从一开始我们就已经错了呢?


恩,或许在真的项目里面果真如此。

讨论如何设计对象以及他们之间的关系,如果这个讨论发生在讲解“设计模式”的时候,还算“值得”讨论。

如果在项目里面,这个讨论如果 “过于详细(或者细节)”就显得过于“先于需求”了。

可以想象怎么实现用户的需求的时候 ,脑子的思维是多么活跃:设计一个人,一个长方形,再来一个很好的继承关系,再通过组合,这样就可以。。。。。嗯,这里还多一些抽象,以免........(省略100000字)

这里我不得不佩服人的脑子的想象力,以及在各种技能条件下的充分发挥。
当然,对于这样充分想象的工作者,说明他是有相当的能力,因为很多一些人连合理的想象的能力都达不到,当然,不能磨灭他们将来可以达到的可能性。

这里,我不得不打击那位 充满想象力的“对象设计者”一下,其实他几乎99%的想象都是无用的,甚至可能使以后系统实现时的“累赘”和“缺陷来源”。过于“执着”自己的设计而不遵循“需求需要”的原则,这样的教训更来得惨重。

粗略的类图在需求开始分析阶段,是有必要的。但是没必要如此详细。 特别是涉及到“继承”/各种设计模式的使用的时候。 这些更细节的东西 最好能够通过需求推导出来。

当然,不是每个人都能把握在 coding过程中,把握重构的细节,甚至把握“重构出更合理的对象关系”的能力。然而,如果能够这样做的,项目的质量总归比要“先于需求实现”的质量总归要来得高得多。 部能够这样做的,就成为“攻击敏捷开发”的原因之一。





0 请登录后投票
   发表时间:2007-03-12  
对于复杂的处理逻辑,计算逻辑复杂的系统时可能FP会更好些,这时候面向对象就显得不合时宜了。

面向对象很好,是不错,可是你硬要用它来解释一切东西,那就不对了.
0 请登录后投票
   发表时间:2007-03-12  
simohayha 写道
对于复杂的处理逻辑,计算逻辑复杂的系统时可能FP会更好些,这时候面向对象就显得不合时宜了。


“对象”是达成“实现需求”得一个手段,如果不用对象的设计,直接用过程式的方法能够获得“更清晰,更简洁”的代码,那就完全可以摈弃 “对象设计”,当然,如果在复杂一点的需求中,前面的“假设”我还很少看到。
0 请登录后投票
   发表时间:2007-03-12  
现实世界如果真的那么容易就可以变成对象
那要我们何用?
对象只是假装自己是现实世界中的一员
大象用程序的方式模拟现实而已
如果不能模拟那么一定是你的程序错
而不是现实有错....
0 请登录后投票
   发表时间:2007-03-12  
楼上几位又扯远了,“在恰当的地方恰当的使用OO”,这种没有营养的废话不说也罢。

何时、何地以及如何实现OO才是需要反复讨论的课题。
0 请登录后投票
   发表时间:2007-03-12  
age0 写道
楼上几位又扯远了,“在恰当的地方恰当的使用OO”,这种没有营养的废话不说也罢。

何时、何地以及如何实现OO才是需要反复讨论的课题。


如何设计是非常主观的事情,在论坛里面,针对一个模糊的设计来讨论“如何设计”是非常“浪费生命“的事情。 

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics