锁定老帖子 主题:OO—现实与实现的分歧
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-05
taya 写道 关键要看调用者的上下文,看其对行为方式的预期
在上下文中正方形和长方形的行为方式相同的才能继承,不同的话就不能 Bob大叔在《敏捷软件开发》的LSP一章中提到过这个问题 我觉得根据正方形和长方形的行为方式可以分为两种情况考虑: 1.行为方式相同时:将正方形看作是长方形的特例,也就是说我设计的时候不考虑正方形这个类,要构造一个正方形需要通过构造一个长宽相等的长方形来实现。 2.行为方式不同时:长方形 正方形继承同一个接口Shape,各自实现自己的行为 另外是否可以考虑把Rectangle等设计成不变模式(Immutable Pattern),这样就不需要考虑由于对象长宽变换而导致的形状的变化 另外2:对于正方形继承长方形这种方式有点牵强 |
|
返回顶楼 | |
发表时间:2007-03-05
8错,LSP一章中提到过这个问题,他说 IS-A 是关于行为的,意思很明显:如果行为不同,就不赞成设计成为继承。我觉得应当抽取公共部分,设计为接口
|
|
返回顶楼 | |
发表时间:2007-03-10
将正方形当成长方形来用,可能会造成不可理解的结果。但是仔细追究,正方形的面积计算实际上是一种简化的方法,其本意还是“长”乘以“宽”。如果一定要我写一个继承于长方形的正方形的话,我会在 setHeight() 方法里面写上 throw MethodNotImplementedException();
|
|
返回顶楼 | |
发表时间:2007-03-12
人、女人、男人、老人、年轻人,都是现实中存在的实体对象。
它们之间存在任何继承关系吗?如果存在,应该如何设计呢? 属性及行为如何影响我们的设计? 最后,当我们陷于矛盾及困扰的时候,是不是从一开始我们就已经错了呢? |
|
返回顶楼 | |
发表时间:2007-03-12
age0 写道 人、女人、男人、老人、年轻人,都是现实中存在的实体对象。
它们之间存在任何继承关系吗?如果存在,应该如何设计呢? 属性及行为如何影响我们的设计? 最后,当我们陷于矛盾及困扰的时候,是不是从一开始我们就已经错了呢? 恩,或许在真的项目里面果真如此。 讨论如何设计对象以及他们之间的关系,如果这个讨论发生在讲解“设计模式”的时候,还算“值得”讨论。 如果在项目里面,这个讨论如果 “过于详细(或者细节)”就显得过于“先于需求”了。 可以想象怎么实现用户的需求的时候 ,脑子的思维是多么活跃:设计一个人,一个长方形,再来一个很好的继承关系,再通过组合,这样就可以。。。。。嗯,这里还多一些抽象,以免........(省略100000字) 这里我不得不佩服人的脑子的想象力,以及在各种技能条件下的充分发挥。 当然,对于这样充分想象的工作者,说明他是有相当的能力,因为很多一些人连合理的想象的能力都达不到,当然,不能磨灭他们将来可以达到的可能性。 这里,我不得不打击那位 充满想象力的“对象设计者”一下,其实他几乎99%的想象都是无用的,甚至可能使以后系统实现时的“累赘”和“缺陷来源”。过于“执着”自己的设计而不遵循“需求需要”的原则,这样的教训更来得惨重。 粗略的类图在需求开始分析阶段,是有必要的。但是没必要如此详细。 特别是涉及到“继承”/各种设计模式的使用的时候。 这些更细节的东西 最好能够通过需求推导出来。 当然,不是每个人都能把握在 coding过程中,把握重构的细节,甚至把握“重构出更合理的对象关系”的能力。然而,如果能够这样做的,项目的质量总归比要“先于需求实现”的质量总归要来得高得多。 部能够这样做的,就成为“攻击敏捷开发”的原因之一。 |
|
返回顶楼 | |
发表时间:2007-03-12
对于复杂的处理逻辑,计算逻辑复杂的系统时可能FP会更好些,这时候面向对象就显得不合时宜了。
面向对象很好,是不错,可是你硬要用它来解释一切东西,那就不对了. |
|
返回顶楼 | |
发表时间:2007-03-12
simohayha 写道 对于复杂的处理逻辑,计算逻辑复杂的系统时可能FP会更好些,这时候面向对象就显得不合时宜了。
“对象”是达成“实现需求”得一个手段,如果不用对象的设计,直接用过程式的方法能够获得“更清晰,更简洁”的代码,那就完全可以摈弃 “对象设计”,当然,如果在复杂一点的需求中,前面的“假设”我还很少看到。 |
|
返回顶楼 | |
发表时间:2007-03-12
现实世界如果真的那么容易就可以变成对象
那要我们何用? 对象只是假装自己是现实世界中的一员 大象用程序的方式模拟现实而已 如果不能模拟那么一定是你的程序错 而不是现实有错.... |
|
返回顶楼 | |
发表时间:2007-03-12
楼上几位又扯远了,“在恰当的地方恰当的使用OO”,这种没有营养的废话不说也罢。
何时、何地以及如何实现OO才是需要反复讨论的课题。 |
|
返回顶楼 | |
发表时间:2007-03-12
age0 写道 楼上几位又扯远了,“在恰当的地方恰当的使用OO”,这种没有营养的废话不说也罢。
何时、何地以及如何实现OO才是需要反复讨论的课题。 如何设计是非常主观的事情,在论坛里面,针对一个模糊的设计来讨论“如何设计”是非常“浪费生命“的事情。 |
|
返回顶楼 | |