面向对象设讨论61点经验续,11-20
yjdn 2006-02-03 04:27:11 /*************************************
*面向对象设计续,11-20
*************************************/
(11)确保你为之建模的抽象概念是类,而不只是对象扮演的角色。p23
//
//什么叫"对象扮演的角色"?
//
(12)在水平方向上尽可能统一地分布系统功能,也即:按照设计,顶层类应当统一地共享工作。p30
//
//什么叫"统一地共享工作"?
//
(13)在你的系统中不要创建全能类/对象。对名字包含Driver、Manager、System、Susystem的类要特别多加小心。p30
规划一个接口而不是实现一个接口。
//
//可以理解
//
(14)对公共接口中定义了大量访问方法的类多加小心。大量访问方法意味着相关数据和行为没有集中存放。p30
//
//数据和行为怎么样才算集中存放?
//
(15)对包含太多互不沟通的行为的类多加小心。p31
这个问题的另一表现是在你的应用程序中的类的公有接口中创建了很多的get和set函数。
//
//是否可以理解为get 和set 互不沟通?
//
(16)在由同用户界面交互的面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。p33
//
//不是很明白,什么样的依赖?
//
(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则) 。p36
//
//
//
(18)从你的设计中去除不需要的类。p38
一般来说,我们会把这个类降级成一个属性。
//
//不需要了,干嘛还要降级为属性?
//
(19)去除系统外的类。p39
系统外的类的特点是,抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。
//
//什么叫系统外的类?
//可以举例说明?
//
(20)不要把操作变成类。质疑任何名字是动词或者派生自动词的类,特别是只有一个有意义行为的类。考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。p40
//
//是否理解为,这个类不能只是一个具体的操作?
//比如:插入商品,不能把这个操作作为一个类,
//而是把商品作为一个类,插入这个操作,只相当于
//商品类里的一个方法 ?
//