wlmouse
2007-03-01 23:30
就好像椭圆和圆的关系一样。如果椭圆继承了圆,那么就会产生麻烦。一个圆引用指向一个椭圆的实例。那么给圆半径赋值这个操作到椭圆上面就麻烦了。圆的半径是一样的。椭圆则是不一样的,有一个长的,一个短的。该怎么办?

Coolyu0916
2007-03-02 09:20
to siberian

怎么可能那??

这是一个典型的约束啊

由于一个事务的状态改变而行为不同

这时候使用state模式啊

交给他的state模型来做

30岁的女人做什么

60岁的女人做什么

这些不是约束么??

to wlmouse

园是椭圆的子类

因为所有基于椭圆的数学运算都能运用在园上

我们说 园是一种特殊的椭圆 可是不能说椭圆是一种特殊的圆

checkcode
2007-03-02 11:15
我的意思是继承是is a的关系如果硬要用继承来描述长方形和正方形

那么实际的关系应该是is a而不是like a(正方形就是长方形吗?)

并且在考虑如果又有一个对象继承了正方形,或者继承了长方形,那他

又是什么,?现实世界不可能有这种情况,但是程序中无法保证,(除非

正方形是final)并且继承保证了当父类能用的地方子类也能用,而真要继承

是需要修改正方形内部逻辑,那么客户端调用的时候就无法保证了(难道父类和子类完全不同?)

我觉得描述正方形和长方形有3中解决方案

1,共同实现一个抽象的图形类或图形接口

2,考虑用组合,而不是继承

3,将正方形定义为final,并且保证其内部逻辑的和理性

且这三种方案的代码耦合度是逐步增加的

其实我个人一直反对用计算机完美的描述现实世界的逻辑,毕竟计算机是01的,太精确了

而现实世界不是这么回事,计算机应该是面向问题的,而不是面向逻辑(其实数学建模本

身也是面向问题的)

siberian
2007-03-02 13:19
Coolyu0916

你明显你弄混了,类的内部问题和类与子类的关联问题.

你说30女,60女那是类的内部的.并没有表达到外面来.

而你建立了30女的类,60女的类的时候.那个约束就变成了类本身的重要的东西.

至于用状态模式也好,不用状态模式也好,不过是设计时的技巧,这些约束还是类定义本身至关重要的东西.不能随便的把它外在了.

siberian
2007-03-02 13:29
你说的三种方法,其实在别处的讨论中已经提到.例如阎宏博士哪里就有一个大坑来讨论这问题.

而我今天说到这个问题是,是从类定义的缺乏约束的明确表达这个角度来的.毕竟清晰,无歧义的映射是oo得终极目标,任何一本讲述oo的书都会提到这一点。

我在blog将提到在实际工作中,这会造成那些问题。

猜你喜欢
9Go 上一页 1 2 3 4 5 ... 9 下一页