Coolyu0916
2007-03-02 15:51
呵呵,那么我可能明白你的意思了,你是说长方形具备一个setsize(x,y)的方法,而正方形可能只需要setsize(x)的方法,你觉得如果是正方形使用setsize(x,y)的时候不容易处理,而且必须对客户交代是么??

我觉得我们现在一直再说要面对接口的编程,而不是面对类的编程,是为了什么??我们是要这个东西实现目的,你setsize设定了长度,就是为了设定而设定么??我想不是吧,你的最终目的是为了计算面积或者周长吧。那么你在设计的时候需要把setsize也作为接口设计么??他是为了配合目标而出的一个方法,并不是你最终完成功能所需的方法,所以这个方法没有必要。你可以使用rectangle(x,y) square(x)构造方法来解决。当然真正的设计中要比这个复杂,但是目标必须明确。

再说 生育期妇女 问题,如果我们的系统是一个关于人一生描述的演示系统,你可以选择一个性别,年龄等一些值来模拟生活(比如虚拟人生游戏)那么 生育期妇女 你是否作为一个子类出现那??我们分析东西必须要有特定的环境,不能泛指希望它尽量的大,设计的问题是让他够用且方便扩展,而不是大而全

配置文件之类我觉得是实现的时候要考虑的,真正的设计是应该于语言无关的,代码大全的作者说希望伪代码用一种语言,而真正的用另外一种语言。我们当然做不到这样。因为有些语言特性实在是限制的非常死,但目标就是你的设计一定不能绑定在语言的层面或者xml,db上。

siberian
2007-03-02 16:12
你说的设计是为了够用且方便扩展,而不是大而全.这点我是完全同意的.比如长方形作为顶级父类不用把四个边都表达出来,直角也不用表达.因为我们在这个简单的环境中完全用不到.

你说的不限定在某个语言上,我也同意.我们讨论的是前端的分析过程.

我想表达的是意思是.现在面向对象的里面类的定义过于简单.缺乏显式的约束表达.这些约束表达的逻辑代码不能再四处分散在各个类中,而是应该作为有归属的东西.当然不是所有的约束都是类必需的.

类的定义应该包含3大块,属性,约束,行为.这样类的定义才完整.

Coolyu0916
2007-03-02 16:37
我说一下我的观点

一开始的设计我觉得应该是为了目标而设计的,比如说我们通过阅读需求知道有个图形shape对象,那么我们要这个对象是为了计算面积,计算周长,还是为了显示的??

那么定义方法。然后找出这些对象的关系就好了。

属性的目的是为了实现目的,标识对象,属于第二阶段的事情。shape可能需要长度,大小,这个时候我们其实就应该知道这个对象差不多是什么了。比如系统里面就是要圆形跟方形,那么就可以设定值,然后计算。一般我比较喜欢用构造方法。但是有时确实有些不是太灵活,且可能出现冗余。但是可以减少可以setter的属性,基本上如果不是必须,我会尽量减少它。

约束是什么??对数据的检验,对于数据检验通常的做法是硬编码,或者使用配置文件。应当属于运行期的事情。必须确定的知道是什么才可以进行,这个时期大部分已经不属于设计了,或者已经是详细设计后期了。可以通过文档来绑定。

siberian
2007-03-02 17:42
为了目标而设计,但是首先要清楚地映射真实世界的事物以及他们之间的联系,可是任何时候都不可以动摇地。如果不是为了这个目标,那么这就不是oo的设计。

我觉得你的分析过程有问题,需求中很少上来就知道一个shape的。一般是先在需求中有了圆和长方形之类的,才会抽象出多边形这个东西。就好像我们在电子商务中,一般情况都先上来知道了,购物者,销售者,经理,前台工作人员,等等。我们才抽象出一个Person的类来。

当然不排除有桌面系统上来就知道了多边形这东西。

好,上面都是旁话。

很清楚看到.一个孤立的类来说,它是否有约束并不重要.甚至他的存在也是无意义的。而一旦类有了联系,那么约束也就随之而来了。

关于类的至关重要的约束的具体内容那是后来的事情,但是我们首先明确这个约束是类本身的,不可或缺的。这就够了。我们要把验证雷是否成立这个职责从别的类手中还回来.目的仅到此。

还有你把这一切都想的太理想,分析设计这都是一个迭代的问题。在详细设计的时候挖掘出需求也是很正常的,从而改动分析.

Coolyu0916
2007-03-02 21:23
>关于类的至关重要的约束的具体内容那是后来的事情,但是我们首先明确这个约束是类本身的,不可或缺的。这就够了。我们要把验证雷是否成立这个职责从别的类手中还回来.目的仅到此。

同意你这个观点,所以我希望尽量用构造函数来尽可能多的设定值,这就是说,如果某个条件不符合,那么就不应当存在这样的东西。

shape是我的一个举例,从客户需求到真正的设计中间的事情很多的,但是最终实现的设计必然是抽象的,具备完备功能性的。

分析设计是一个需要经验的工作,迭代是必然的。不过如果在详细设计的时候需要修改整个框架,那么你的设计就是失败的。没有实现完备功能的设计不称之为设计结束(该设计为架构设计)。

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