


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件设计师-28(总分:100.00,做题时间:90分钟)一、试题一(总题数:1,分数:20.00)1. 阅读下列说明和C+弋码,将应填入(n)处的字句写在答题纸的对应栏内。说明某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command命令)模式实现该遥控器的软件部分,Command!式的类图如下图所示。Comman模 式类图C+代码class Lightpublic:Light(string name)/*代码省略 */void on()/* 代码省略*/) / 开灯 v
2、oid off()/* 代码省略*/) / 关灯 :class Commandpublic: ;class LightOnCommand:public Command /开灯命令private:Light*light;public:LightOnCommand(Light*light)this- > light=light;Void execute(); ;class LightOffCommand:public Command /关灯命令private:Light*light;public:LightOffCommand(Light*light)this-> light=ligh
3、t;Void execute()(;Class RemoteControl /遥控器private:Command*onCommands7;Command*offCommands7;public:RemoteControl()/*代码省略 */void setCommand(int slot Command*onCommand,Command*offCommand)=onCommand;=offCommand;void onButtonWasPushed(int slot):)void offButtonWasPushed(int slot):; int main()RemoteControl
4、 *remoteControl=new RemoteControl ();Light* livingRoomLight=new Light("Living Room");Light*kitchen Light=new Light("kitchen");LightOnCommand*livingRoomLightOn=new LightOnCommand(livingRoomLight);LightOffCommand*livingRoomLightOff=newLightOffCommand(livingRoomLight);LightOnCommand
5、*kitchenLighton=new LightOnCommand(kitchenLight);LightOffCommand*kitchenLightOff=new LightOffCommand(kitchenLight);remoteControlremoteControlremoteControlremoteControlremoteControlremoteControl- /*其余代码省略> setCommand(0,livingRoomLightOn,livingRoomLightoff);> setCommand(1,kitchenLighton,kitchenL
6、ightOff);> onButtonWasPushed(O);> Off ButtonWasPushed(O);> onButtonWasPushed(1);> OffButtonWasPushed(1);*/return 0;(分数:20.00 ) 正确答案:()解析:void execute()light- > on()light- > off() onCommandsslot offCommandsslot onCommandsslot- > execute() offCommandsslot- > execute() 解析本题考查Com
7、mand令模式的概念及应用,并用C+语言实现。Command令模式是一种对象行为模式。它主要解决的问题是,在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题,将一个请求封装为一个对象,从而可用不同的请求对客户进 行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。二、试题二(总题数:1,分数:20.00)2. 阅读下列说明和C+代码,将应填入横线处的字句写在下面。说明某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据,当获取 到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者(observer)模式来开发该系统,观察者
8、模式的类图如下图所示。C+弋码如下。#include < iostream >#include < vector >Using namespace std;Class ObserverPublic:Virtual void update(float temp,float humidity,float cleanness)=0;Class Subject Public:Virtual void registerObserver(Observer*o)=0;/注册对主题感兴趣的观察者Virtual void removeObserver(Observer*o)=0;/删除观
9、察者Virtual void notifyObservers()=0; /当主题发生变化时通知观察者Class EnvironmentData:public Private:Vector < Observer* > observers;Float temperature,humidity,cleanness;Public:Void registerObserver(Observer*o) observers.push_back(0);Void removeObserver(Observer*o)/* 弋码省略 */)Void notifyobservers( )for(vector
10、 < Observe* > :const iterator it=observers.begin(); it!=observems.end();it+);Void measurementsChanged();Void setMeasurements(float temperature,float humidity,float cleanness)this- > temperature= temperature;this- > humidity=humidity;this- > cleanness=cleanness;Class CurrentConditionsD
11、isplay:public private:float temperature,humidity,cleanness; Subject-envData;Public:CurrentConditionsDisplay(Subject*envData) this- > envData=envData;Void update(float temperature,float humidity,float cleanness) this- > temperature=temperature;This- > humidity=humidity;This- > cleanness=c
12、leanness;display。;Void display()/*代码省略 */);int main() EnvironmentData* envData=new EnvironmentDataO;CurrentConditionsDisplay*currentDisplay=new CurrentConditionsDisplay(envData);envData- > setMeasurements(80,65,30.4f); return 0;(分数:20.00 ) 正确答案:()解析:Subject(*it)-> update(temperature,humidity,c
13、leanness)notifyObservers() measurementsChanged()Observer。this- >envData- >registerObserver(this) 解析当主题中的环境发生变化,也就是调用 measurementsChanged()会通知观察者,即调用notifyObservers() ,在 notifyObservers() 方法中,观察者会调用自身 update(float temperature ,float humidity , float cleanness) ,在主题的 registerObserver(Observe*o)中
14、会注册对主题感兴趣的观察者。三、试题三(总题数:1,分数:20.00)3. 阅读下列说明和C+弋码,将应填入处。说明现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。现采用原型模式(Prototype)来实现上述要求,得到如下图所示的类图。类图C+代码#include < string > Using namespace std; Class Cloneable Public: ;Class WorkExperience:public Cloneable /工作经历Priva
15、te:String workDate;String company;PubliC:Cloneable*Clone();Obj- >workDate=this- >workDate;Obj- > company=this- > company;Return obj;/ 其余代码省略;Class Resume:public Cloneable / 简历Private:String name;string sex;string age;WorkExperience*work;Resume(WorkExperience*work)This- > work=;Public:
16、Resume(string name)(/* 实现省略 */ Void setPersonalInfo(string sex,string age) /*实现省略 */ Void setWorkExperience(string workDate,string company) /* 实现省略 */ Cloneable*Clone()Obj- > name=this- > name;Obj- > sex=this- > sex;Obj- > age=this- > age;Return obj;Int main()Resume*a=new Resume(”
17、张三");A-> SetPersonalInfo("男","29");A- > SetWorkExperience("1998 2000","XXX 公司");Resume*b=;B- > SetWorkExperience("2001 2006","YYY 公司"); Return 0;(分数: 20.00 )题中声明一个虚拟基类,所有的原型都从这个基类继承,第一处所代表的就是这个基类中的纯虚函数,需要继承者自行实现,即为 virtual Clo
18、neable*Clone()=0 ,首先声明一个抽象基类,并定义 clone()函数为 纯虚函数。然后根据基类实例化各个子类,并且实现复制构造函数,并实现clone()函数,由此可知第二处为 WorkExperience*obj ,第三处为 Work,第四处为 Resume*obj。在 main函数中实现 Resume*b对*a的 复制,故根据C+语法,第五处中为 a- >Clone()。四、试题四(总题数:1,分数:20.00)4阅读以下说明和C+代码,将应填入处的字句写在下面。说明欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程 序如下表所
19、示。不同的绘图程序DPIDP2绘制直线draw a lin e(x1,y1,x2,y2)drawli ne(x1,x2,y1,y2)绘制圆draw a circle(x,y,r)drawcircle(x,y,r)该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免岀现类爆炸的情况,现采用桥 接(Bridge)模式来实现上述要求,得到如下图所示的类图。某绘图软件类图C+代码classDP1public:static void draw_aline(double x1,double y1,double x2,double y2) /*代码省略*/static void draw_a_
20、circle(double x,double y,double r)/*代码省略 */);ClassDP2public:static void drawline(double x1,double x2,double y1,double y2) /*代码省略*/static void drawcircle(double x,double y,double r)/*代码省略 */;class Drawingpublic:;class V1Drawing:public Drawingpublic:void drawLine(double x1,double y1,double x2,double y
21、2)/*代码省略 */)void drawCircle(double x,double y,double r);class V2Drawing:public Drawingpublic:void drawLine(double x1,double y1,double x2,double y2)/*代码省略 */)void drawCircle(double x,double y,double r););class Shapepublic:Shape(Drawing*dp)_dp=dp;void drawLine(double x1,double y1,double x2,double y2)_
22、dp- > drawLine(x1,y1,x2,y2);void drawCircle(double x,double y,double r)_dp->drawCircle(x,y,r);private:Drawing*_dp;class Rectangle:public Shapepublic:void draw() /* 代码省略 */ / 其余代码省略;class Circle:public Shape private:double_x,_y,_r;public:Circle(Drawing*dp,double x,double y,double r): _x=x;_y=y;
23、_r=r;void draw() drawCircle(_x,_y,_r);(分数: 20.00 ) 正确答案: ()解析: virtual void drawLine(double x1,double y1,double x2,double y2)=0;virtual void drawCircle(double x,double y,double r)=0;DP1:draw_a_ircle(x,y,r);DP2:drawCircle(x,y,r);virtual void draw()=0Shape(dp) 解析 本题考查 Bridge 桥接模式的概念及应用,将抽象与其实现解耦,使它们都可
24、以独立地 变化。大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其派生类用 来实现自己的对象 ( 而不是抽象类的派生类,这些派生类被称为具体类 )Drawing 是一个虚拟基类,里面包含了希望不同策略实现的算法,派生类V1Drawing,V2Drawing 都派生自Drawing ,对基类中的希望实现的算法都作了具体实现, 且它们都含有 drawLine 和 drawCircle 函数,所以Draw类中缺失的应该是这两个算法,于是:第一处为“ virtual void drawLine(double x1,double y1,doublex2,double y2=0
25、; ”第二处为“ virtual void drawCircle(double x,double y,doubler)=0;, DP1 和 DP2中包含了绘制 Line 和 Circle 的具体实现的 Static 方法,因此在 V1Drawing、V2Drawing 类中可以直接调 用它们;(3)为“DP1:draw a circle(x,y,r); ",第四处为“ DP2:drawCircle(x,y,r); ”。 Shape 类派 生出 Rectangle 和 Circle 类,里面都含有 draw 方法,但是具体 draw 方法的实现却不相同, 所以第五处为“virtual
26、void draw()=0; ”,最后Circle的构造函数初始化了后 4个变量,还有继承自shape的变量_dp 未做初始化,因此调 shape构造函数做初始化操作,第六处为“ shape(dp); ”。五、试题五(总题数:1,分数:20.00)5阅读下列说明和C+弋码,将应填入处的字句写在下面。说明以SQL现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。Server和Access两种数据库以及系统中的数据库表Department为例,其类图如下图所示。类图C+代码#include < iostream >using namespace s
27、td;class Department /*代码省略 */;class IDepartmentpublic:=0;=0;class SqlserverDepartment:public:void Insert(Department*department)cout << "Insert a record into Department in SQL Server!n"/其余代码省略Department GetDepartment(int id)/*代码省略*/;class AccessDepartment:public:void Insert(Department
28、*department)cout << "Insert a record into Department in ACCESS!n"/其余代码省略Department GetDepartment(int id)/*代码省略*/;public:=0;class SqlServerFactory:public IFactorypublic:IDepartment* CreateDepartment() return new SqlserverDepartment(); /其余代码省略;class AccessFactOry:public IFactorypublic:
29、IDepartment* CreateDepartment() return new AccessDepartment(); /其余代码省略;(分数:20.00 ) 正确答案:()解析:virtual void Insert(Department*department)virtual Department GetDepartment (int id)public IDepartmentpublic IDepartmentclass Ifactoryvirtual IDepartment*CreateDepartment()解析本题考查抽象工厂设计模式的概念及其应用。抽象工厂设计模式的意图是:提供一个创建一系列相关或相互依赖的对象,而无须指岀它们具体的类。在 如下情况下应当考虑使用抽象工厂模式:当一个系统要独立于它的产品的创建、组合和表示时。当一个系统要由多个产品系列中的一个来配置时。当需强调一系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八中自主招生考试题及答案
- 解析卷公务员考试《常识》同步练习试题(含答案及解析)
- 护理查对制度试题(含答案)
- 贵州企业招聘:2025贵州黔晨综合发展有限公司招聘15人考前自测高频考点模拟试题及完整答案详解1套
- 2025年在线职业技能认证平台投资风险评估分析报告
- 2025年文化娱乐产业产业链重构与协同发展报告
- 2025年婴幼儿配方食品营养配方研究进展与挑战分析报告
- 2025年城市慢行系统建设与城市交通拥堵治理创新策略可行性研究报告
- 2025年教育行业质量评估与认证体系在学校特色教育中的应用报告
- 2025年海洋生态修复政策与海洋生物保护研究报告
- 产教融合育人协同创新模式
- 卷帘门维修合同
- XX区烟草公司面向社会招聘工作人员政审表【模板】
- 工商变更登记代理合同
- 矿山支护工安全培训课件
- 2020输变电工程通用设计35~110kV输电线路站分册
- 软件管理系统产品报价单模板(详细)
- 教学设备安装调试方案投标方案
- 中建350吨履带吊安装、拆除安全专项方案
- 医院诊断证明书word模板
- 汕头市房地产租赁合同
评论
0/150
提交评论