问答题 [说明]
已知某唱片播放器不仅可以播放唱片,而且可以连接电脑并把电脑中的歌曲刻录到唱片上(同步歌曲)。连接电脑的过程中还可自动完成充电。
关于唱片,还有以下描述信息:
1.每首歌曲的描述信息包括:歌曲的名字、谱写这首歌曲的艺术家以及演奏这首歌曲的艺术家。只有两首歌曲的这三部分信息完全相同时,才认为它们是同一首歌曲。艺术家可能是一名歌手或一支由2名或2名以上的歌手所组成的乐队。一名歌手可以不属于任何乐队,也可以属于一个或多个乐队。
2.每张唱片由多条音轨构成;一条音轨中只包含一首歌曲或为空,一首歌曲可分布在多条音轨上;同一首歌曲在一张唱片中最多只能出现一次。
3.每条音轨都有一个开始位置和持续时间。一张唱片上音轨的次序是非常重要的,因此对于任意一条音轨,播放器需要准确地知道,它的下一条音轨和上一条音轨是什么(如果存在的话)。
根据上述描述,采用面向对象方法对其进行分析与设计,得到了如表3-1所示的类列表、如图3-1所示的初始类图以及如图3-2所示的描述播放器行为的UML状态图。


问答题 根据说明中的描述,使用表3-1给出的类的名称,给出图3-1中的A~F所对应的类。
【正确答案】A:Artist B:Song C:Band D:Musician E:Track F:Album
【答案解析】
问答题 根据说明中的描述,给出图3-1中(1)~(6)处的多重度。
【正确答案】(1)0..* (2) 2..* (3) 0..1 (4) 1..* (5) 1..* (6) 1
【答案解析】
问答题 图3-1中缺少了一条关联,请指出这条关联两端所对应的类以及每一端的多重度。
多重度
【正确答案】类:Track 多重度:0..1 类:Track 多重度:0..1
【答案解析】
问答题 根据图3-2所示的播放器行为UML状态图,给出从“关闭”状态到“播放”状态所经过的最短事件序列(假设电池一开始就是有电的)。
【正确答案】按任意键,选择歌曲
【答案解析】[解析] 本道题主要是考查学生对UML统一建模语言的类图、状态图的掌握。
[问题1]根据“每首歌曲的捕述信息包括:歌曲的名字、谱写这首歌曲的艺术家。”和图中类A与类B之间约束为“编写”“演奏”,所以类A与类B只能是艺术家和歌曲,又根据图上的标示的关联关系(1,0..*),可以确定类A为艺术家(Artist);类B为歌曲(Song)。
类B与类E之间是聚集关系,根据题中“一条音轨中只包含一首歌曲或为空,一首歌曲可分布在多条音轨上”,可以得到类E为:音轨(Track_)。接下来看,类E与类F之间存在组成关系,根据“每张唱片由多条音轨构成”,得到类F为唱片(Album)。再来看类C和类D,它们与类A存在“泛化”关系,根据“艺术家可能是一名歌手或一支由2名或2名以上的歌手所组成的乐队。”可知,类C与类D为歌手和乐队,又因为类C与类D存在聚集关系,根据题中“一名歌手可以不属于任何乐队,也可以属于一个或多个乐队”可知,类C为乐队(Band),类D为歌手(Musician)。
[问题2]由第一问可知,类C为乐队,类D为歌手,题中“一支由2名或2名以上的歌手所组成的乐队。一名歌手可以不属于任何乐队,也可以属于一个或多个乐队”。则第(1)空处是0..*;第(2)空处是2..*。类B与类E存在聚集关系,题中“一条音轨中只包含一首歌曲或为空,一首歌曲可分布在多条音轨上”,所以第(3)空为0..1,第(4)空为1..*。类E与类F存在泛化关系,题中“每张唱片由多条音轨构成”,所以第(5)空为:1..*,第(6)空为:1。
[问题3]考查的是类/对象关联中的一种特殊关联:递归关联,它描述的是同一个类的不同实例之间的关系。而类Track的不同实例之间恰好具有这种关系(因此对于任意一条音轨,播放器需要准确地知道,它的下一条音轨和上一条音轨是什么)。所以缺少的那条联系的两端都是类Track,其多重度都为0..1。下限为0,是对应不存在上一条或下一条音轨的情况。
[问题4]状态图是描述系统动态行为的一种模型。这里状态图的考查仅限于能够理解它所描述的行为。状态图由状态及状态之间的迁移构成,迁移可以由相关的事件触发。问题4给定了两个状态“关闭”和“播放”,要求找出从“关闭”到“播放”的最短事件序列。这就要求我们能够在状态图上找到连接这两个状态的最短迁移,然后将迁移上的事件记录下来就可以了。从“关闭”状态到“播放”状态可以选择经过迁移“连接电脑”到达“联机”状态,再经过迁移“断开状态”到达状态“打开”,再从“打开”状态的初始状态“歌曲待选”,经过迁移“选择歌曲”到达“播放状态”。这样经过的事件序列为:连接电脑→电量饱和/完成复制→断开连接→选择歌曲。显然这样的事件序列远比“关闭”经过“按任意键”直接到达“打开”状态要长得多。所以从“关闭”到“播放”的最短事件序列是:按任意键,选择歌曲。