问答题
阅读以下UML类图及其说明,根据要求回答问题1~问题4。
[说明]
某客户信息管理系统中保存着两类客户的信息:
①个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和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] 根据上述描述,图5-12中类Customer的属性是{{U}} (1) {{/U}};类Person的属性是{{U}} (2) {{/U}}。 (1) A.客户标识 B.姓名、住宅电话、E-mail C.客户标识、办公电话、职位 D.姓名、住宅电户、办公电话、E-mail、职位 (2)
A.客户标识  
B.姓名、住宅电话、E-mail  
C.客户标识、办公电话、职位  
D.姓名、住宅电户、办公电话、E-mail、职位
【正确答案】
【答案解析】[问题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。
问答题
[问题2]
识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,请将图5-12中 (3)~(8)空缺处的内容填写完整。
【正确答案】
【答案解析】[问题2] 关联表示了对象间的结构关系,它暗示两个类在概念上位于相同的级别。在UML类图中,符号“
问答题
[问题3]
根据说明中的叙述,抽象出如表5-21所示的方法。

{{B}}表5-21 各方法名称及功能描述表{{/B}}

{{B}}功能描述{{/B}}
{{B}}方法名{{/B}}
向系统中添加客户
addCustomer
根据给定的客户标识,在系统中查找该客户
getCustomer
根据给定的客户标识,从系统中删除该客户
removeCustomer
创建新的联系人
addContact
在系统中查找指定的联系人
getContact
从系统中删除指定的联系人
removeContact

请指出图5-12中,类CustomerInformationSystem应具有的方法:{{U}} (9) {{/U}};类InstitutionalCustomer应具有的方法:{{U}} (10) {{/U}}。
【正确答案】
【答案解析】[问题3] 类CustomerInformationSystem(客户信息管理系统)的作用是向用户提供与客户管理相关的操作接口,所以addCustomer、getCustomer和removeCustomer是类CustomerInformationSystem(客户信息管理系统)的方法。 由于联系人是由集团客户创建和管理的,按照面向对象的理念,与联系人相关的直接操作应由类 InstitutionalCustomer(集团客户)来提供。因此addContact、getContact和removeContact是类 InstitutionalCustomer(集团客户)的方法。
问答题
[问题4]
关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请用150字以内的文字简要说明关联和聚集的关系,并说明其不同之处。
【正确答案】
【答案解析】[问题4] 在UML规范中,构成关系可以使用关联和聚集来表示。关联(Association)关系用于描述两个概念上位于相同级别的类的实例之间存在的某种语义上的联系。例如,售票员小张为某个长途汽车站工作,1个汽车站有多辆长途汽车,那么售票员小张与长途汽车站、汽车站与汽车就存在着关联关系。 聚集(Aggregation)关系是关联关系的一种特例(即聚集是关联的一种),它代表两个类之间的整体和局部关系。例如,一台电脑与键盘、鼠标、显示器之间就存在着聚集关系。 聚集暗示着整体在概念上处于比局部更高的一个级别,在实例图中不存在回路,即只能是一种单向关系;而关联暗示两个类在概念上位于相同的级别。换言之,聚集表示部分与整体关系的关联。若从生命周期的角度考虑,则关联对象的生命周期一般无必然关系,聚集的整体对象往往对部分对象的生命周期负责。 另外,聚集和组装也是UML中两种非常重要的关系,它们都表示实例之间的整体/部分关系。组装 (Composition)关系是聚集关系的一种特殊形式,它暗示“局部”在“整体”内部的生存期职责。例如,某电子商务公司与其销售部、财务部之间就存在着组装关系。 聚集是概念性的,只是区分整体与部分。组装具有很强的归属关系,而且整体与部分的对象生存周期是一致的。