


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件设计师-30(总分:100.00,做题时间:90分钟)、试题一(总题数:1,分数:20.00)1.阅读下列说明和Java代码,将应填入的字句写在下面。说明现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经 历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。现采用原型模式(Prototype)来实现上述要求,得到如下图所示的类图。类图Java代码Class workExperienceCloneable / 工作简历Private String workDate;Private String company;Public Object
2、 Clone() obj.workDate=this.workDate;Opany-pany;Return obj;Class ResumeCloneable / 简历Private String name;Private String sex;Private String age;Private WorkExperience work;Public Resume(String name)T=name;work=new WorkExperience。;Private Resume(WorkExperience work)This.woek=;Public void SetPer
3、sonallnfo(String sex,String age) /*代码省略 */Public void SetWorkExperience(String workDate,String company)/*代码省略 */ Public Object Clone()Resume obj=;/其余代码省略Return obj;Class WorkResumePublic Static void main(String args)Resume a=new Resume ("张三");a.SetPersonallnfo("男","29")
4、;a.setworkExperience("1998 2000","XXX 公司");Resume b=;b.setworkExperience("2001 2006","YYY 公司"); (分数:20.00 ) 正确答案:()解析:implements WorkExperience obj=new WorkExperience()implements (WorkExperence)work.Clone()new Resume(this.work) a.Clone() 解析本题考查原型模式的概念及应用,原型模型是
5、一种对象创建模型,用原型实体指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模型允许一个对象再创 建另一个可订制的对象,无需知道任何创建的细节。所有的Java类都继承自,而object类提供一个Clone()方法,可以将一个Java对象复 制一份。因此在Java中可以直接使用 Object提供的Clone()方法来实现对象的克隆。能够实现克隆的java 类必须实现一个标识接口 Cloneable,表示这个java类支持复制。题中 WorkExperience 类和Resume类需要实现 Cloneable 接口,故第一个空和第三个空为implements,WorkExperience
6、中需要实现Clone方法,并将自身复制一份,由下面的代码可知第二个空为WorkExperienceobj=newWorkExperience() 。Resume类中的私有构造方法实现 WorkExpefience的深复制,故第四处中为 (Work Experence)work.Clone() ,而Resume类中Clone方法实现自身的复制,故第五处中为“newResume(this.work) ”。在main中实现Resume b对a的复制,故第六处中为“ a.Clone() ”。二、试题二(总题数:1,分数:20.00)2.阅读以下说明和Java代码,将应填入的字句写在下面。说明欲开发一个
7、绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程 序如下表所示。不同的绘图程序DP1DP2绘制直线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)模式来实现上述要求,得到如下图所示的类图。某绘图软件类图Java代码Drawi ngclassDP1static public void draw_aline(double x1,d
8、ouble y1,double x2,double y2)/*代码省略*/static public void draw_a_circle(double x,double y,double r)/*代码省略 */;classDP2(代码省略 */代码省略 */代码省略 */static public void drawline(double x1,double x2,double y1,double y2) /* 代码省略 */static public void drawcircle(double x,double y,double r)/*;class V1Drawing implemen
9、ts Drawingpublic void drawLine(double x1,double y1,double x2,double y2)/* public void drawCircle(double x,double y,double r););class V2Drawing implements DrawingDublic void drawLine(double x1,double y1,double x2,double y2) /*public void drawCircle(double x,double y,double r) ;abstract class Shape( p
10、rivate Drawing_dp;Shape(Drawing dp)_dp=dp;public void drawLine(double x1,double y1,double x2,double y2) _dp.drawLine(x1,y1,x2,y2);public void drawCircle(double x,double y,doubler)dp.drawCircle(x,y,r);class Rectangle extends Shapeprivate double_x1,_x2,_y1,_y2;public Rectangle(Drawing dp,double x1,dou
11、ble y1,double x2,double y2)/* 代码省略 */public void draw()/* 代码省略 */ ;class Circle extends Shapeprivate double_x,_y,_r;public Circle(Drawing dp,double x,double y,double r) /* 代码省略 */) public void draw()drawCircle(_x,_y,_r); ;(分数: 20.00 ) 正确答案: ()解析: interface;void drawLine(double x1,double y1,double x2
12、,double y2);void drawCircle(double x,double y,double r);DP1.draw_a circle(x,y,r);DP2.drawCircle(x,y,r);abstract public void draw(); 解析 本题考查 Bridge 桥接模式的概念及应用,将抽象与其实现解耦, 使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。 Java 语言中声明抽 象函数时可利用 abstract ,且每个函数都需要声明访问类型。对照试题五的代码我们可以看出:第一个空 为 interface ,这里的实现指的是抽象类及其派
13、生类用来实现自己的对象 ( 而不是抽象类的派生类,这些派 生类被称为具体类 ) , Drawing 是一个虚拟基类,里面包含了希望利用不同策略实现的算法,派生类 V1Drawing ,V2Drawing 都派生自 Drawing ,对基类中希望实现的算法都作了具体实现,且它们都含有 drawLine 和 drawCircle 函数,所以 Draw 类中缺失的应该是这两个算法,于是第二处为“voiddrawLine(double x1,doubley1,doublex2,double y2); ”,第三处为“voiddrawCircle(doublex,doubley,double r);”,
14、DPI和 DP2中包含了绘制 Line 和 Circle 的具体实现Static的方法,因此在 VIDrawing、V2Drawing类中可以直接调用它们,第四处为“DP1.draw_a_circle(x,y,r) 第五处 DP2.drawCircle(x,y,r); ”,Shape类派生出 Rectangle 和 Circle 类, 里面都含有draw方法,但是具体draw方法的实现却不相同,所以第六处为“ abstractpublicvoiddraw”。三、试题三(总题数:1,分数:20.00)3. 阅读下列说明Java代码,将应填入 处的字句写在下面。说明现欲开发一个软件系统,要求能够同
15、时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQLServer和Access两种数据库以及系统中的数据库表Department为例,其类图如图1所示。图1类图Java代码class Department/*代码省略 */interface IDepartmentclass sqlserVerDepartment:public:void Insert(Department departments/其余代码省略public Department GetDepartment(int id)/*代码省略*/class AccessDepartment:public void Insert
16、(Department departments/其余代码省略public Department GetDepartment(int id)/*代码省略*/;class SqlServerFactory implements IFactorypublic IDepartment CreateDepartment()return new SqlserverDepartment();/其余代码省略;class AccessFactory implements IFactorypublic IDepartment CreateDepartment()return new AccessDepartmen
17、t();/其余代码省略;(分数:20.00 )正确答案:()解析:void Insert(Department department)Department GetDepartment(int id)implements IDepartmentimplements Departmentinterface IFactoryIDepartment CreateDepartment() 解析本题考查抽象工厂设计模式的概念及其应用。其类图如图2所示。图2抽象工厂设计模式类图抽象工厂设计模式的意图是:提供一个创建一系列相关或相互依赖的对象,而无须指岀它们具体的类。在如下情况下应当考虑使用抽象工厂模式:当一
18、个系统要独立于它的产品的创建、组合和表示时。当一个系统要由多个产品系列中的一个来配置时。当需强调一系列相关的产品对象的设计以便进行联合使用时。想提供一组对象而不显示它们的实现过程,只显示它们的接口时。抽象工厂设计模式的类图如下所示,其中:AbstractFactoryN抽象工厂,声明抽象产品的方法。 ConcreteFactory 为具体工厂,执行生成抽象产品的方法,生成一个具体的产品。Abstractproduct为抽象产品,为一种产品声明接口。 Product为具体产品,定义具体工厂生成的具体产品的对象,实现产品接口。图 1 中的 IFactory 对应类图中的 AbstractFacto
19、ry , Sqlserverfactory 和 Accessfactory 对应类图中的 ConcreteFactory ,SqlserverDepartment 和 AccessDepartment 对应类图中的 Product ,而 IDepartment 对 应类图中的 AbstractProduct 。第一空和第二空考查接口IDepartment中方法的定义。由其子类SqlserverDepartment 和AccessDepartment中方法的定义,可知第一空处应填入void Insert(Department department),第二空处应填入DepartmentGetDep
20、artment(int id) 。第三空和第四空考查接口IDepartment的实现。接口的实现是在一个类的声明中使用关键字“implements ”来表示该类使用某个已经定义的接口,然后即可在该类体中使用接口中定义的常量,而且必须实现接口中 定义的所有方法。因此,第三空和第四空都应填入implements IDepartment 。由于所给程序中缺少接口IFactory 的定义,因此第五空应为定义接口IFactory,应填入interfaceIFactory。由于类 Sqlserverfactory 和Accessfactory中必须实现接口 Ifactory中定义的所有方法,观察这两个类中
21、的方法可知,第六空应填入 IDepartment CreateDepartment() 。四、试题四(总题数:1,分数:20.00)4. 阅读下列说明和Java代码,将应填入的字句写在下面。说明某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。咖啡价格/杯(¥)配料价格/杯(¥)蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)81现采用装饰器(Decorator)模式来实现计算费用的功能,得到如下图所示的类图Java代码cl
22、ass Beverage饮料String description="Unknown Beverage"public()return description;public;abstract class condimentDecorator extends Beverage /酉己料class Espresso extends Beverage蒸馏咖啡private final int ESPRESSO PRICE=25;publiC Espresso()description="Espresso"public int cost()return ESPRES
23、SO PRICE;class DarkRoast extends Beverage(深度烘焙咖啡private finalint DARKROAST PRICE=20;public DarkRoast()description="DarkRoast"public int cost()rcturn DARKROAST PRICE;class Mocha extends CondimentDecorator 摩卡 private final int MOCHA PRICE=10;public Mocha(Beverage beverage)this.beverage=bever
24、age;public String getDescription() return beverage.getDeScriptionO+",Mocha"public int cost()return MOCHA_PRICE+beverage.cost();class Whip extends CondimentDecorator奶泡private finalint WHIP PRICE=8;public Whip(Beverage beverage)this.beverage=beverage; public String getDescription() return be
25、verage.getDescription()+",Whip"public int cost()return WHIP_PRICE+beverage.cost();public class Coffee public static void main(String args)Beverage beverage=new DarkRoast();beverage=new Mocha();beverage=new Whip ();¥ "+beverage.cost();编译运行上述程序,其输岀结果为:DarkRoast , Mocha, Whip¥
26、38(分数:20.00 ) 正确答案:()解析:abstract String getDescription abstractirt cost()Beverage beverage beverage beverage 解析装饰器模式描述了如何动态地为一个对象添加职责。该模 式采用递归方式组合对象,从而允许添加任意多的对象职责。在下列情况下可以使用装饰器模式:(1) 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。(2) 处理那些可以撤销的职责。(3) 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长
27、。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。装饰器模式的结构如图2所示。其中:图2抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这些对象动态地添加职责。具体组件角色(ConcreteComponent):被装饰者,定义一个将要被装饰增加功能的类。可以给这个类的对象添加一些职责。抽象装饰器(Decorator):维持一个指向构件 Component对象的实例,并定义一个与抽象组件角色Component 接口一致的接口。具体装饰器角色(ConcreteDecorator):向组件添加职责。图1中的Beverage对应的就是上图中的抽象
28、类Component, Espresso和DarkRoast对应的是ConcreteComponent,CondimentDecorator 对应抽象装饰器 Decorator ,Mocha和 Whip 扮演的是类 CondimentDecorator 的具体装饰器角色 ConcreteDecorator 。由于类Beverage为其子类提供了统一的操作接口,所以将其定义为抽象类。通过可以在类名前加 Wabstract关键字来定义抽象类,因此第一空应填入abstract。第二和三空考查构造函数的定义。从第二空构造函数体中返回值的类型及后续的子类继承程序可知,第二处应填入 String getD
29、escription ;从 public int cost()return ESPRESSO_PRiCE; 可以看出,cost() 函数的返回值为常量,因此第三处应填入abstractint cost() 。第四处考查对 CondimentDecorator 的定义,在该类中声明一类成员变量,并在this.beverage=beverage和 return beverage.getDescription0+",Mocha"加I以使用。因此第四空应填入Beverage beverage;。第五处和第六处考查实例化类模板的方法。类模板必须在实例化后才能使用。实例化类模板时,要给
30、岀类 型实参。从类图可知,第五处和第六处均应填入beverage。五、试题五(总题数:1,分数:20.00)5. 阅读下列说明和Java代码,将应填入的字句写在下面。说明某大型商场内安装了多个简易的纸巾售卖机,自动售出2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态如图1所示。图1纸巾售卖机状态图采用状态(State)模式来实现该纸巾售卖机,得到如图2所示的类图。其中类 退币、出纸巾等方法接口。类SoldState、SoldOutState、NoQuarterState图2类图Java代码Import java.util.*interface Statepublic void inse
31、rtQuarter(); / public void ejectQuarter(); / public void turnCrank(); / public void dispense(); / Class TiSsueMachine投币退币按下、岀纸巾”按钮出纸巾State为抽象类,定义了投币、和HasQuanerState分别对应图1中纸巾售卖机的4中状态:售出纸巾、纸巾售完、没有投币、有2元钱。SoldOutState,noQuarterState,hasQuarterState,SoldState,State; State=soldOutState;int count=0; / 纸巾数
32、public TissueMachine(int number)/*实现代码省略 */) public State getHasQuarterState() return hasQuarterState; public State getNoQuarterState() return noQuarterState; public State getSoldState() return soldState;public State getSoldOutState() return soldOutState; int getCount return count;/其余代码省略 ;Class NoQ
33、uarterState implement State TissueMachine tissueMachine;public void insertQuarter() tissureMachine.SetState();/构造方法以及其余代码省略 Class HasQuarterState implement State TissueMachine tissueMachine;public void ejectQuarter() tissureMachine.setState();/构造方法以及其余代码省略Class SoldState implement StateTissueMachime tissueMachine;public void dispense() if(tissueMachine.getCount()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年轨道工程橡胶制品项目建议书
- 汉语言文学文学史知识梳理试题及答案
- 驾驶员c证试题及答案
- 个人与企业劳务合同样本
- 临河房屋买卖合同样本
- 职业教育体系建设与实施路径探索
- 数学会考测试题及答案
- 上海杨浦绿植养护合同标准文本
- 汉语言的哲学观念与表现试题及答案
- 数字化转型下的教研创新与实施路径
- 2023年宁波房地产市场年度报告
- 员工身心健康情况排查表
- 2022版煤矿安全规程解读
- 模拟小法庭剧本-校园欺凌
- 危险化学品经营企业安全评价细则
- 哈利波特与死亡圣器下双语电影台词
- 10以内数字的分解和组成
- 课堂教学技能讲座课件汇编
- 复变函数与积分变换-西北工业大学中国大学mooc课后章节答案期末考试题库2023年
- 湖北2022年中国邮政储蓄银行湖北省分行社会招聘考试参考题库含答案详解
- 粮食流通管理条例考核试题及答案
评论
0/150
提交评论