(2012年下半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种

admin2018-07-27  23

问题 (2012年下半年下午试题五)阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图10.23所示。

【C++代码】
#include<iostream>
using namespace std;
class Department{/*代码省略*/};
class  IDepartment{
public:
   ___(1)=0;
    ___(3)=0;
};
class  Sq1serverDepartment: ___(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  GetDepartment(int  id){
    /*代码省略*/
    }
};
  ___(5){
public:
    ___(6)=0;
};
class  Sq1SerVerFactory:public  IFactory{
public:
    IDepartment*  CreateDepartment(){  return new SqlserVerDepartment(); }
    //其余代码省略
};
class AccessFactory:public IFactory{
public:
    IDepartment*  CreateDepartment(){  return new AccessDepartment();  }
    //其余代码省略
};

选项

答案(1)virtual void Insert(Department*department) (2)virtual Department GetDepartment(int id) (3)public IDepartment (4)public IDepartment (5)class IFactory (6)virtual IDepartment*CreateDepartment()

解析 本题考查抽象工厂设计模式的概念及其应用。
  抽象工厂设计模式的意图是:提供一个创建一系列相关或相互依赖的对象,而无须指出它们具体的类。在如下情况下应当考虑使用抽象工厂模式。
     当一个系统要独立于它的产品的创建、组合和表示时。
     当一个系统要由多个产品系列中的一个来配置时。
     当需要强调一系列相关的产品对象的设计以便进行联合使用时。
     当想提供一组对象而不显示它们的实现过程,只显示它们的接口时。
    抽象工厂设计模式的类图如图10.24所示,其中:

    Abstractory为抽象工厂,声明抽象产品的方法;
    ConcreteFactory为具体工厂,执行生成抽象产品的方法,生成一个具体的产品;
    ProductA和ProductB为抽象产品,为一种产品声明接口;
    ProductA1/A2/B1/B2为具体产品,定义具体工厂生成的具体产品的对象,实现产
    品接口。
    图10.23中的IFactory对应图10.24中的Abstractory,Sq1serverFactory和AccessFactory对应图10.24中的ConcreteFactory,SqlserverDepartment和AccessDepartment对应图10.24中的ProductA1/A2/B1/B2,而IDepartment对应图10.24中的ProductA和ProductB。
    由于类IDepartment的作用是为其子类提供接口,所以将其定义为抽象类。在C++中,抽象类中至少包含一个纯虚函数的类,而纯虚函数是没有函数体的函数,其作用是为其子类提供统一的接151。若要使用纯虚函数,必须在子类中进行重置。空(1)处和空(2)处考查的是如何定义抽象类IDepartment。从IDepartment的子类的方法中可以确定空(1)处应填入virtualvoid InseIrt(Department*department),空(2)处应填入virtual Department GetDepartment(int id)。
    空(3)处和空(4)处考查继承的概念和语法。由于Sq1serverDepartment和AccessDepartment均继承IDepartment,因此,空(3)处和空(4)处都应填入public IDepartment。
    由于所给程序中缺少有关抽象类IFactory的定义,因此空(5)处应为定义类IFactory,应填入class IFactory。抽象类IFactory中至少需包含一个纯虚函数的类,由其子类Sq1serverFactory和AccessFactory中方法的定义可知,空(6)处应填入virtual IDepartment*CreateDepartment()。
转载请注明原文地址:https://kaotiyun.com/show/ozxZ777K
0

相关试题推荐
最新回复(0)