2011级设计模式试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-2014学年第1学期
2011级《软件设计模式》考试试题(开卷)
考试时间:2013年
班级学号姓名
✧本试卷满分100分;
✧请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;
✧试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中
的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;
✧请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸
一并交上来。
一、单选题(共20分,每题2分)
1.类设计中,“变化是绝对的,稳定是相对的”,下列哪个不属于这句话中“变化”的范畴?
(A) 改变函数参数的类型(B) 增加新的数据成员
(C) 改变编程语言(D) 改变对象交互的过程和顺序
2.Open-Close原则的含义是一个软件实体:
(A) 应当对扩展开放,对修改关闭
(B) 应当对修改开放,对扩展关闭
(C) 应当对继承开放,对修改关闭
(D) 以上都不对
3.下列关于继承表述错误的是:
(A) 继承是一种通过扩展一个已有类的实现,从而获得新功能的复用方法
(B) 泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加
属性和方法来进行实现的扩展
(C) 破坏了封装性,因为这会将父类的实现细节暴露给子类
(D) 继承本质上是“白盒复用”,对父类的修改,不会影响到子类
4.在面向对象设计时,应优先使用哪种方式实现既有代码的复用:
(A) 组合或聚合(B) 公有继承
(C) 保护或私有继承; (D) 拷贝、粘贴再修改
5.下列关于设计模式的说法,错误的是:
(A) 设计模式都是开闭基本原则的宏观运用,本质上是没有任何模式的
(B) 设计时可以应用已有的设计模式,也可以应用自己发现的新模式
(C) 应用设计模式时,要考虑应用的具体特点,因为不存在万能的设计模式
(D) 应用设计模式,既可以增强系统的扩展性和灵活性,又可以减少最终的代码量
6.在继承关系中,方法应向( )集中,数据应向( ) 集中。
(A) 父类,子类(B) 子类,父类
(C) 子类,子类(D) 父类,父类
7.下列关于对象组合/聚合,说法错误的是:
(A) 容器类能通过被包含对象的接口来对其进行访问
(B) 属于黑盒复用,封装性好,因为被包含对象的内部细节对外是不可见
(C) 可以在运行时将被包含对象改变成同类型对象,从而改变容器类的行为效果,但没有
改变容器类的接口
(D) 比继承关系更加灵活,代价是相比继承关系,增强了类间的耦合度
8.下面关于工厂模式的说法错误的是:
(A) 工厂模式可用于分离产品的使用与创建过程
(B) 产品必须有一个唯一的公共基类
(C) 工厂可以是抽象类,也可以是具体类
(D)简单工厂模式是退化的工厂模式,它要求产品种类稳定
9.孙小美每天都要画好妆再出门,洗脸、打粉底、描眉、上眼影、画眼线、刷睫毛、打腮红、
上唇彩,虽然每天都是这个流程,但总有所变化,如昨天“樱桃小口”,今天“性感美女”,明天“卧蚕眉、丹凤眼”,后天“芭比娃娃”了。下面哪种说法是不恰当的?
(A) 将“樱桃小口”、“芭比娃娃”等作为具体策略,从而使用策略模式比较合适
(B) 化妆的基本步骤是稳定的,但每个子步骤是易变的
(C) “芭比娃娃”表明变化会同时存在于多个子步骤中
(D) 直接使用模版方法模式可能不合适,因为子步骤的多种组合会造成子类数量激增
10.“兄弟俩要到操场上玩,临走时,跟妈妈说:“我俩玩去了,饭好了,招呼我们””。这段话
所描述的场景最适合下列能哪种模式的应用场景?
(A) 访问者模式(B) 中介者模式
(C) 策略模式(D) 观察者模式
二、(共20分,每题4分) 针对给出的场景、描述,请说出最适当的模式名字,并用文字或示
例代码给出简要的使用说明或解释。
1.开发了一个用于数值计算的大型程序库,它的功能是强大的,但需要使用者具备较高的数
学专业知识。为方便“菜鸟”级用户的使用,需要提供一个简化版的,但同时又不希望影响专业人员的使用。使用哪种设计模式较好?如何设计?
2.在2D游戏的开发中,需要绘制地图,地图是由大量的“一样的图块”拼接而成,而“图块”
的种类有限,目前有草地、海洋、沙漠、山地等,未来肯定要增加种类,但不会太多太频繁。采用何种模式设计“图块”类比较好?如何设计?
3.在开发一个办公自动化系统时,项目组在ElectricSignature类集中实现了电子签名的功能。
但在使用中发现该类不能完全满足用户需求,由于财力和人员的限制,决定直接购买第三方电子签名软件,其中的FZ_ESignet类功能与ElectricSignature的功能一样,但是两个类中的函数名都是不一样的,而且购买的只是二进制代码,没有源代码。现希望使用第三方软件的功能,但又不希望修改ElectricSignature的接口。使用哪种设计模式改进较好?如何改进?
4.Example类的成员函数的实现如下,CheckCondition为虚函数,由于子类可能增加新的返
回数值,所以未来可能会需要在MyFunc中增加其它case项。请问要改进MyFunc的实现,避免未来修改Example类,采用哪种模式为好?如何改进设计?
void Example::MyFunc( ) {
switch( CheckCondition( ) ) {
/* 6个case语句块,略*/
default: break;
}
};
5.某书店需要开发一套图书购销存软件。在设计图书类时发现:图书有单行本和成套的,又
细分成教辅材料、科学知识、文学著作等。设计时,希望能够以一致的方式访问各种图书,不论是单本的、成套的、IT类的或古典名著。使用哪种设计模式较好?如何设计?
三、(
四、(共30分,每题5分) 按要求回答。
某个电器厂商要为加热器产品开发控制软件,由于有多种加热器产品,厂家希望该软件能适用各种加热器产品,并适应未来多种变化需要。基本代码见表A。