问答题
阅读以下说明和图,根据要求回答问题1~问题4。
[说明]
某电子商务公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,该公司计划为注册的商家提供商品(Commodity)促销(Promotion)功能。商品的分类(Category)不同,促销的方式和内容也会有所不同。
注册商家可发布促销信息。商家首先要在自己所销售商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。
商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销 (Promotion)活动,并选择具体的促销商品(Commodity),输入购买数量等购买信息。系统生成相应的一份促销订单(POrder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。
系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图6-18所示是该系统类图中的一部分;系统的动态行为采用UML序列图表示,如图6-19所示是发布促销的序列图。

问答题
[问题1]
识别关联的多重度是面向对象建模过程中的一个重要步骤。请根据说明中给出的描述,将如图6-18所示中(1)~(6)空缺处的内容填写完整。
【正确答案】
【答案解析】[问题1] 这是一道要求读者在充分理解需求的基础上,补充UML类图中的类间关系的多样性描述的综合分析题。本题的解答思路如下。 (1)关联表示了对象间的结构关系,它暗示两个类在概念上位于相同的级别。在UML类图中,符号“
问答题
[问题2]
请从表6-12中选择相应的方法名,填写到图6-19所示中(7)~(10)空缺处的对应位置中。

{{B}}表6-12 可选消息列表{{/B}}

{{B}}功能描述{{/B}}
{{B}}方法名{{/B}}
向促销订单中添加所选的商品
buyCommodities
向促销中添加要促销的商品
addCommodities
查找某个促销的所有促销订单信息列表
getPromotionOrders
生成商品信息
createCommodity
查找某个分类中某商家的所有商品信息列表
getCommodities
生成促销信息
createPromotion
生成促销订单信息
createPOrder
查找某个分类的所有促销信息列表
getCategoryPromotion
查找某商家所销售的所有分类列表
getCategories
查找某个促销所涉及的所有商品信息列表
getPromofionCommodities

【正确答案】
【答案解析】[问题2] 这是一道要求读者用UML序列图对系统的行为进行分析和建模的综合分析题。本题的解答思路如下。 序列图描述对象间的消息交互,刻画系统的行为。根据题目的描述:商家(Businessman)在发布促销信息时,要先浏览自己所销售商品的分类及分类中的具体商品信息;商家通过(7)空缺处所填入的 getCategories消息将浏览请求提交给类CatagoryManager实例,再由类CatagoryManager的实例通过(8)空缺处所填入的getCommodities消息请求类Category(商品分类)实例获得其分类中该商家的所有商品;类Category的实例通过getCommodityinfo消息请求类Comodity(商品)的实例返回商品的详细描述信息。 当把商家所销售的商品分类及分类中的具体商品信息返回给商家之后,商家在其中选择要促销的一个或多个商品,并输入一些促销信息,通过(9)空缺处所填入的CreatePromotion消息请求类PromotionManager实例生成促销信息。类PromotionManager实例通过Create消息创建一个促销(Promotion)对象,并通过 (10)空缺处所填入的addCommdities消息向新建的促销对象中添加要促销的商品对象。
问答题
[问题3]
该电子商务公司还对外开放一项出租图书和唱碟的业务。由于业务需求,该公司委托软件开发公司A开发一套信息管理系统。该系统将记录所有的图书信息、唱碟信息、用户信息和用户租借信息等。A公司决定采用面向对象的分析和设计方法开发此系统。某类图书或唱碟被借阅时应记录的信息如表6-13所示,如图6-20所示描述了系统定义的两个类Book和CD,分别表示图书和唱碟的信息。

{{B}}表6-13 图书/唱碟借阅情况记录表{{/B}}

{{B}}图书/唱碟 名称:____________{{/B}}

{{B}}借出时间{{/B}}
{{B}}归还时间{{/B}}
{{B}}用户{{/B}}

经过进一步分析,设计人员新定义一个类Items_on_ loan,以表示类Book和CD的共有属性和方法(要注意,不同名称的属性和方法表示不同的含义,如CD中的 composer与Book中的author无任何关系)。同时为了记录每种图书或唱碟的历史记录,引入类CirculationHistory,类中存储的信息是如图1-1所示中所表示的内容。请采用UML表示法将类Book、类CD、类Items_on_loan和类Circulation History之间的关系表示出来。
【正确答案】
【答案解析】[问题3] 如果新定义的类Items_on_loan要表示类Book和类CD的共有属性和方法,那么就需要从类Book、 CD中找出相同的属性和方法。由试题中给出的图6-20可知,Book和CD都有title属性和reference title方法,因此类Items_on_loan的属性为title,方法为reference title。 类Book和类CD应该继承类Items_on_loan,因此它们之间的关系是继承关系,而CirculationHistory表示对象的租借次数,它不属于类Items_on_loan的属性,但类Items_on_loan应该能够查询到CirculationHistory记录的信息,所以它们之间是聚集关系。 类Book、类CD、类Items_on_loan和类CirculationHistory之间的UML关系如图6-27所示。
问答题 [问题4] 现需了解十大最畅销(借出次数最多)图书或唱碟。为此引入类TemPopulate以存储所有十大畅销图书或CD的名称及其被借出的次数。利用顺序图描述某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互,通常在系统一次运行过程中,应有{{U}} (11) {{/U}}个TenPopulate实例对象最合适,一个 TenPopulate类实例对象最多需要和{{U}} (12) {{/U}}个Items_on_loan实例对象交互。 [供选择的答案] (11) A.1 B.2 C.10 D.n(图书和唱碟种类数) (12)
A.2 B.10
C.20 D.n(图书和唱碟种类数)
【正确答案】
【答案解析】[问题4] 类TemPopulate存储十大畅销图书或CD的名称及其被借出的次数,顺序图中要明确的给出这一对象。通常在系统一次运行过程中,有1个TenPopulate实例对象最合适。 为了记录图书或唱片的借出信息,每当有图书或唱片被借出时,都需要和类TemPopulate的对象发生交互。因此,有可能所有的图书和唱片都要和类TemPopulate对象发生交互,即一个类TenPopulate实例对象最多需要和图书及唱碟种类数个Items_on_loan实例对象交互。