首页 > 其他分享 >软件设计期末试卷2020级

软件设计期末试卷2020级

时间:2023-12-20 20:12:53浏览次数:30  
标签:observer Observer 软件设计 void 模式 2020 期末试卷 public

第1页 /共 6页 石家庄铁道大学 2022 年秋季学期 2020 级本科期末考试试卷(A) 课程名称:软件设计(闭卷) 任课教师: 王辉 考试时间:100 分钟 学号: 姓名: 班级: 考试性质(学生填写):正常考试( )缓考( )补考( )重修( )提前修读( ) 题 号 一 二 三 四 五 六 七 总分 满 分 10 20 20 20 15 15 100 得 分 阅卷人 本试卷满分 100 分,共六道大题。要求所有答案请写在答题纸上,并请写明题号。 一、单项选择题:在每小题列出的选项中只有一个选项是符合要求的,请选择正确选项。 (每小题 2 分,共 10 分, 答题时请写明题号) 1.( )模式使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传 递该请求,直到有一个对象处理为止,避免请求的发送者和接收者之间的耦合关系。 A. 职责链 B. 命令 C. 备忘录 D. 迭代器 2. 当不适合采用生成子类的方法对已有的类进行扩充时,可以采用( )设计模式动态 地给 一个对象添加一些额外的职责。 A. 工厂方法 B. 适配器 C. 装饰 D. 享元 3. 关于单一职责原则,以下叙述错误的是( )。 A. 一个类只负责一个功能领域中的相应职责 B. 一个类承担的职责越多,越容易复用,被复用的可能性越大 C. 就一个类而言,应该有且仅有一个引起它变化的原因 D. 一个类承担的职责过多时需要将职责进行分离,将不同的职责封装在不同的类中 4. 当需要创建的产品具有复杂的内部结构时,为了逐步构造完整的对象,并使得对象的 创建更具有弹性,可以使用( )模式。 A. 抽象工厂 B. 原型 C. 建造者 D. 单例 5. 中介者模式中通过中介者来将同事类解耦,这是( )的具体应用。 A. 合成复用原则 B. 接口隔离原则 C. 里氏代换原则 D. 迪米特法则二、简答题(共 3 题,共 20 分) 1. 软件设计模式的定义?(4分) 2. 软件设计模式根据目的可以分为哪三类?并简单介绍每一类的目的和功能?(8分) 3. 什么是迭代器模式?举一个使用该模式的例子?(8分) 三、设计模式选择填空题(共 5 空,每空 4 分,共 20 分)。 从简单工厂、工厂方法、抽象工厂、建造者、原型、单例、适配器、装饰、享元、代理、 职责链、解释器、迭代器、中介者、备忘录、状态、策略、模板方法和访问者中选择 5 个填到下面合适的空缺上。 1. 当应用程序由于使用大量的对象,造成很大的存储开销时,可以采用__________模式 运用共享技术来有效地支持大量细粒度的对象。 2. __________模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个 实例。 3. __________模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外 保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 4. __________模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 5. __________模式将一个接口转换成客户希望的另一个接口,使得接口不兼容的那些类 可以一起工作。 四、程序填空题:请根据下述问题的说明、类图和程序运行结果将对应的 JAVA 代码补 写完整,答题时请标明每一空的编号。(共 4 空,每空 5 分,共 20 分) 问题说明: 某软件系统中定义了类 OfficeData 和 OfficeExplorer。当类 OfficeData 发生变化时,类 OfficeExplorer 都要更新其自身状态,现采用观察者(Observer) 设计模式来实现该需求。 第2页 /共 6页第3页 /共 6页 类图的核心部分: JAVA 代码: //Subject.java import java.util.*; public abstract class Subject { protected ArrayList<Observer> observers; public Subject() { observers = new ArrayList< 空 1 >(); } public void Attach(Observer observer) { 空 2 ; } public void Detach(Observer observer) { observers.remove(observer);第4页 /共 6页 } public abstract void Notify(); } //Observer.java public abstract class Observer { public abstract void Update(); } //OfficeData.java public class OfficeData extends Subject { public void Notify() { for(Observer obs:this.observers) { 空 3 ; } } } //OfficeExplorer.java public class OfficeExplorer extends Observer { private String myObsName; public OfficeExplorer(String name) { myObsName = name; } public void Update()第5页 /共 6页 { System.out.println("Update observer: " + myObsName); } } //Client.java public class Client { public static void main(String a[]) { Subject subject = new OfficeData(); Observer observer1 = new OfficeExplorer("Observer 1"); Observer observer2 = new OfficeExplorer( 空 4 ); subject.Attach(observer1); subject.Attach(observer2); subject.Notify(); System.out.println("After"); subject.Detach(observer1); subject.Notify(); } } 程序运行结果: Update observer: Observer 1 Update observer: Observer 2 After Update observer: Observer 2五、类图解释题:对于下述类图,说明对应的设计模式的名称,简单描述该模式,并给 出该模式的一个使用例子。(共 15 分,其中软件设计模式的名称 4 分,模式描述 5 分, 模式使用例子 6 分) 六、分析设计题:对于下述场景,选择合适的软件设计模式进行设计,说明选用的设计 模式的名称,简单描述该模式,并画出对应的类图。(共 15 分,其中软件设计模式的名 称 3 分,模式描述 4 分,类图 8 分) 需要开发一个软件公司的网站,公司主页打开时能够同时打开设计部、开发部和测试部 的子网站,公司主页关闭时能够关闭三个部门的子网站。 第6页 /共 6页

