列表

详情


【说明】
Pay&Drive系统(开多少付多少)能够根据驾驶里程自动计算应付的费用。
系统中存储了特定区域的道路交通网的信息。道路交通网由若干个路段(Road Segment)构成,每个路段由两个地理坐标点(Node)标定,其里程数(Distance)是已知的。在某些地理坐标点上安装了访问控制(Access Control)设备,可以自动扫描行驶卡(Card)。行程(Trajectory)由一组连续的路段构成。行程的起点(Entry)和终点(Exit)都装有访问控制设备。
系统提供了3种行驶卡。常规卡(Regular Card)有效期(Valid Period)为一年,可以在整个道路交通网内使用。季卡(Season Card)有效期为三个月,可以在整个道路交通网内使用。单次卡(Minitrip Card)在指定的行程内使用,且只能使用一次。其中,季卡和单次卡都是预付卡(Prepaid Card),需要客户(Customer)预存一定的费用。
系统的主要功能有:客户注册、申请行驶卡、使用行驶卡行驶等。
使用常规卡行驶,在进入行程起点时,系统记录行程起点、进入时间(Date Of Entry)等信息。在到达行程终点时,系统根据行驶的里程数和所持卡的里程单价(Unit Price)计算应付费用,并打印费用单(Invoice)。
季卡的使用流程与常规卡类似,但是不需要打印费用单,系统自动从卡中扣除应付费用。
单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线。
现采用面向对象方法开发该系统,使用UML进行建模。构建出的用例图和类图分别如图3-1和图3-2所示。

【问题1】(4分)
根据说明中的描述,给出图3-1中U1和U2所对应的用例,以及(1)所对应的关系。
【问题2】(8分)
根据说明中的描述,给出图3-2中缺少的C1~C6所对应的类名以及(2)~(3)处所对应的多重度(类名使用说明中给出的英文词汇)。
【问题3】(3分)
根据说明中的描述,给出Road Segment、Trajectory和Card所对应的类的关键属性(属性名使用说明中给出的英文词汇)。

参考答案:

【问题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)。

上一题