试卷序号: 班级: 学号: 姓名: ━ ━ ━ ━ ━ ━ ━ ━ ━ 装 ━ ━ ━ ━ ━ ━ ━ 订 ━ ━ ━ ━ ━ ━ ━ 线 ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━━ ━ ━━
防灾科技学院
2015 ~ 2016 学年 第一学期期末考试
UML与设计模式 试卷(B) 使用班级:1250411/412/413/414 答题时间:120分钟
阅卷 教师
题号得分
注意事项:闭卷阅卷教师得
分
一二三四五总分
一、单项选择题(本大题10小题,每题 2分,共 20 分,请将答案填写在题后的答案填写处)1、描述如何将关注如何将现有类或对象组织在一起形成更加强大的结构,可以使用( B )模式。 A 行为型 B 结构型 C创建型 D 以上都可以
2、下面( B )图元哪个一个表示关联关系。 A
B
C D
仔细审视下图,完成3-5题目
3、上图中的用例有( B ) A 1 和4
C 1 和5 A 平行 B 包含C 继承 D扩展
5、上图中1和4之间是什么关系?( C )
A 平行 B 包含C 继承 D扩展
6、下面关于接口的表述正确的是:( A )
A 当一个接口太大时,需要将它分割成一些更细小的接口B 接口里可以有方法的实现体 C 每一个接口可以承担几种角色D 接口里可以有成员变量
7、一般来说,可采用( D )模式实现一个类只有规定数量的实例?A 外观 B 观察者 C 组合 D 单例
第 1 页 共 6 页
B 2 和3D 5和4
4、上图中5和3之间是什么关系?( B )
8、下图是( B )图
A 类 B 部署 C动态 D 状态9、以下面向对象设计说法正确的是( A )
A 尽可能针对接口编程 B 尽可能将多个职责写到一个类中 C 多使用继承少使用组合 D 对象的创建与使用不分离
10、 参考下面的代码,请指出Car类与Wheel类之间存在什么关系( D )public class Car{
………………….. }
Public class Wheel{
public void move( Car c)
{……….}}
A泛化关系 B 组合关系 C实现关系 D依赖关系阅卷教师得
分
二、填空题(本题共10题,1-6题每空1分,7-10题每空2分,共20分,请将答案填写在题后的答案填写处)1、UML (Unified Modeling Language)为面向对象软件设计提供可视化、统一的、 标准的建模语言。2、设计模式包含4个要素分别是:模式名称、问题、解决方案和效果。 3、Java编程使用Package关键字表示类的作用域。
4、装饰模式动态地给一个对象增加一些额外的职责。就扩展功能而言,提供了一种比使用子类更加灵活的替代方案。5、面向对象设计原则是为支持可维护性、可复用性而诞生。
6、实现是类元之间的语义关系,其中的一个类元指定了由另一个类元保证执行的契约。7、单一职责原则指一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。(2分)
8、依赖倒转原则指高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(2分)9、迪米特法则指每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。(2分)10、开闭原则指软件实体应当对扩展开放,对修改关闭。(2分)阅卷教师得
分
三、判断题(本大题10个小题,每题1分,共10分,正确的请打√,错误的打×)
1、桥接模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。 2、类A的对象是类B中的一个对象成员,A与B之间存在继承关系。 3、单例模式必须保证一个类只有一个实例。 4、工厂模式是行为型模式。
5、低耦合聚是指程序中各个模块间代码的关联性小。 6、复合享元模式使用了单例模式和组合模式思想。
7、迭代器模式的一个重要想法是让数据存储结构与其遍历算法解耦。 8、一个类的静态函数可以调用类内的非静态数据。
9、设计类时,尽量不让该类面向具体的类,而是面向抽象类或接口。 10、在观察者模式中观察者和目标之间是一对多的关系。
( ( ( ( ( ( ( ( ( ( F F T F T T T F T T ))))))))))
第 2 页 共 6 页
阅卷教师得
分
四、简单题(本大题共2个小题,每题10分,共 20 分。)1、请回答下面2个与建设者模式相关的问题:(1)给出建设者模式的定义、包含的角色(结构)、适用环境。(6分)
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。包含角色:Builder(抽象建造者)、ConcreteBuilder(具体建造者)、Product(产品)、Director(指挥者)适用环境:(1)需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
(2)需要生成的产品对象的属性相互依赖,需要指定其生成顺序(3)对象的创建过程独立于创建该对象的类。
(4)隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品
(2)给出建设者模式的类图(4分)
2、请回答下面2个与适配器模式相关的问题:(1)给出适配器模式的定义、包含的角色(结构)、适用环境。(6分)
适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。包含角色:Target(目标抽象类)、Adapter(适配器类)、Adaptee(适配者类)适用环境:(1)系统需要使用一些现有的类
(2)创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作
(2)给出适配器模式类图?(4分)
阅卷教师得
分
五、分析设计题(本大题共2个小题,每题15分,共30分。)
1、指出下面的类图是哪种设计模式的类图,并给出 Handler 类 和ConcreteHandlerA类的实现代码(C++、Java、C#任选一种)。(15分)
第 3 页 共 6 页
ClientHandler-successor: Handler+HandleRequest ()...successorConcreteHandlerA+HandleRequest ()...ConcreteHandlerB+HandleRequest ()...职责链模式
abstract class Handler{
//维持对下家的引用 protected Handler successor;public void SetSuccessor(Handler successor) {
this.successor = successor;}
public abstract void HandleRequest(string request);
}
//ConcreteHandlerA类
class ConcreteHandlerA : Handler {
public override void HandleRequest(string request) {
if (请求满足条件)
{
//处理请求}else
{
this.successor.HandleRequest(request); //转发请求}}}
2、指出下面的类图是哪种设计模式的类图,并给出Composite类和Leaf类的实现代码(C++、Java、C#任选一种)。(15分)
第 4 页 共 6 页
ComponentClient++++Operation ()Add (Component c)Remove (Component c)GetChild (int i)...Leaf+Operation ()...foreach(Component child in children) { child.Operation();}++++CompositeOperation ()Add (Component c)Remove (Component c)GetChild (int i)...children组合模式:
class Leaf : Component{
public override void Add(Component c) {
//异常处理或错误提示 }public override void Remove(Component c) {
//异常处理或错误提示 }public override Component GetChild(int i) {
//异常处理或错误提示return null; }public override void Operation() {
//叶子构件具体业务方法的实现} }
using System;
using System.Collections.Generic;class Composite : Component {
private List
list.Add(c);}public override void Remove(Component c) {
list.Remove(c);}public override Component GetChild(int i) {
第 5 页 共 6 页