试卷序号: 班级: 学号: 姓名:
━ ━ ━ ━ ━ ━ ━ ━ ━ 装 ━ ━ ━ ━ ━ ━ ━ 订 ━ ━ ━ ━ ━ ━ ━ 线 ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━━ ━ ━━
防灾科技学院
2015 ~ 2016 学年 第一学期期末考试
UML与设计模式 试卷(A) 使用班级:1250411/412/413/414 答题时间:120分钟
题号 得分 注意事项:闭卷
得 分
一、单项选择题(本大题10小题,每题 2分,共 20 分,请将答案填写在题后的答案填写处) 阅卷教师 1、描述如何将对象的创建和使用分离,可以使用( C )模式。 A 行为型 B 结构型 C创建型 D 以上都可以
2、下面( A )图元哪个一个表示依赖关系。 A
B
一 二 三 四 五 总分 阅卷 教师 C D 仔细审视下图,完成3-5题目
3、上图中的参与者有( A ) A 1 和4 B 2 和3
C 3 和5 D 5和6 A 平行 B 包含 C 继承 D扩展 A 平行 B 包含 C 继承 D扩展
A 当一个接口太大时,需要将它分割成一些更细小的接口 B 接口里不能有方法的实现体
C 每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干 D 接口里可以有成员变量
7、一般来说,可采用( D )模式运用共享技术有效地支持大量细粒度对象的复用? A 外观 B 观察者 C 组合 D 享元
共 5 页 第 1 页
4、上图中2和3之间是什么关系?( B )
5、上图中5和6之间是什么关系?( D )
6、下面关于接口的表述错误的是:( D )
8、下图是( D )图
初始状态 assigned to subscription time out Available lock 状态 Locked buy Sold unlock 转换 exchange 触发器事件
A 类 B用例 C动态 D 状态 9、以下面向对象设计说法正确的是( A )
A 尽可能针对接口编程 B 尽可能将多个职责写到一个类中 C 多使用继承少使用组合 D 对象的创建与使用不分离
10、 参考下面的代码,请指出Car类与Wheeel类之间存在什么关系( B ) public class Car {
Wheel w; ………………….. }
Public class Wheel {
public void move()
{……….} }
A泛化关系 B 组合关系 C实现关系 D依赖关系
阅卷教师
得 分
二、填空题(本题共10题,1-6题每空1分,7-10题每空2分,共20分,请将答案填写在题后的答案填写处) 1、UML (Unified Modeling Language)为面向对象软件设计提供可视化、统一的、 标准的建模语言。 2、设计模式包含4个要素分别是:模式名称、问题、解决方案和效果。 3、C#编程使用namespace关键字表示类的作用域。
4、 外观模式定义一个对象来封装一系列对象的交互,使各对象之间不需要显式地相互引用。 5、 面向对象设计原则是为支持可维护性、可复用性而诞生。 6、在软件开发中使用桥接模式将多个变化维度分离。
7、里氏代换原则指所有引用基类的地方必须能透明地使用其子类的对象。
8、依赖倒转原则指高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。 9、迪米特法则指一个软件实体应当尽可能少的与其他实体发生相互作用。 10、接口隔离原则指客户端不应该依赖那些它不需要的接口。
阅卷教师
得 分
三、判断题(本大题10个小题,每题1分,共10分,正确的请打√,错误的打×)
1、装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。 ( T ) 2、类A的对象是类B中某个函数的参数类型,A与B之间存在继承关系。 ( F ) 3、单例模式能够保证一个类只有一个实例。 ( T ) 4、原型模式是行为型模式。 ( F ) 5、低耦合聚是指程序中各个模块间代码的关联性小。 ( T ) 6、复合享元模式使用了单例模式和组合模式思想。 ( T ) 7、外观模式的一个重要想法是让数据存储结构与其遍历算法解耦。 ( F ) 8、一个类的静态函数可以调用类内的静态数据。 ( F ) 9、设计类时,尽量不让该类面向具体的类,而是面向抽象类或接口。 ( T ) 10、在观察者模式中观察者和目标之间是一对一的关系。 ( F )
阅卷教师
得 分 共 5 页 第 2 页
四、简单题(本大题共2个小题,每题10分,共 20 分。) 1、请回答下面2个与迭代器模式相关的问题: (1)给出迭代器模式的定义、包含的角色(结构)、适用环境。(6分)
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。 包含的角色:抽象迭代器(Iterator)、具体迭代器(ConcreteIterator)、抽象聚合类(Aggregate)、具体聚合类(ConcreteAggregate) 适用环境:(1)访问一个聚合对象的内容而无须暴露它的内部表示; (2)需要为一个聚合对象提供多种便利方式; (3)为遍历不同的聚合结构提供一个统一的接口。 (2)给出迭代器模式的类图(4分)
IteratorAggregate+CreateIterator ()++++First ()Next ()HasNext ()CurrentItem ()ConcreteIteratorConcreteAggregate+CreateIterator ()...++++First ()Next ()HasNext ()CurrentItem () 2、请回答下面2个与组合模式相关的问题: (1)给出组合模式的定义、包含的角色(结构)、适用环境。(6分) 组合模式:组合多个对象形成树形结构以表示具有部分——整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 包含的角色:抽象构件(Component)、叶子构件(Leaf)、容器构件(Composite) 适用环境:(1)在具有整体和部分的层次结构中;
(2)在一个使用面向对象语言开发的系统中需要处理一个树形结构;
(3)在一个系统中能够分离出叶子对象和容器对象,而且他们的类型不固定,需要增加一些新的类型。 (2)给出组合模式类图?(4分)
阅卷教师 得 分
五、分析设计题(本大题共3个小题,每题10分,共30分。)
1、指出下面的类图是哪种设计模式的类图,并给出Factory类的实现代码(C++、Java、C#任选一种)。(10分)
共 5 页 第 3 页
ProductConcreteProductAConcreteProductBif(arg.Equals(\"A\")){ return new ConcreteProductA();}else if(arg.Equals(\"B\")){ return new ConcreteProductB();}else{ ......}Factory+FactoryMethod (string arg): Product... 简单工厂模式 class Factory {
//静态工厂方法
public static Product GetProduct(string arg) {
Product product = null; if (arg.Equals(\"A\")) {
product = new ConcreteProductA(); //初始化设置product }
else if (arg.Equals(\"B\")) {
product = new ConcreteProductB(); //初始化设置product }
return product; } }
2、指出下面的类图是哪种设计模式的类图,并给出Adapter类的实现代码(C++、Java、C#任选一种)。(10分)
ClientTarget+Request ()...Adaptee+SpecificRequest ()...Adapter+Request ()...adapteeadaptee.SpecificRequest(); 适配器模式 class Adapter : Target { private Adaptee adaptee; //维持一个对适配者对象的引用 public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } public void Request()
共 5 页 第 4 页
}
{ }
adaptee.SpecificRequest();//转发调用
3、给出模板类Stack和其float类型的代码实现(C++)。(10分)
TStack- size : int+ Push(elem : T) : int+ Pop() : int+ GetTop() : const T&< 共 5 页 第 5 页 因篇幅问题不能全部显示,请点此查看更多更全内容