参考答案:
【问题1】(6分)
S1:普卡会员
S2:银卡会员
S3:金卡会员
T1:25000<=里程<50000
T2:里程>=50000
T3:里程>=50000
【问题2】(4分)
C1 ~ C4:CNonMember、CBasic、CSilver、CGold
【问题3】(5分)
(1)状态模式
(2)记录下一状态的属性
(3)判断什么情况进入下一状态
详细解析:
【问题1】
系统中的状态图,是对状态转换的图形化表达。从题目的说明部分可知,在状态转换过程中,涉及到的状态一共有四种:非会员,普卡会员,银卡会员,金卡会员。从状态图涉及的转换可知S1~S3分别为:普卡会员,银卡会员,金卡会员。关于状态转换的分析如下:
(1)由于普卡会员在一年内若累积的里程数在50000英里以上,则自动升级为金卡会员,所以T3为:里程>=50000。
(2)由于银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员,所以T2为:里程>=50000。
(3)由于一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年累积的里程数达到25000英里,但是不足50000英里,则自动降级为银卡会员,所以T1为:25000<=里程<50000。
【问题2】
问题2非常容易,说明中给出的英文词汇一共只有5个,有着同属于一个父类的四个子类关系的,也就只有:CNonMember、CBasic、CSilver、CGold这四个了,并且这四个类位置可以互换。
【问题3】
该问题要求分析类图所采用的设计模式,此处由于涉及到状态的转换问题,所以首选应是设计模式中的状态模式。由于状态模式的标准UML图为:
与题目给出的图示完全一致,所以可以断定本题所采用的设计模式就是状态模式。
由于是状态模式,所以在类CFrequentFlyer中必须有属性能记录下一个状态,同时travel方法也需要能准确判断什么情况应该进入下一状态。