当前位置:文档之家› 2013UML与设计模式 试卷 (A)

2013UML与设计模式 试卷 (A)

防灾科技学院
2013 ~ 2014 学年 第一学期期末考试 UML与设计模式 试卷 (A) 答案及评分细则 使用班级1050421/422/423/424、1050411/412 答题 时间:120分钟
题 号 一 二 三 四 五 总 分 阅 卷 教 师
得 分 注意事项: 1、 考试形式闭卷 阅卷教 师 一、单选题(本大题共5小题,每题 2分,共 10 分, 请将答案填写在该题后指定位置) 1、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使 用( )模式。 A 创建型 B 结构型 C行为型 D 以上都可以 2、下面( )图元哪个一个表示关联关系。 A 得 分
long result=endTime-starttime; System.out.println("使用迭代器遍历集合所用时间:"+result+"毫秒"); starttime=System.currentTimeMillis(); for(int i=0;i<list.size();i++){ (1分) String te=list.get(i); (1分) System.out.println(te); (1分) } endTime=System.currentTimeMillis(); result=endTime-starttime; System.out.println("使用get方法遍历集合所用时间:"+result+"毫秒"); } } 3、现有一个字符串数组,现需要:统计数组的长度,按照字符串的长 度大小对数组进行排序,最后将排序号后的字符串数组输出。要求使用 模板方法模式编写程序实现。(10分) 抽象模板 (该部分4分,每处错误扣1分) import java.io.*; public abstract class AbstractTemplate{ String [] allStrings; AbstractTemplate(String [] all){ this.allStrings=all; } public final void showStrings (){ sort(); printStrings(); } public abstract void sort(); public abstract void printStrings(); } 具体模板(该处6分,每处错误扣1分) import java.io.*; import java.awt.*; import java.util.Date; import java.text.SimpleDateFormat; public class ConcreteTemplate1 extends AbstractTemplate{ ConcreteTemplate1(String [] all){

在哪些场景? 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受 者之间的耦合关系,将这些对象连成一条链,并沿着这条链 传递该请求,直到有一个对象处理它为止。 角色:处理者、具体处理者。 场景:有许多对象可以处理用户的请求,希望程序在运行期间自动确 定处理用户的那个对象;希望用户不必明确指定接受者的情况下,向 多个接受者一个提交请求;程序希望动态指定可处理用户请求的对象 集合。 阅卷教 师 得 分 五、程序设计题(本大题共4个小题,每个题目10共 40分) 1、现有一公司有3部门组成,每个部门有10名员工,现需要统计一个部 门的人员工资总和和每名员工的工资,要求使用组合模式设计程序实 现。(10分) 抽象组件 (该部分3分,每处错误扣1分) import java.util.*; public interface Person{ public void add(Person person) throws NoSuchMethodException; public void remove(Person person) throws NoSuchMethodException; public MilitaryPerson getChild(int index) throws NoSuchMethodException; public Iterator<Person> getAllChildren() throws NoSuchMethodException; public boolean isLeaf(); public double getSalary(); public void setSalary(double salary); public String toString(); } Composite 节点(该部分4分,每处错误扣1分)
this.salary=salary; } public void add(Person person) {} public void remove (Person person){} public Person getChild(int index) { return null; } public Iterator<Person> getAllChildren() { return null; } public boolean isLeaf(){ return true; } public double getSalary(){ return salary; } public void setSalary(double salary){ this.salary=salary; } } 2、现有一字符串链表(LinkedList),装有1000个字符串(内容自 拟),要求使用迭代器模式设计程序对链表的中的元素进行遍历并打印 输出。(10分) import java.util.*; public class TestSpeed{ public static void main(String args[]){ LinkedList<String> list=new LinkedList<String>(); (2分) for(int i=0;i<=1000;i++){ list.add("speed"+i); } Iterator<String> iter=list.iterator(); (2分) long starttime=System.currentTimeMillis(); while(iter.hasNext()){ (2分) String te=iter.next(); (1分) } long endTime=System.currentTimeMillis();
B C
3、下列模式中,属于行为模式的是( ) A.工厂模式 B观察者模式 C桥接器模式 D 以上都是 4、( )将一个请求封装为一个对象,从而使用户可用不同的请求对 客户进行参数化。 A 代理模式 B 适配器模式 C原型模式 D 命令模式 5、C++中将一个对象赋值给另外一个创建的对象,如下面的代码(注A 代表一个类): A a; A b=a; 一定会使用到A类中什么函数是 ( )。 A. 析构函数 B 拷贝构造函数 C. 赋值函数 D. 友元函数 答案填写处: 1 A ; 2 B ;3 B ;4 D ;5 B 。 阅卷教 师 二、填空题(本大题10个空,每空2分,共20分,请 将答案填写在该题后指定位置) 1、所谓开闭原则具体是指 设计对扩展开放 、____对修改关闭 _________。 2、设计模式一般用来解决 同一问题的不同表相 的问题。 3、工厂模式分为 简单工厂 、 工厂方法 、 抽象工厂 三种类型。 4、程序设计中追求的两个最基本的原则是 高内聚 、______低耦 合_______。 5、C# 编程使用 namespace 关键字表示命名空间,C++中通过 extern 关键字使用其他文件中定义的全局变量。 答案填写处: 得 分
1 设计对扩展开放、 _对修改关闭 ; 2 同一问题的不同表相 ;3 简单工厂、工厂方法、抽象工厂 ;4 高内聚、低耦合 ;5 namespace、extern 。
阅卷教 师 三、判断题(本大题10个小题,每题1分,共10分, 正确的请打√,错误的打×) 1、框架是针对某个领域,提供用于开发应用系统的类的集合。 (X ) 2、一个设计模式有四个基本要素:名称、问题、方案、角色。 (X ) 3、类A的对象是类B中某个函数的参数,A与B的关系是依赖关系。 (V ) 4、UML中图元 表示泛化关系。 (V ) 5、低耦合是指程序中模块与模块间的关联性小。 (V ) 6、可以使用代理模式实现一个类有且只有一个实例的想法。 (X ) 7、默认情况下,C++ 中使用拷贝构造函数创建对象实质是浅拷贝。 ( V) 8、一个类的静态函数可以调用类内的非静态函数。 ( X ) 9、面向对象编程,是指设计一个类时,不让该类面向具体的类,而是 面向抽象类或接口。 ( V ) 10、接口中的方法访问权限一般为公有。 ( V ) 阅卷教 师 得 分
public class Officer implements Person{ LinkedList<Person> list; String name; double salary; Officer(String name,double salary){ =name; this.salary=salary; list=new LinkedList<Person>(); } public void add(Person person) { list.add(person); } public void remove(Person person){ list.remove(person); } public Person getChild(int index) { return list.get(index); } public Iterator<Person> getAllChildren() { return list.iterator(); } public boolean isLeaf(){ return false; } public double getSalary(){ return salary; } public void setSalary(double salary){ this.salary=salary; } } 叶子节点(该部分3分,每处错误扣1分) public class staff implements Person{ double salary; String name; staff(String name,double salary){ =name;
相关主题