参考答案:
【问题1】(4分)
U1:使用常规卡行驶 U2:使用单次卡行驶 (各1分)
(1):extend (2分)
【问题2】(8分,各1分)
C1:RoadSegment C2:Trajectory C3:Card
C4:RegularCard C5:PrepaidCard C6:MinitripCard
(2)1 (3)1..3
【问题3】(3分,每个类1分)
RoadSegment的属性:Distance
Trajectory的属性:Entry、Exit、DateOfEntry
Card的属性:UnitPrice、ValidPeriod
详细解析:
试题分析
本题考查面向对象开发相关知识,涉及UML用例图、类图以及类图设计时的设计模式。UML目前在面向对象软件开发中广泛使用,是面向对象软件开发考查的重要内容。
【问题1】
本题主要考查用例图。
用例之间的关系主要有以下三种:
(1)包含关系。当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。用《include》表示。
(2)扩展关系。如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。用《extend》表示。
(3)泛化关系。当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。
在本题中,从题目的描述中,我们不难看出,用例图中缺失的用例有“使用常规卡行驶”和“使用单次卡行驶”,那么U1和U2具体对应哪个用例,我们根据题目说明,并结合用例图来看,“使用季卡行驶”与U1是泛化关系,由此可知U1应该是“使用常规卡行驶”,而U2是“使用单次卡行驶”,根据题目描述“单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线”,由此可知,U1是对“使用季卡行驶”的扩展,由此第1空应填《extend》。
【问题2】
本问题考查类图。对于这个题目,我们应该结合题目的描述及给出的类图来求解。根据题目的描述,本系统包含的类主要有路段( Road Segment)、地理坐标点(Node)、访问控制(Access Control)设备、自动扫描行驶卡(Card)、行程(Trajectory)、常规卡(Regular Card)、季卡( Season Card)、单次卡(Minitrip Card)、预付卡(Prepaid Card)和客户(Customer)等。
从类图中C1与类Node的关系和C2与AccessControlNode的关系,再结合题目描述“路段由两个地理坐标点(Node)标定”可以知道C1应该是路段类,而由题目描述“行程(Trajectory)由一组连续的路段构成。行程的起点(Entry)和终点(Exit)都装有访问控制设备”可以知道C2应该是行程(Trajectory)类。
而从类图看,C4和C5是继承于C3的,再结合类图中C3与客户类和行程类的关系,可知C3应该是一切卡的抽象类,因此是自动扫描行驶卡(Card),而C5是C6和季卡的父类,再根据题目描述“季卡和单次卡都是预付卡(PrepaidCard)”可知C5是预付卡(PrepaidCard),而C6是单次卡(MinitripCard),而C4是常规卡(RegularCard)。
在UML中,多重度又称重复度,多重度表示为一个整数范围n..m,整数n定义所连接的最少对象的数目,而m则为最多对象数(当不知道确切的最大数时,最大数用*号表示)。最常见的多重性有0..1、0..*、1..1和1..*,而*与0..*是等价的。
空(2)和(3)描述的是客户与卡之间的多重度,题目告诉我们系统有三种卡,因此一个客户最多可以持有这三种卡,因此空(3)应填1..3。而一个卡只能被一个客户持有,因此客户这端应该填1。
【问题3】
根据题目描述,RoadSegment类应该包含的关键属性是里程数(Distance),因为这能标识一个路段的长度;而Trajectory类应该包含的关键属性是起点(Entry)、终点(Exit)、进入时间(Date Of Entry),这样才能说明某一次行程是何时从哪里开始到那里结束的;而Card类的关键属性应包含有效期(Valid Period)和里程单价( Unit Price)。