填空题 (一共2题,共2分)

1.

阅读下列说明和Java代码,将应填入
(n)
处的字句写在答题纸的对应栏内。
【说明】
  某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表6-1所示。表6-1

中级软件设计师,模拟考试,2021年软件设计师模拟题7

为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类

中级软件设计师,模拟考试,2021年软件设计师模拟题7

图6-1中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法fly__(6)__和takeOff__(7)__分别表示不同飞机都具有飞行特征和起飞特征类FlyBehavior与TakeOffBehavior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。【Java 代码】 interface FlyBehavior {
  public void fly();
 };
 class SubSonicFly
implements FlyBehavior{
  public void fly(){
System.out.println("亚音速飞行!"); }
 };
 class SuperSonicFly
implements FlyBehavior{
  public void fly(){
System.out.println("超音速飞行!" ); }
 };
 interface TakeOffBehavior {
  public void takeOff();
 };
 class VerticalTakeOff
implements TakeOffBehavior {
  public void takeOff (){
System.out.println("垂直起飞!" ); }
 };
 class LongDistanceTakeOff
implements TakeOffBehavior {
  public void takeOff(){
System.out.println("长距离起飞!"); }
 };
  abstract class AirCraft {
      protected? (1) ?;
      protected? (2) ?;
  public void fly(){? (3)? ; }
  public void takeOff()
{?? (4)?? ; };
 };
 class Helicopter(5)AirCraft{
      public Helicopter (){
      flyBehavior = new? (6)? ;
      takeOffBehavior = new?
(7)? ;
   }
  };
 //其它代码省略

2.

中级软件设计师,模拟考试,2021年软件设计师模拟题7
中级软件设计师,模拟考试,2021年软件设计师模拟题7中级软件设计师,模拟考试,2021年软件设计师模拟题7

问答题 (一共4题,共4分)

3.

阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账,设计如图6-1所示类图。

中级软件设计师,模拟考试,2021年软件设计师模拟题7

【C++代码】

using namespace std;class Book;class Visitor {public: virtual void visit(Book* book)=0; //其它物品visit方法}; class Item {public:virtual void accept(Visitor* visitor)=0; virtual doublegetPrice()=0;};class Book (1){private: double price;public: Book (double price){ //访问本元素 (2); } void accept(Visitor* visitor) { (3); }double getPrice(){ returnprice; }};class Cashier(4){private; double totalForCart;public: //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book->getPrice()getPrice(); } else totalForCart+=book->getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 double getTotal() { return totalForCart; }};class ShoppingCart {private: vector<item*>items;public: double calculatePrice() { Cashier* visitor=new Cashier(); for(int i=0;i <items.size();i++) (6); } double total=visitor->getTotal(); return total; } void add(Item*e) { items.push_back(e); }};

4.

阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。

【说明】

以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图6-1所示。

中级软件设计师,模拟考试,2021年软件设计师模拟题7

【C++代码】

#include?#include?using?namespace?std;class?DrawCircle?{??????//绘制圆形,抽象类? ? ? public: (1);//定义参数为?int?radius,?int?x,?inty? ?virtual~DrawCircle()?{?}};class?RedCircle:public?DrawCircle?{????//绘制红色圆形? ? ? ? public: void?drawCircle(intradius,?int?x,?int?y)?{cout?<<?"Drawing?Circle[red,radius:<<radius;? ? ? ? ? ? ? cout?<<?",x:?"?<<x<<?",y:"<<y<<?"]"?<<?end1;? ?}};class?GreenCircle:public?DrawCircle?{????//绘制绿色圆形? ? ? public:? ?void?drawCircle(int?radius,?int?x,?int?y)?{ cout?<<"Drawing?Circle[green,radius:?"<<?radius;? ? ? ? ? ? ? ? ? ? ? ?cout?<<",x:?"?<<x<<?",y:?"<<y<<?"]"?<<?end1;? }};class?Shape?{????//形状,抽象类? ? ? protected:? (2);? ? ? public:? ?Shape(DrawCircle*drawCircle)?{? this?->?drawCircle?=?drawCircle;? }? ?virtual~shape()?{?}? public:? ?virtual?void?draw()?=?0;};class?Circle:public?Shape?{????//圆形? ? private:? ? ?int?x,y,radius;? ? public:? Circle(int?x,inty,int?radius,DrawCircle?*drawCircle)? (3)? {? this->x?=?x;? ?this->y?=?y;? ? this->radius?=?radius; }? ? ? public:? void?draw(){? drawCircle?-> (4); }};int?main(){Shape?*redCirclenew?Circle(100,100,10,????(5)????);//绘制红色圆形? Shape?*greenCircle=new?Circle(100,100,10, (6)??);//绘制绿色圆形redCircle >draw();? ?greenCircle?->draw();? ?return?0;}

5.

某客户信息管理系统中保存着两类客户的信息:

(1)个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和E-mail)

(2)集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、E-mail、办公电话以及职位

该系统除了可以保存客户信息之外,还具有以下功能:

(1)向系统中添加客户(addCustomer)

(2)根据给定的客户标识,在系统中查找该客户(getCustomer)

(3)根据给定的客户标识,从系统中删除该客户(removeCustomer)

(4)创建新的联系人(addContact)

(5)在系统中查找指定的联系人(getContact)

(6)从系统中删除指定的联系人(removeContact)

该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表2-5所示的类

表2-5 得到的各种类

中级软件设计师,模拟考试,2021年软件设计师模拟题7

类名说明

CustomerInformationSystem客户信息管理系统

IndividualCustomer个人客户

InstitutionalCustomer集团客户

Contact联系人

描述该客户信息管理系统的UML类图如图2-26所示

中级软件设计师,模拟考试,2021年软件设计师模拟题7

图2-26 客户信息管理系统的UML类图

【问题1】

请使用说明中的术语,给出图2-26中类Customer和类Person的属性

【问题2】

识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图中的(1)~(6)

【问题3】

根据说明中的叙述,抽象出如表2-6所示的方法,请指出图2-26中的类CustomerInformationSystem和InstitutionalCustomer应分别具有其中的哪些方法

表2-6 抽象出的方法

中级软件设计师,模拟考试,2021年软件设计师模拟题7

6.

某营销企业拟开发一个销售管理系统,其主要动能描述如下。

(1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件

(2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门

(3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理

(4)根据保留的客户订单进行销售统计,打印统计报表给经理

现采用结构化方法对销售管理系统进行分析与设计,获得如图1-7所示的顶层数据流图和如图1-8所示的0层数据流图。

中级软件设计师,模拟考试,2021年软件设计师模拟题7

【问题1】

使用说明中的词语,给出图1-7所示的外部实体E1-E4的名称

【问题2】

使用说明中的词语,给出图1-8所示的数据存储D1-D3的名称

【问题3】

0层数据流图1-8中缺少了4条数据流,根据说明及顶层数据流图1-7所提供的信息,分别指出这4条数据流的起点和终点

补充的数据流

中级软件设计师,模拟考试,2021年软件设计师模拟题7