刚来Jdon,看到了中国Java的希望!
http://www.jdon.com/jivejdon/thread/32771.html
http://www.jdon.com/jivejdon/thread/32771.html
你非要说oo思想就必须映射或者基本映射世间父子继承关系的所有映射,这本身就不合理不是么?
颗粒度不能过细,过细只会浪费资源啊。解决问题才是问题的关键。
他是说,大家都认为正方形是长方形的特例,那么就应该可以定义正方形继承长方形。作为长方形,有长和宽两个属性,而正方形有边长这一个属性。所以对于正方形来说,当边长、长、宽任何一个属性被修改时,都会把它们置成相同的值。
如果有个人写了段给长方形变形的代码,传入参数是一个长方形,先比较长和宽,如果长和宽相等或者长比宽小,就把长增一,然后循环再比较,直到长比宽大才停止。
这里出现一个问题,如果传进一个长方形,代码正常执行;如果传进一个正方形,则会是死循环,从而破坏了里氏替换原则。而里氏原则是不能被破坏的,由此只能得出结论,正方形不能继承长方形。
我觉得是阎宏瞎说八道,显然他没考虑清楚。只能说在他目前设计的长方形类下,正方形不能继承长方形。按他的这个设计,应该给长方形增加一个boolean属性, 指示当前类是否具有正方形的特征。从另一角度,也可以说,他的这个抽象并不代表长方形的本质,势必在应用中造成一定的问题。
正方形能用他写的这个resize方法吗?不能,这是个bug,他显然没有考虑正方形这个特例。
再说清楚些,人能走路大家都承认吧,没腿的残疾人能走路吗?你能说残疾人不是人?只能说人这个类,走路这个方法写的有bug,没有考虑残疾人的情况。或者说走路这个方法/有没有腿 根本不是人的本质特征
[该贴被accipiter于2007-11-19 16:01修改过]
[该贴被accipiter于2008-04-24 10:20修改过]
我也感觉阎宏有点瞎扯,为啥偏给正方形加上一个side属性?
正方形是矩形的一个特例罢了,只不过width和length相等。
难道矩形的长和宽相等时,它就不是矩形了?这是什么?所谓的量变引起质变?
所以正方形根本是不存在的一个类别,只能说它是矩形的某种情况。
就像前面某朋友说的,60的妇女是女人的某种特殊情况,难道60的妇女就不是女人了?偏要分出年龄等于60这样的一个类出来?
还有那椭圆和圆也一样,圆是椭圆的一个特例而已。
1.约束的问题:目前的OO语言和建模中确实没有很清楚明确地处理这个问题。面向契约的编程也并没有发展成什么样子。如果要我对约束是什么建模:我认为,约束是类的内部属性,同时它是特殊的aspect,它的所有结合点都在类内部(进行各种check)。每个类除了属性,功能,还要有一系列内部的aspects才算完整。继承的时候子类也应该继承这个aspect。当然它还要支持各种逻辑操作。……基于这个理念,或许我们能够更加OO地建模。或许能在java上整出一套框架?哈哈
2.那个给正方形resize的外部方法问题,应该是阎宏同学脑残了。
3.关于女人是不是一定能生育,我觉得如果你要抠非得20-50岁的女人才能生育,那最好再继承出“育龄女人”这样的东西。
[该贴被sleepinglord于2008-06-06 11:12修改过]
其它的一些东西:UML有些表述在语言级别体现不良,比如关联、聚合、组合,体现在语言上就不是那么一回事了。
真能在语言层次上做到聚合必须通过聚合根访问,可能效果能好点。