第1页共3页2016-2017学年第1学期2014级《软件设计模式》考试试题A(开卷)考试时间:2016年11月班级学号姓名本试卷满分100分;请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来。一、单选题(共20分,每题2分)1.下列选项中属于设计模式主要优点的是:(A)程序易于理解(B)减少程序最终代码量(C)适应需求变化(D)简化软件系统的设计2.Open-Close原则的含义是一个软件实体:(A)应当对扩展开放,对修改关闭(B)应当对修改开放,对扩展关闭(C)应当对继承开放,对修改关闭(D)以上都不对3.下列选项中属于面向对象设计原则的是:(A)抽象(B)封装(C)里氏替换(D)多态性4.设计模式的关键要素不包括:(A)名称(B)问题(C)解决方案(D)实现5.下列选项中不属于创建型模式的是:(A)抽象工厂模式(B)外观模式(C)工厂方法模式(D)单件(单例)模式6.用于分离接口和具体实现,使得接口和实现可独立变化的是:(A)适配器模式(B)桥接模式(C)命令模式(D)模板方法模式7.体现“集中管理多个对象间的交互过程和顺序”的是:(A)状态模式(B)门面模式(C)策略模式(D)中介者模式8.限制类的实例对象只能有一个的是:(A)观察者模式(B)工厂方法模式(C)单件(单例)模式(D)生成器模式9.描述对象所能接受的全部请求的集合的是:(A)型构(B)接口(C)类型(D)超类型10.用于为一个对象添加更多功能而不使用子类的是:(A)桥接模式(B)适配器模式(C)代理模式(D)装饰器模式第2页共3页二、简答题(共30分,每题10分)1.银行信用卡中心的电子账单系统包括了发送器、账单、广告信和发送队列等对象,其中广告信的业务逻辑是:先到数据库中把客户信息一个一个的取出,每个客户都生成一份个性化的邮件,然后交给发送机进行发送处理。请问使用哪种模式设计广告信较好?请画出UML设计类图。2.软件公司要开发一个图形界面组件库,界面组件分为两大类,一类是单元控件,例如按钮、文本框等,一类是容器控件,例如对话框、表单等,请问采用何种模式设计比较好?请画出UML设计类图。3.化妆品公司的报表系统可将不同月份的销售数据以柱状图、曲线图和饼状图等多种形式展示出来,各个月份的销售数据可以从文本文件中获取,也可以从数据库中获取,还可以从Excel文件中获取。如果需要从Excel文件中获取数据,则需要调用与Excel相关的API,而这个API是现有系统所不具备的,该API由厂商提供。请问采用何种模式设计比较好?请画出UML设计类图。三、程序设计题(共10分,每题10分)1.客户请小王编写一个从键盘读入字符并输出到打印机的程序。小王使用结构化的设计方法,编写了如下代码。该程序包含3个子程序,Copy子程序从ReadKeyboard子程序中获取字符,并把字符传递给WritePrinter子程序。几个月后,客户说有时希望Copy程序能从纸带读入机中读入字符。并且,在未来可能还会从其它种类的输入设备中读入字符,也可能输出到其它种类的输出设备。小王希望他写出的代码既能满足上述要求,又不用每次都改写Copy的实现。1)请你从面向对象设计原则的角度分析小王原来的设计存在什么问题?(3分)2)请你采用面向对象方法帮小王重新设计Copy函数,添加必要的类,使得新设计能够满足小王的愿望。简要说明你的设计思想,给出实现代码。(7分)voidCopy(){intc;while((c=ReadKeyboard())!=EOF))//EOF为宏定义的终结字符WritePrinter(c);}四、综合应用题(共40分,每题20分)1.小王准备使用面向对象的方法设计一个快餐店的简单游戏,游戏中有顾客、服务员、菜品和厨师。每个顾客都有一个服务员帮助点菜,并且可以点多个菜;每道菜都由指定厨师制作,不同的菜可能由不同的厨师制作;顾客跟服务员点完菜后,服务员通知后厨做菜。请你针对上面的描述,帮助小王选择合适的设计模式进行设计。1)简要说明你的设计思路和选择的模式。(5分)2)给出你设计的UML类图和实现代码。(15分)第3页共3页2.小王正在为某公司设计开发一套物业租赁管理系统,该公司有多种类型的物业,如公寓、商铺等,并且在将来可能会增加新的物业类型,如别墅、车库等;公司的经纪每租出一个物业,主管就会收到相应的租赁信息。请你针对上面的描述,帮助小王选择合适的设计模式进行设计。1)简要说明你的设计思路和选择的模式。(5分)2)给出你设计的UML类图和实现代码。(15分)(全卷完)