[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc

上传人:wealthynice100 文档编号:506736 上传时间:2018-11-29 格式:DOC 页数:31 大小:576KB
下载 相关 举报
[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc_第1页
第1页 / 共31页
[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc_第2页
第2页 / 共31页
[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc_第3页
第3页 / 共31页
[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc_第4页
第4页 / 共31页
[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编1及答案与解析.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编 1及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 (2013年下半年下午试题三 )阅读下列说明和图,回答问题 1至问题 3,将解答填在答题纸的对应栏内。 【说明】 某航空公司会员积分系统 (CFrequentFlyer)的主要功能描述如下。 乘客只要办理该航空公司的会员卡,即可成为普卡会员 (CBasic)。随着飞行里程数的积累,可以从普卡会员升级到银卡会员 (CSilver)或金卡会员(CGold)。非会员 (CNonMember)小 能累积里程数。 每年年末,系统根据会员在本年度累积的里程数对下一年会员

2、等级进行调整。 普卡会员在一年内累积的里程数若满 25000英里但不足 50000英里,则自动升级为银卡会员;若累积的里程数在50000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在50000英里以上,则自动升级为金卡会员。 若一年内没有达到对应级别要求的里程数,则自动降低会员等级。金卡会员一年内累积的里程数若不足 25000英里,则自动降级为普卡会员;若累积的里程数达到 25000英里,但是不足 50000英里,则自动降级为银卡 会员。银卡会员一年内累积的里程数若不足 25000英里,则自动降级为普卡会员。 采用面向对象方法对会员积分系统进行分析与设计,得到如图10 13所

3、示的状态图和图 10 14所示的类图。1 根据说明中的描述,给出图 10 13中 S1 S3处所对应的状态以及 T1 T3处所对应的迁移的名称。 2 根据说明中的描述,给出图 10 14中 C1 C4所对应的类名 (类名使用说明中给出的英文词汇 )。 3 图 10 14所示的类图中使用了哪种设计模式 ?在这种设计模式下,类CFrequentFlyer必须具有的属性是什么 ?C1 C4中的 trave1方法应具有什么功能 ? 4 (2013年下半年下午试题五 )阅读下列说明和 C+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的

4、图形。以绘制直线和圆形为例,对应的绘图程序如表 10 4所示。根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接 (Bridge)模式来实现上述要求,得到如图10 15所示的类图。【 C+代码】Class DP1public: static void draw a line(double x1, double y1, double x2, double y2) *代码省略 * static void draw a circle(double x, double y, double r) *代码省略 * ; class DP2public:

5、 static void drawline(double x1, double x2, double y1, double y2) *代码省略 * static void drawcircle(double x, double y, double r) *代码省略 * , class Drawingpublic: _(1); _(2);class V1Drawing: public Drawing public: void drawLine(double x1, double y1, double x2, double y2) *代码省略 * void drawCircle(double x,

6、 double y, double r) _(3);class V2Drawing: public Drawingpublic: void drawLine(double x1, double y1, double x2, double y2) *代码省略 * void drawCircle(double x,double y, double r) _(4); ; class Shape public: _(5)l Shape(Drawing*dp)dp=dp; void drawLine(double x1, double y1, double x2,double y2) dp- drawL

7、ine(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 Shapeprivate: double_x, _y, _r; public: Circle(Drawing*dp,double x, double y, double r): _(6) _x=x; _y

8、=y;_r=r; void draw()drawCircle(_x, _y, r); ; 5 (2013年下半年下午试题六 )阅读下列说明和 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表 10 5所示。根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避 免出现类爆炸的情况,现采用桥接 (Bridge)模式来实现上述要求,得到如图10 16所示的类图。【 Java代码】 _(1), Drawing _(2); _(3);class DP1 stat

9、ic public void draw_a_line(double x1, double y1, double x2, double y2) *代码省略 * static public void draw_a_circle(double x, double y, double r) *代码省略 ) ;class DP2( static public void drawline(double x1, double x2, double y1, double y2) *代码省略 * static public void drawcircle(double x, double y, double r

10、) *代码省略 * ;class V1Drawing implements Drawing public void drawLine(double x1, double y1, double x2, double y2) *代码省略 * public void drawCircle(double x,double y, double r) _(4); l class V2Drawing implements Drawing public void drawLine(double x1, double y1, double x2, double y2) *代码省略 * public void d

11、rawCircle(double z, double y, double r) _(5); ;abstract class Shape private Drawing dp; _(6); Shape(Drawing dp)_dp=dp; public void drawLine(double x1, double y1, double x2, double y2) dp drawLine(xl, yl, x2,y2); public void drawCircle(double X, double y, double r)一 dp drawCircle(x,y, r); ; class Rec

12、tangle extends Shape private double_x1 _x2 _y1, _y2; public Rectangle(Drawing dp, double x1, double y1, double x2, double y2) *代码省略* public void draw() *代码省略 * ; Class Circle extends Shape private double_x, _y, _r; public Circle(Drawing dp, double x, double y, double r) *代码省略 * public void draw()dra

13、wCi rcle(X, Y, r); ) ; 5 (2013年上半年下午试题三 )阅读下列说明和图,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【说明】 某城市拟开发一个基于 Web的城市黄页,公开发布该城市重要的组织或机构 (以下统称为客户 )的基本信息,方便城市生活。该系统的主要功能描述如下。 (1)搜索信息:任何使用 Internet的网络用户都可以搜索发布在城市黄页中的信息,例如客户的名称、 地址、联系电话等。 (2)认证:客户若想在城市黄页上发布信息,需通过系统的认证。认证成功后,该客户成为系统授权用户。 (3)更新信息:授权用户登录系统后,可以更改自己在城市黄页中的相关信

14、息,例如变更联系电话等。 (4)删除客户:对于拒绝继续在城市黄页上发布信息的客户,由系统管理员删除该客户的相关信息。 系统采用面向对象方法进行开发,在开发过程中认定出如表 10 6所示的类。系统的用例图和类图分别如图 10 17和图 10 18所示。6 根据说明中的描述,给出图 10 17中 A1和 A2处所对应的参与者, UC1和UC2所对应的用例以及 (1)处的关系。 7 根据说明中的描述,给出图 10 18中 C1 C5所对应的类名 (表 1 6中给出的类名 )和 (2) (5)处所对应的多重度。 8 认定类是面向对象分析中非常关键的一个步骤。一般首先从问题域中得到候选类集合,再根据相应

15、的原则从该集合中删除不作为类的,剩余的就是从问题域中认定出来的类。简要说明选择候选类的原则,以及对候选类集合进行删除的原则。 9 (2013年上半年下午试题五 )阅读下列说明和 C+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现要求 实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。 现采用原型模式 (Prototype)来实现上述要求,得到如图 10 19所示的类图。【 C+代码】 #include string Using namespace std; Class Cl

16、oneablePublic: _(1); ; Class WrkExperience: public Cloneable 工作经历 Private: String workDate; String company; Public: Cloneable*Clone() _(2); Obj- workDate=this- workDate; Obj-company=this- company; Return obj; 其余代码省略 ; Class Resume:public Cloneable简历 Private: String name; string sex; string age; WOrk

17、Experience* work; Resume(WorkExperience*work) This-work=_(3); Public: Resume(string name) *实现省略 * Void setPersona1 Info(string sex, string age) *实现省略 * Void setworkExperience(string workDate, string company) *实现省略 * Cloneable*Clone() _(4); Obj- name=this- name; Obj- sex=this- sex; Obj- age=this- age

18、; Return obj; ; Int main() Resume*a=new Resume(张三 ); A- SetPersonalInfo(男 ,29); A- setworkExperience(1998“ 2000, XXX公司 ); Resume*b= _(5); B- setWorkExperience(2001“ 2006, YYY公司 ); Return 0; 10 (2013年上半年下午试题 6)阅读下列说明和 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历

19、。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。 现采用原型模式 (Prototype)来实现上述要求,得到如图 10 20所示的类图。【 Java代码】 Class WorkExperience _(1)Cloneable 工作简历 Private String workDate; Private String company; Public Object Clone() _(2); obj workDate=this workDate; obj company=this company; Return obj; Class Resume_(3) Cloneable 简历 P

20、rivate String name; Private String sex; Private String age; Private WorkExperience work; Publlc ReSume(Strlng name) This name=name; work=new WorkExperience(); Private Resume(WorkExperience work) ThiS work=_(4); Public void setPersona1 Info(String sex, String age) *代码省略 * Public void SetWorkExperienc

21、e(String workDate, String company) *代码省略 * PubliC Object Clone() Resume obj=_(5); 其余代码省略 Return obj; Ciass WorkResume Public Static void main(String args) Resume a=new Resume(张三 ); a SetPersonal Info(男 , 29); a setworkExperience(1998 2000, XXX公司 ); Resume b=_(6); b setworkExperience(2001 2006, YYY公司

22、 ); 10 (2012年下半年下午试题三 )阅读下列说明和图,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【说明】 某城市的各国家公园周边建造了许多供游客租用的小木屋和营地,为此,该城市设置了一个中心售票处和若干个区域售票处。游客若想租用小木屋或营地,必须前往中心售票处进行预订并用现金支付全额费用,所有的预订操作全部由售票处的工作人员手工完成。 现欲开发一信息系统,实现小木屋和营地的预订及管理功能,以取代手工操作。该系统的主要功能描述如下。 (1)管理预订申请。游客可以前往任何一个售票处提出预订申请,系统对来自各个售票处的预订申请进行统一管理。 (2)预订。预订操作包含登记游客预订

23、信息、计算租赁费用、付费等步骤。 (3)支付管理。游客付费时可以选择现金和信用卡付款两种方式。使用信用卡支付可以享受 3的折扣,现金支付没有折扣。 (4)游客取消预订。预订成功之后,游客可以在任何时间取消预订,但需支付赔偿金,剩余部分则退还给游客。赔偿金的计算规则是,在预 订入住时间之前的 48小时内取消,支付租赁费用 10的赔偿金;在预订入住时间之后取消,则支付租赁费用 50的赔偿金。 (5)自动取消预订。如果遇到恶劣天气 (如暴雨、山洪等 ),系统会自动取消所有的预订,发布取消预订消息,全额退款。 (6)信息查询。售票处工作人员查询小木屋和营地的预订情况和使用情况,以判断是否能够批准游客的

24、预订申请。 现采用面向对象方法开发上述系统,得到如表 10 7所示的用例列表和表 10 8所示的类列表,对应的用例图和类图分别如图 10 21和图 10 22所示。11 根据说明中的描述与表 10 7,给出图 10 21中 UC1 UC6处所对应的用例名称。 12 根据说明中的描述与表 10 8,给出图 10 22中 C1 C7处所对应的类名。 13 对于某些需求量非常大的小木屋或营地,说明中功能 (4)的赔偿金计算规则,不足以弥补取消预订所带来的损失,如果要根据预订的时段以及所预订场地的需求量,设计不同层次的赔偿金计算规则,需要对图 10 22进行怎样的修改 ?(请用文字说明 ) 14 (2

25、012年下半年下午试题五 )阅读下列说明和 C+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现欲开 发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以 SQL Server和 Access两种数据库以及系统中的数据库表 Department为例,其类图如图 10 23所示。【 C+代码】 #include iostream using namespace std; class Department *代码省略 * ; class IDepartmentpublic: _(1)=0; _(3)=0; ;class Sq1serverDepar

26、tment: _(3)public: void Insert(Department*department) cout Insert a record into Department in SQL Server! n; 其余代码省略 Department GetDepartment(int id) *代码省略 * ; class AccessDepartment: _(4) public: void Insert(Department*department) cout Insert a record into Department in ACCESS! n; 其余代码省略 Department

27、GetDepartment(int id) *代码省略 * ; _(5)public: _(6)=0;; class Sq1SerVerFactory: public IFactorypublic: IDepartment* CreateDepartment() return new SqlserVerDepartment(); 其余代码省略 ;class AccessFactory: public IFactorypublic: IDepartment* CreateDepartment() return new AccessDepartment(); 其余代码省略 ; 15 (2012年下

28、半年下午试题六 )阅读下列说明和 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以 SQL Server和 Access两种数据库以及系统中的数据库表 Department为例,其类图如图 10 25所示。【 Java代码】import java util *; class Department *代码省略 * interface IDepartment _(1); _(2);class sq1serverDepartment: _(3) public: void Insert(D

29、epartment department) System out println(Insert a record into Department in SQL Server! n); 其余代码省略 public Department GetDepartment(int id) *代码省略 * class AccessDepartment: _(4) public void Insert(Department department) System out println(Insert a record into Department in ACCESS! n); 其余代码省略 public De

30、partment GetDepartment(int id) *代码省略 * ; _(4) _(6); class Sq1ServerFactory implements IFactory public IDepartment CreateDepartment() return new Sq1serVerDepartment(); 其余代码省略 ;class AccessFactory implements IFactory public IDepartment CreateDepartment() return new AccessDepartment(); 其余代码省略 ; 15 (201

31、2年上半年下午试题三 )阅读下列说明和图,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【说明】 某网上购物平台的主要功能如下。 (1)创建订单。顾客 (Customer)在线创建订单 (Order),主要操作是向订单中添加项目、从订单中删除项目。订单中应列出所订购的商品 (Product)及其数量 (quantity)。 (2)提交订单。订单通过网络来提交。在提交订 单时,顾客需要提供其姓名 (name)、收货地址(address)以及付款方式 (form ofpayment)(预付卡、信用卡或者现金 )。为了制订送货计划以及安排送货车辆,系统必须确定订单量 (volume)。除此之

32、外,还必须记录每种商品的名称 (name)、造价 (cost price)、售价 (sale price)以及单件商品的包装体积(cubic volume)。 (3)处理订单。订单处理人员接收来自系统的订单;根据订单内容,安排配货,制订送货计划。在送货计划中不仅要指明发货日期 (delivery date),还要记录每个订单的限时发送要求 (Delivery Time Window)。 (4)派单。订单处理人员将已配好货的订单转交给派送人员。 (5)送货收货。派送人员将货物送到顾客指定的收货地址。当顾客收货时,需要在运货单 (delivery slip)上签收。签收后的运货单最终需交还给订单处

33、理人员。 (6)收货确认。当订单处理人员收到签收过的运货单后,会和顾客进行一次再确认。 现采用面向对象方法开发上述系统,得到如图 10 27所示的用例图和图 10 28所示的类图。16 根据说明中的描述,给出图 10 27中 A1 A3所对应的参与者名称和 U1、 U2处所对应的用例名称。 17 根据说明中的描述,给出图 10 28中 C1 C3所对应的类名以及 (1) (4)处所对应的多重度 (类名使用说明中给出的英文词汇 )。 18 根据说明中的描述,将类 C2和 C3的属性补充完整 (属性名使用说明中给出的英文词汇 )。 19 (2012年上半年下午试题五 )阅读下列说明和 C+代码,将

34、应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖 啡店所供应的咖啡及配料的种类和价格如表 10 9所示。现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 10 29所示的类图。 【 C+代码】 #includeiostream #include string using namespace std; const int ESPRESSO_PRICE=25;const int DRAKROAST_PRICE=20 ;const int MOCHA_PRICE=10;cons

35、t int WHIP_PRICE8;class Beverage 饮料 _(1): string description; public: _(2)() return description; _(3); ; class CondimentDecorator : public Beverage 配料 protected: _(4);class Espresso: public Beverage蒸馏咖啡 public: Espresso () description=Espresso; int cost()return ESPRESSO_PRICE; ;class DarkRoast: publ

36、ic Beverage深度烘焙咖啡public: DarkRoast()description=DardRoast; int cost()return DRAKROAST_PRICE; ; class Mocha : public CondimentDecorator 摩卡public: Mocha(Beverage*beverage)this- beverage=beverage; string getDescription() return beverage- getDescription()+, Mocha; int cost() return MOCHA PRICE+beVerage-

37、 cost(); ;class Whip : public CondimentDecorator 奶泡 public: Whip(Beverage*beverage)this- beverage=beverage; string getDescription() return beverage- getDescription()+, Whip; int cost() ( return WHIP PRICE+beverage- cost(); ;int msin() Beverage*beverage=new DarkRoast(); beVerage=new Mocha(_(5); beVer

38、age=new Whip( _(6); cout beverage- getDescription() ¥ beverage- cost() end1; return 0; 编译运行上述程序,其输出结果为: DarkRoast, Mocha, Whip,¥ 38 20 (2012年上半年下午试题六 )阅读下列说明和 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表 10 10所示。现采用装饰器 (Decorator)模式来实现计算费用的功能

39、,得到如图 10 30所示的类图。 【 Java代码】 import java util *;_(1) class Beverage 饮料 String description=Unknown Beverage; public_(2)()return description; public_(3); abstract class CondimentDecorator extends Beverage 配料 _(4); class Espresso extends Beverage 蒸馏咖啡 private final int ESPRESSO_PRICE=25; public Espresso

40、() description=Espresso; public int cost()return ESPRESSO_PRICE; class DarkRoast extends Beverage 深度烘焙咖啡 private final int DARKROAST_PRICE=20; public DarkRoast()description=DarkRoast; public int COSt() return DARKROAST PRICE; class Mocha extends CondimentDecorator 摩卡 private final int MOCHA_PRICE=10

41、; public Mocha(Beverage beverage) this beverage=beverage; public String getDescription() return beverage getDescription() + , Mocha; public int cost() return MOCHA_PRICE+beverage cost(); class Whip extends condimentDecorator 奶泡 private final int WHIP_PRICE=8; public Whip(Beverage beverage)this bever

42、age=beverage; public String getDescription() return beverage 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( _(5); beVerage=new whip _(6); System out println(b

43、eVerage getDescription()+¥ +beVerage cost(); 编译运行上述程序,其输出结果为: DarkRoast,Mocha, Whip¥ 38 软件水平考试中级软件设计师下午应用技术(面向对象技术)历年真题试卷汇编 1答案与解析 一、必答题(共 4道大题,每道大题 15分) 【知识模块】 面向对象技术 1 【正确答案】 S1:普卡会员 S2:银卡会员 S3:金卡会员 T1:里程数 50000 T2:里程数 =50000 T3:里程数 =50000 【试题解析】 由 “普卡会员在一年 内累积的里程数若满 25000英里但不足 50000英里,则自动升级为银卡会员;

44、若累积的里程数在 50000英里以上,则自动升级为金卡会员。银卡会员在一年内累积的里程数若在 50000英里以上,则自动升级为金卡会员 ”可知, S1为普卡会员, S2为银卡会员, S3为金卡会员。同样根据上述分析可知, T1为 “里程数 50000”, T2为 “里程数 =50000”, T3为 “里程数=50000”。 【知识模块】 面向对象技术 2 【正确答案】 C1: CNonMember C2: CBasic C3: CSilver C4: CGold 【试题解析】 本问题考察类图的层次结构。图中有四个非常明显的继承结构,即C1 C4继承 CLeve1,根据说明可知 C1 C4代表了

45、四类不同的会员模式。 【知识模块】 面向对象技术 3 【正确答案】 策略模式。策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。类 CFrequentFlyer必须具有的属性是封装。 C1 C4中的 travel方法应该具有根据不同飞行里程相互转换的功能。 【试题解析】 策略模式让算法独立于使用它的客户而独立变化。类CFrequentFlyer必须具有的属性是封装。根据说明, C1 C4中的 trave1方法应该具有根据不同飞行里程相互转换的功能。 【知识模块】 面向对象技术 4 【正确答案】 (1)virtual voi

46、d drawLine(double x1, double y1, double x2, double y2) (2)virtual void drawCircle(double x,double y, double r) (3)DP1 draw_a circle(x, y, z) (4)DP2 drawcircle(x, y, z) (5)virtual void draw()(6)Shape(dp) 【试题解析】 本题考查桥接模式的概念及应用。桥接模式将抽象与其实现解耦,使它们都可以独立地变化。也就是说,将一组实现与另一组使用它们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象 (而不是抽象类的派生类,这些派生类被称为具体类 )。 本题中, Drawing是一个虚拟基类,里面包含了希望不同策略实现的算法。派生类 V1Drawing、 V2Drawing都派生自 Drawing,对基类中希望实现的算法都做了具体实现,且它们都含有 drawLine和 drawCircle函数,所以 Drawing类中缺失的应该是这两个算法,于是空 (1)处应填入 virtual void drawLine(double x1,double y1, double x2, double y2,空 (2)处应填入 virtual voi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1