三、控制类
控制类用于对一个或几个用例所特有的控制行为进行建模,它描述的用例的业务逻辑的实现,控制类的设计与用例实现有着很大的关系。在有些情况下,一个用例可能对应多个控制类对象,或在一个控制类对象中对应着对个用例。它们之间没有固定的对应关系,而是根据具体情况进行分析判断,控制类有效将业务逻辑独立于实体数据和边界控制,专注于处理业务逻辑,控制类会将特有的操作和实体类分离,者有利于实体类的统一化和提高复用性。 当业务主角通过边界类来执行用例的时候,产生一个控制类对象,在用例被执行完后,控制类对象会被销毁。
控制类的特点:独立于环境、和用例的实现关联、使用关联实体类或操作实体类对象、 专注于业务逻辑的实现。
当然如果用例的逻辑较为简单,可以直接利用边界类来操作实体类,而不必再使用控制类。或者用例的逻辑较为固定,业务逻辑固定不会改变。也可以直接在边界类实现该逻辑。
问题2答案解析: 问题2 X1:收货地址 X2:支付方式 X3:邮箱地址 X4:电动玩具定制属性
问题3答案解析: 问题3 S1:订单挂起 S2:订单备货 S3:订单定制
11
S4:订单发货 S5:订单收货
第 4 题
阅读下列说明和C代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】
假币问题:有n枚硬币,其中有一枚是假币,己知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。 【分析问题】
将n枚硬币分成相等的两部分:
(1)当n为偶数时,将前后两部分,即 1...n/2和n/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币:
(2)当n为奇数时,将前后两部分,即1..(n -1)/2和(n+1)/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。 【C代码】
下面是算法的C语言实现,其中: coins[]: 硬币数组
first,last:当前考虑的硬币数组中的第一个和最后一个下标
#include
int getCounterfeitCoin(int coins[], int first,int last) {
int firstSum = 0,lastSum = 0; int ì;
If(first==last-1){ /*只剩两枚硬币*/ if(coins[first] < coins[last]) return first;
12
return last; }
if((last - first + 1) % 2 ==0){ /*偶数枚硬币*/ for(i = first;i <( 1 );i++){ firstSum+= coins[i]; }
for(i=first + (last-first) / 2 + 1;i < last +1;i++){ lastSum += coins[i]; } if( 2 ){
Return getCounterfeitCoin(coins,first,first+(last-first)/2;) }else{
Return getCounterfeitCoin(coins,first+(last-first)/2+1,last;) } }
else{ /*奇数枚硬币*/
For(i=first;i For(i=first+(last-first)/2+1;i If(firstSum return getCounterfeitCoin(coins,first,first+(last-first)/2-1); }else if(firstSum>lastSum){ return getCounterfeitCoin(coins,first+(last-first)/2-1,last); }else{ Return( 3 ) } 13 } } 问题:4.1 根据题干说明,填充C代码中的空(1)-(3) 问题:4.2 根据题干说明和C代码,算法采用了( )设计策略。 函数getCounterfeitCoin的时间复杂度为( )(用O表示)。 问题:4.3 若输入的硬币数为30,则最少的比较次数为( ),最多的比较次数为( )。 答案解析: 问题1 (1)first+(last-first)/2 或(first+last)/2 (2)firstSum (3)first+(last-first)/2 或(first+last)/2 答案解析: 问题2 (4)分治法 (5)O(nlogn) 答案解析: 问题3 (6)2 (7)4 14 试题分析:若输入30个硬币,找假硬币的比较过程为: 第1次:15 比 15,此时能发现假币在15个的范围内。 第2次:7 比 7,此时,如果天平两端重量相同,则中间的硬币为假币,此时可找到假币,这是最理想的状态。 第3次:3 比 3,此时若平衡,则能找出假币,不平衡,则能确定假币为3个中的1个。 第4次:1 比 1,到这一步无论是否平衡都能找出假币,此时为最多比较次数。 第 5 题 阅读下列说明和 C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某快餐厅主要制作井出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种类可能不同,但其制作过程相同。前台服务员(Waiter)调度厨师制作套餐。现采用生成器(Builder) 模式实现制作过程,得到如图 5-1 所示的类图。 【C++代码】 #include class Pizza { private: string parts; 15
相关推荐: