9.7.5 实例

图9.22中,Person(抽象类)被特化为Woman、Man和Employee。此处,Woman和Man的规约组成了一个泛化集,Employee是另一个。本例采用了不同的表示形式。

图9.22 GeneralizationSet notation options

在图9.23中,Person(抽象类)被特化为Woman和Man。因为这个泛化集是分割的(partitioned)(即,约束为完备且不相交),每个Person的实例或者是一个Woman,或者是一个Man;也就是说,他只能是其中之一而不能两者兼之。Person还被特化为Employee,这个单一的特化被标为{incomplete},这意味着一个Person可以是一个Employee,也可以不是。综合起来,该图指示一个Person可能 1) 或者是一个Man,或者是一个Woman,并且 2) 是一个Employee或不是(一共四种选择)。

图9.23 GeneralizationSets and constraints

植物学家组织树种的一种方法是进行分类。我们看到的每棵树可能被归类为American elm、sugar maple、apricot、saguaro——或一些其它的树种。下面的类图表示每个Tree Species对0或多个数的实例进行了分类,并且每棵树只属于一个Tree Species。举个例子,一棵树可能在你的前院、你邻居家的后院,或者在你的苗圃中。此外,该图还指示了在这两类对象之间所存在的关系。例如,你前院的树可能属于sugar maple,你邻居家的树可能是一颗apricot,等等。这个类图指出每个Tree Species通过一个Leaf Pattern和任意数目的Geographic Locations(地理位置)中的一个general location来鉴别。举个例子,saguaro cactus的叶子退化为大型的刺并且它们通常在亚利桑那南部和索诺拉北部。此外,这个图指示每棵树在一个Geographic Location上都有一个actual location(实际位置)。这样,一棵特定的树可能被归为saguaro,并且位于亚利桑那的菲尼克斯。

图9.24 Power type example

上图还展示了Tree有American Elm、Sugar Maple、Apricot、Saguaro或者其它子类型。每个子类型可以具有自己特有的属性。例如,每棵Sugar Maple可能每年都会产生特定数量的枫糖,每棵Saguaro可能或0或多只毒蜥啄木鸟所居住,等等。

Tree泛化集上的幂类指派表明TreeSpecies的每个实例和Tree的每个子类是1对1的。

这个概念适用于在多业务线中的许多场景。图9.25描绘了其它幂类的示例。泛化集上以冒号开头的名字指示了该幂类。

图9.25 More power type examples

图(a)中,每个Checking Account的实例可能具有自己的属性(包括那些从Account继承来的),例如账号和存款。此外,相应的Checking Account实例可能具有利率和用于提款的最大延迟等属性。

图(b)描绘了一个车辆建模示例。每台车可被归为一辆Truck,或者一辆Car或其它。此外,Trunk和Car是Vehicle Type的实例。在(c)中,Disease Occurance对出现的每种疾病(例如我的水痘和你的麻疹)进行了分类。Disease Classification是一个幂类,它的实例就是那些类似ChickenPox和Measles的类。

当一个类型具有多个幂类的时候,用幂类对子类型集合进行标注就变得很重要。图9.26展示了一个这样的例子,反映了那种子类型集合包含Policy Coverage Type和哪个Insurance Lines。例如,一个Policy可能被分为Life、Health、Property/Casualty,或者其它的Insurance Line。相同的Policy可以被Policy Coverage Type分为Group或Individual。

图9.26 More than one powertype

results matching ""

    No results matching ""