1、对象类的领域
4个主要领域:
1.1 基础领域
基础类:integer,boolean和char,最基本的
结构类:list,binarytree,set等,类似数据结构
语义类:date,time,money等
1.2结构领域
机器间通信类
数据库操作类
人机接口界面类
1.3商业领域
属性类
角色类
相互关系类
1.4应用领域
事件识别类
事件管理类
2、划分类的领域作用
高层次领域中类的模型以低层次领域类的模型为基础。
辩识软件的可重用性的基础,即领域越高,可重用性越差。
3、关于商业领域
非常具有挑战性的一个领域。一般的供应商不具备专业性经验,开发出通用的类库;这样的类投放到市场是一件可怕的事情,这意味着每一个购买者都需要进行客户化改造。
这是不是意味着否定了商业领域类的可重用性?当然不是。最近在看ERP的一些知识。ERP产品是典型的商业领域类库的集合。成熟的ERP产品,比如SAP,BAAN,ORACLE APPLICATION具有相当强的可重用性。这种强只是相对的,客户化定制是不可避免的。考虑到客户化定制的成本及困难程度,不难理解ERP产品实施公司为什么千方百计劝说用户接受定制在产品中的业务流程及管理方式(的确先进,但未必适用于每个企业),而尽量避免对产品本身的改动。
4、依附集
以定量方法考虑基于基础领域的类,这里定量的衡量标准就是依附集。
4.1 直接类引用集:一个类C的直接类引用是该类直接引用的类;
4.2 间接类引用集:假设C的直接类引用集包含类C1,C2,C3,.......,Cn,则C的间接类引用集就是C的直接类引用集和C1,C2,C3,.......,Cn的间接类引用集的并集。显然是个递归定义。
4.3 一个类的直接依附集指这个类的直接类引用集的大小;一个类的间接依附集直的这个类的间接类引用集的大小。
以上定义看起来很难理解,其实并不难,举例如下:
C11 F1
C1 C12 F2
C21 F3
C C2 C22 F4
C31 × F4
C3 C32 F4
则类C 的直接依附集为C1,C2,C3=3,间接依附集为所有类的集合,包括Fi(4),Ci(3),Cij(6)=13
4.4 依附集的使用:处于高级别领域的类具有较高的间接依附集,处于低级别的类具有较低的间接依附集。
5、Demeter规则:限制类的直接依附集的指导原则。
假设C的一个对象为obj,并且假设定义对象obj的所有操作运算为op,那么在执行op操作的过程中,一条消息的每一个目的地一定是下面的对象之一:
a,对象obj本身,self,super
b,在op标记符范围内通过一个参数来引用对象
c,通过obj的一个变量来引用一个对象(若该变量在C内部定义,则为强Demeter规则;若继承于C的父类,则称弱Demeter规则)
d,通过op创建的一个对象
e,通过一个全局变量引用的一个对象
6、类的内聚
6.1混合事例型内聚:一个混合事例型内聚的类具有这样一些特性,对于类的对象来说这些特性是未被定义的。如fish中有teethlength来表示fish牙的长度,则fish具有混合事例型内聚,因为不是所有的Fish的对象都有牙,也许你想通过对没有牙的Fish设置fish.teethlength=0来表示,这是错误的,因为0不等于none。正确做法应该划分noneteethfish和ownteethfish继承fish,在ownteethfish子类中定义teethlength。
6.2混合领域型内聚:一个混合领域型内聚的类包含这样一个元素,这个元素是一个不同领域的非本征类的直接依附集。如类real具有arctan(反正切函数)属性,则real是混合领域型内聚,因为arctan属于Angle(三角形)的一个属性。
6.3混合角色型内聚:一个具有混合角色型内聚的类C包含了这样一个元素,这个元素直接依附集于与C同一领域的类的一个非本征类。如Person类有个numofdog方法表示一个人有多少条狗。Person和Dog类属于商业领域,但是非本征的。所以这个设计是不合理的。但设计人员由于其简单性却经常应用。