当前位置:中级软件设计师题库>面向对象技术题库

问题:

[问答题,案例分析题]

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

凝胶剂 乳膏剂 眼膏剂 栓剂 滴丸剂

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

参考答案:

  参考解析

问题1:UML用例图中有包含(include)、扩展(extend)和泛化(generalization)_种关系。包含关系:使用包含(Inclusion)用例来封装一组跨越多个用例的相似动作(行为片断),以便多个基(Base)用例复用。基用例可以依赖包含用例执行的结果,但是双方都不能访问对方的属性。扩展关系:将基用例中一段相对独立并且可选的动作,用扩展(Extension)用例加以封装,再让它从基用例中声明的扩展点(ExtensionPoint)上进行扩展,从而使基用例行为更简练和目标更集中。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此它能根据基用例中扩展点的当前状态来判断自己是否执行,但是扩展用例对基用例不可见。对于一个扩展用例,可以在基用例上有几个扩展点。泛化关系:子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。本题中,系统提供了3种行驶卡:常规卡、季卡和单次卡。其中,季卡和单次卡都是预付卡。季卡的使用流程与常规卡类似,但是不需要打印费用单,系统自动从卡中扣除应付费用,即"使用季卡行驶"是"使用常规卡行驶"的子用例,因此U1为"使用常规卡行驶"。单次卡的使用流程与季卡类似,但还需要在行程的起点和终点上检查行驶路线是否符合该卡所规定的行驶路线,即"使用单次卡行驶"扩展了原来的用例"使用季卡行驶",因此U2为"使用单次卡行驶",空(1)处应填"<>"。
问题2:每个路段由两个地理位置坐标点(Node)标定,行程(Trajectory)由一组连续的路段构成,则C1为RoadSegment,C2为Trajectory。行程的计算要通过读取卡来获得,卡分为常规卡和预付费卡,预付费卡又分为季卡和单次卡,所以C3~C6依次为Card、RegularCard、PrepaidCard和MinitripCard。关联的多重度是指一个类的实例能与另一个类的多少个实例相关联。一个客户可以有不同类型的卡,而每一张卡只能属于一个用户,也就是说一个Customer类实例可以与Card类的3个实例相关联,而一个Card类实例只能和一个Customer类实例相关联。
问题3:里程数是每个路段(RoadSegment)的关键属性;行程有起点(Entry)和终点(Exit),在进入行程起点时,系统还要记录进入时间,那么行程(Trajectory)的关键属性有Entry、Exit、DateOfEntry;卡有3种类型,不同的卡有不同的有效期(ValidPeriod)和里程单价(UnitPrice),所以Card的关键属性有UnitPrice、ValidPeriod。

在线 客服