第1页共6页━━━━━━━━━装━━━━━━━订━━━━━━━线━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━防灾科技学院2015~2016学年第一学期期末考试UML与设计模式试卷(B)使用班级:1250411/412/413/414答题时间:120分钟题号一二三四五总分阅卷教师得分注意事项:闭卷一、单项选择题(本大题10小题,每题2分,共20分,请将答案填写在题后的答案填写处)1、描述如何将关注如何将现有类或对象组织在一起形成更加强大的结构,可以使用(B)模式。A行为型B结构型C创建型D以上都可以2、下面(B)图元哪个一个表示关联关系。ABCD仔细审视下图,完成3-5题目3、上图中的用例有(B)A1和4B2和3C1和5D5和44、上图中5和3之间是什么关系?(B)A平行B包含C继承D扩展5、上图中1和4之间是什么关系?(C)A平行B包含C继承D扩展6、下面关于接口的表述正确的是:(A)A当一个接口太大时,需要将它分割成一些更细小的接口B接口里可以有方法的实现体C每一个接口可以承担几种角色D接口里可以有成员变量7、一般来说,可采用(D)模式实现一个类只有规定数量的实例?A外观B观察者C组合D单例阅卷教师得分试卷序号:班级:学号:姓名:第2页共6页8、下图是(B)图A类B部署C动态D状态9、以下面向对象设计说法正确的是(A)A尽可能针对接口编程B尽可能将多个职责写到一个类中C多使用继承少使用组合D对象的创建与使用不分离10、参考下面的代码,请指出Car类与Wheel类之间存在什么关系(D)publicclassCar{…………………..}PublicclassWheel{publicvoidmove(Carc){……….}}A泛化关系B组合关系C实现关系D依赖关系二、填空题(本题共10题,1-6题每空1分,7-10题每空2分,共20分,请将答案填写在题后的答案填写处)1、UML(UnifiedModelingLanguage)为面向对象软件设计提供可视化、统一的、标准的建模语言。2、设计模式包含4个要素分别是:模式名称、问题、解决方案和效果。3、Java编程使用Package关键字表示类的作用域。4、装饰模式动态地给一个对象增加一些额外的职责。就扩展功能而言,提供了一种比使用子类更加灵活的替代方案。5、面向对象设计原则是为支持可维护性、可复用性而诞生。6、实现是类元之间的语义关系,其中的一个类元指定了由另一个类元保证执行的契约。7、单一职责原则指一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。(2分)8、依赖倒转原则指高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。(2分)9、迪米特法则指每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。(2分)10、开闭原则指软件实体应当对扩展开放,对修改关闭。(2分)三、判断题(本大题10个小题,每题1分,共10分,正确的请打√,错误的打×)1、桥接模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。(F)2、类A的对象是类B中的一个对象成员,A与B之间存在继承关系。(F)3、单例模式必须保证一个类只有一个实例。(T)4、工厂模式是行为型模式。(F)5、低耦合聚是指程序中各个模块间代码的关联性小。(T)6、复合享元模式使用了单例模式和组合模式思想。(T)7、迭代器模式的一个重要想法是让数据存储结构与其遍历算法解耦。(T)8、一个类的静态函数可以调用类内的非静态数据。(F)9、设计类时,尽量不让该类面向具体的类,而是面向抽象类或接口。(T)10、在观察者模式中观察者和目标之间是一对多的关系。(T)阅卷教师得分阅卷教师得分第3页共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分)阅卷教师得分阅卷教师得分第4页共6页successorHandler-successor:Handler+HandleRequest()...ConcreteHandlerA+HandleRequest()...ConcreteHandlerB+HandleRequest()...Client职责链模式abstractclassHandler{//维持对下家的引用protectedHandlersuccessor;publicvoidSetSuccessor(Handlersuccessor){this.successor=successor;}publicabstractvoidHandleRequest(stringrequest);}//ConcreteHandlerA类classConcreteHandlerA:Handler{publicoverridevoidHandleRequest(stringrequest){if(请求满足条件){//处理请求}else{this.successor.HandleRequest(request);//转发请求}}}2、指出下面的类图是哪种设计模式的类图,并给出Composite类和Leaf类的实现代码(C++、Java、C#任选一种)。(15分)第5页共6页childrenClientComponent++++Operation()Add(Componentc)Remove(Componentc)GetChild(inti)...Leaf+Operation()...Composite++++Operation()Add(Componentc)Remove(Componentc)GetChild(inti)...foreach(Componentchildinchildren){child.Operation();}组合模式:classLeaf:Component{publicoverridevoidAdd(Componentc){//异常处理或错误提示}publicoverridevoidRemove(Componentc){//异常处理或错误提示}publicoverrideComponentGetChild(inti){//异常处理或错误提示returnnull;}publicoverridevoidOperation(){//叶子构件具体业务方法的实现}}usingSystem;usingSystem.Collections.Generic;classComposite:Component{privateListComponentlist=newListComponent();publicoverridevoidAdd(Componentc){list.Add(c);}publicoverridevoidRemove(Componentc){list.Remove(c);}publicoverrideComponentGetChild(inti){第6页共6页return(Component)list[i];}publicoverridevoidOperation(){//容器构件具体业务方法的实现,将递归调用成员构件的业务方法foreach(Objectobjinlist){((Component)obj).Operation();}}}