问答题 阅读以下说明和图,根据要求回答下面问题。
[说明]
某航空公司会员积分系统(CFrequentFlyer)的主要功能描述如下:
乘客只要办理该航空公司的会员卡,即可成为普卡会员(CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员(CSilver)或金卡会员(CGold)。非会员(CNonMember)不能累积里程数。
每年年末,系统根据会员在本年度累积的里程数对下一年会员等级进行调整。
普卡会员在一年内累积的里程数若满25,000英里但不足50,000英里,则自动升级为银卡会员;若累积的里程数在50,000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50,000英里以上,则自动升级为金卡会员。
若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员;若累积的里程数达到25,000英里,但是不足50,000英里,则自动降级为银卡会员。银卡会员一年内累积的里程数若不足25,000英里,则自动降级为普卡会员。
采用面向对象方法对会员积分系统进行分析与设计,得到如图1所示的状态图和图2所示的类图。

图1 某会员积分系统状态图

问答题 根据说明中的描述,给出图1中S1~S3处所对应的状态以及T1~T3处所对应的迁移的名称。
【正确答案】
【答案解析】S1:普卡会员;S2:银卡会员;S3:金卡会员。
T1:25000=<里程数<50000;T2:里程数>=50000;T3:里程数>=50000。 [解析] 本题考查面向对象分析中的类图、用例图。用例图描述了一组用例、参与者及他们之间的关系,包括以下几个部分:用例(Case)、参与者(Actor)。会员积分系统状态图就是一种用例图。用例视图中的参与者与系统外部的一个实体以某种方式参与了用例的执行过程;用例是一个叙述型文档,用来描述参与使用系统、完成某个事情时发生的顺序。
图中要求填充S1、S2、S3这三个状态以及它们之间的变迁关系。本题中会员有三种状态:普卡、金卡和银卡。普卡会员在一年内累积的里程数若满25,000英里但不足50,000英里,则自动升级为银卡会员;若累积的里程数在50,000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50,000英里以上,则自动升级为金卡会员;所以,S1为普卡会员、S2为银卡会员、S3为金卡会员。同样根据上述分析可知,T1、T2就是S2和S3之间的转换原则,T3是S1->S2的转换原则。
问答题 根据说明中的描述,给出图2中C1~C4所对应的类名(类名使用说明中给出的英文词汇)。
【正确答案】
【答案解析】C1:CNonMember;C2:CBasic;C3:CSilver:C4:CGold。[解析] 本问题考察的是类图,即考察类图的层次结构和多重度。图中更有4个非常明显的继承结构,即C1~C4继承CLevel,根据说明可知代表了四类不同的会员模式。
问答题 图2所示的类图中使用了哪种设计模式?在这种设计模式下,类CFrequemFlver必须具有的属性是什么?C1~C4中的travel方法应具有什么功能?
【正确答案】
【答案解析】使用了State模式(状态模式)。
类CFrequentFlyer必须具有的属性:CLevel的对象。
Travel方法的功能:计算飞行里程数,根据里程数判断是否需要调整会员级别(跳转到不同的状态)。 [解析] 状态模式允许对象在内部状态变化时变更其行为,并且修改其类,状态模式的类图如下。