类的状态空间和行为
1 类的状态空间与行为
一个类表示一种共同的抽象性,这种抽象性是属于这个类的所有个体对象的共有属性。上面这个类的说明十分常见,但这句话的真正意义是什么呢?
抽象性含义是指我们在软件对象中不必考虑到真实世界中事物所表现出来的每一种可能特性。共有的含义是指我们选取一个类的抽象性之后,可以将这种抽象性应用于这个类的每个对象。属性简单的含义是指:类的状态空间和行为。
一个类C的状态空间指属于类C的任何对象的允许状态的全部集合。一个类状态空间的维数概略地等于这个类中定义的属性数目。用概略地是因为部分属性是从其它状态空间维的属性中深化而来的。例如一个平面point类,其具有2维状态空间,而所有状态为平面中所有的点的集合。
2 派生类的状态空间
如果B是A的一个派生类,那么B在A的维度上的状态空间必须完全包含于A的状态空间中。然而B的状态空间的维度至少等于A的维度,如果B包含更多的维度,我们就说B的状态空间是从A的状态空间扩展而来。
违反状态空间规定限制会造成一个不合法的整合:即无话一个对象是其自己类的合法实例,但却不是其基类的合法实例。
一个类C的允许行为是指所有允许类C的一个对象在C的状态空间范围内改变状态。这个定义暗示:对于一个对象而言,并非所有可能的转换都是合法的。
4 类的不变式
对于某些类,其状态空间是完整的,也就是说一个对象可以占据状态空间坐标的任意位置。然而,很多类却不允许它们的对象毫无约束。例如一个三角形的类。可以这么认为,一个类的合理的状态空间是通过其类不变式来约束的。
一个类的不变式是指一种状态,即在任何时候此类的所有处于平衡状态的对象都满足的条件。
不变式具有继承性,一个给定的类必须服从其基类的不变式。
例如对于三角形基类,其类的不变式是:1 a+b>c and b+c>a and c+a>b
等腰三角形的派生类,其类的不变式需要包括式1及a=b or b=c or a=c
直角三角形的派生类,其类的不变式需要包括式1及a*a+b*b=c*c or …
等腰直角三角形若从等腰及直角三角形多重继承下来,则需要同时满足三个不变式。
5 前置条件和后置条件
类的每一个操作运算都有一个前置条件和后置条件。这两种条件在一起形成了处于操作运算和此操作运算的客户之间的合约。
前置条件:即当此操作运算开始执行之前此条件必须是正确的。如果此条件不成立,则该操作运算就可能拒绝执行、并可能产生一些异常情况。