标签:observer,Observer,软件设计,void,模式,2020,期末试卷,public
From: https://www.cnblogs.com/yvxiaoshuai/p/17917388.html

相关文章

  • Python实现软件设计模式6:单例模式 Singleton Pattern
    动机针对某个类,为了保证系统中只创建一个示例,并且易于被访问(例如操作系统的任务管理器,软件的登陆注册界面)自行创建这个实例,无法从外部创建这个实例,向系统提供这个实例饿汉式单例Java版本在类加载的时候,就创建对象,如果后续得不到使用,可能会造成内存资源浪费懒汉式单......
  • Python实现软件设计模式5:原型模式 Prototype Pattern
    动机对象的克隆问题,想要复制出本对象的一个副本,属性方法一模一样从需求上来说,先快速克隆对象,后续根据需求再进行对象局部属性的修改区分为深克隆和浅克隆两个版本,默认为浅克隆角色Prototype抽象原型类ConcretePrototype具体原型类Client客户类浅克隆与深克隆......
  • [JOISC2020] 最古の遺跡 3
    [JOISC2020]最古の遺跡3题目背景JOI教授是一名研究IOI王国的历史学家。题目描述他发现了一行古代石柱的废墟及一份古代文献。古代文献上的记载如下:刚建造完成的时候,有\(2\timesN\)个石柱,对于\(1\lek\leN\)均有两个石柱高度为\(k\),同时记第\(i\)个石柱的高度......
  • 软件设计11
    [实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。实验要求:1. 提交类图;   2. 提交源代码;packagett;......
  • JOISC2020题解
    \(\text{ByDaiRuiChen007}\)ContestLinkA.Building4ProblemLink题目大意给\(2n\)个数对\((a_i,b_i)\),构造一个非降序列\(c_i\)满足\(\forall1\lei\len,c_i\in\{a_i,b_i\}\),且\(c_i=a_i\)的位置恰好有\(n\)个。数据范围:\(n\le5\times10^5\)。思路......
  • Python实现软件设计模式4:建造者模式
    特点建造者模式是一步一步构建一个复杂的对象,属于对象创建型模式将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示关注如何逐步地创建一个复杂的对象或产品,不同的创造者定义了不同的创建过程用户不需要知道内部的具体构造细节、只用指定复杂对象的类......
  • Python实现软件设计模式3:抽象工厂模式
    特点系统中除了有多种产品类型(产品等级结构,如果汁、方便面、矿泉水),还出现了多个品牌(产品族,或农夫山泉、娃哈哈、康师傅、统一等品牌几乎都有这些产品)在工厂方法模式中,只有一个产品等级结构一个抽象产品(父类)、多个具体产品(子类)形成一个产品等级结构产品族是指由同一个工厂生产......
  • 计概杂烩2020
    2020计概计算圆柱体的表面积#include<stdio.h>intmain(void){doubler,h;scanf("%lf%lf",&r,&h);printf("Area=%.3lf\n",3.14159*r*(r+h)*2); return0;}最近的食堂#include<stdio.h>#include<math.h>intm......
  • Python实现软件设计模式2:工厂方法模式
    特点工厂存在父类和子类,产品存在父类和子类。工厂父类负责定义创建产品对象的公共接口,工厂子类负责生成具体的产品对象。包含的角色Product抽象产品ConcreteProduct具体产品Factory抽象工厂ConcreteFactory具体工厂模式分析工厂方法模式是简单工厂模式的进......
  • 2020CVPR_High-Resolution Image Synthesis with Latent Diffusion Models
    1.AutoEncoderAutoEncoder(自编码器)是一种无监督学习的神经网络模型,用于学习有效的数据表示。它的目标是将输入数据编码成一种潜在的、紧凑的表示形式,然后从这个表示中重构原始输入。自编码器由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器(Encoder):将输入数据映射到潜在表示空......