[说明]
某客户信息管理系统中保存着两类客户的信息:
①个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和E-mail)。
②集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、E-mail、办公电话以及职位。
该系统除了可以保存客户信息之外,还具有以下功能:
①向系统中添加客户(addCustomer);
②根据给定的客户标识在系统中查找该客户(getCustomer);
③根据给定的客户标识从系统中删除该客户(removeCustomer);
④创建新的联系人(addContact);
⑤在系统中查找指定的联系人(getContact);
⑥从系统中删除指定的联系人(removeContact)。
该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表5-20所示的类。
|
{{B}}表5-20 客户信息管理系统类表{{/B}}
|
{{B}}类名{{/B}} |
{{B}}说明{{/B}} |
|
CustomerlnformationSystem |
客户信息管理系统 |
|
IndividualCustomer |
个人客户 |
|
InstitutionalCustomer |
集团客户 |
|
Contact |
联系人 |
|
描述该客户信息管理系统的UML类图如图5-12所示。
【正确答案】
【答案解析】[问题1]
由试题关键信息“……对于这类客户(个人客户),系统保存了其客户标识……对于这类客户(集团客户),系统保存了其客户标识……”可知,“客户标识”是个人客户和集团客户的共同属性,因此该标识也必然是类“客户”的一个属性。据此可先排除(1)空缺处的选项B和选项D。而选项C的“办公电话、职位”是类InstitutionalCustomer(集团客户)的属性,如果它们也是类“客户”的属性,那么类 IndividualCustomer(个人客户)也必然继承这两个属性,而试题中对于类“个人客户”无此相关描述,可见选项C不是正确答案。因此依据试题的描述,类Customer(客户)的属性只有“客户标识”。因此(1)空缺处的正确答案是选项A。
在UML类图中,“

”表示其相连的两个类之间存在泛化关系,即在图5-12中类Person(人)是类Contact(联系人)的基类;“”表示其相连的两个类之间存在关联关系,即在图5-12中类Person与IndividualCustomer(个人客户)之间具有关联关系。由试题关键信息“对于这类客户(个人客户),系统保存了其客户标识和基本信息(包括姓名、住宅电话和E-mail)”,以及对(1)空缺处解析中类“个人客户”继承了类“客户”的“客户标识”属性,可见类“个人客户”还有“姓名、住宅电话和E-mail”属性没有体现,在图5-12中这些属性应该从类Person(人)中进行关联。
从试题关键信息“联系人的信息包括姓名、住宅电话、E-mail、办公电话和职位”可知,类Contact (联系人)除了从类“人”中继承了“姓名、住宅电话和E-mail”属性之外,还追加了“办公电话、职位”属性。这一点分析也证明了类Person(人)具有“姓名、住宅电话和E-mail”的属性。因此(2)空缺处的正确答案是选项B。

【正确答案】
【答案解析】[问题4]
在UML规范中,构成关系可以使用关联和聚集来表示。关联(Association)关系用于描述两个概念上位于相同级别的类的实例之间存在的某种语义上的联系。例如,售票员小张为某个长途汽车站工作,1个汽车站有多辆长途汽车,那么售票员小张与长途汽车站、汽车站与汽车就存在着关联关系。
聚集(Aggregation)关系是关联关系的一种特例(即聚集是关联的一种),它代表两个类之间的整体和局部关系。例如,一台电脑与键盘、鼠标、显示器之间就存在着聚集关系。
聚集暗示着整体在概念上处于比局部更高的一个级别,在实例图中不存在回路,即只能是一种单向关系;而关联暗示两个类在概念上位于相同的级别。换言之,聚集表示部分与整体关系的关联。若从生命周期的角度考虑,则关联对象的生命周期一般无必然关系,聚集的整体对象往往对部分对象的生命周期负责。
另外,聚集和组装也是UML中两种非常重要的关系,它们都表示实例之间的整体/部分关系。组装 (Composition)关系是聚集关系的一种特殊形式,它暗示“局部”在“整体”内部的生存期职责。例如,某电子商务公司与其销售部、财务部之间就存在着组装关系。
聚集是概念性的,只是区分整体与部分。组装具有很强的归属关系,而且整体与部分的对象生存周期是一致的。