某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表16—4所示。 为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图16一12所示。 图16—12中,Ai

admin2014-11-13  37

问题 某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表16—4所示。

为支持将来模拟更多种类的飞机,采用策略设计模式(Strategy)设计的类图如图16一12所示。

图16—12中,AirCraft为抽象类,描述了抽象的飞机,而类Helicopter、AirPlane、Fighter和Harrier分别描述具体的飞机种类,方法ny()和takeOff()分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与TakeOffiehaVior为抽象类,分别用于表示抽象的飞行为与起飞行为;类SubSonicFly与SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类VerticalTakeOff与LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。
    【C++代码】
    #include
    USing namespace std;
    ClasS FlyBehaVior  {
    public:virtual void fly()=0;
    };
    class  SubSonicFly:public FlyBehavior(
    public:void fly()(cout<<“亚音速飞行!”<    };
    class  SuperSonicFly:publ ic  FlyBehavior(
    public:void fly()(cout<<”超音速飞行!”<    );
    C las S TakeOf fBehavior(
    publiC:virtual void takeOff()=0;
    };
    ClasS VerticalTakeOff:publiC TakeOffBehavior(
    public:void takeOff()(cout<<“垂直起飞!”<    };
    ClasS LongDistanceTakeOff:public TakeOffBehavior(
    publIC:void takeOff(){cout<<”长距离起飞!-t<    };
    C1ass AirCraft(
    protected:
    (1)    ;
    (2)    ;
    public:
  void fly()((3);)
  void takeOff()((4););
    };
    clasS Helico。]ter:public AirCraft{
    public:
    Helicopter()(
    flyBehavior=new(5);
    takeOffBehavior=new(6):
    }
  (72){
    if(!flyBehavior)  delete  flyBehaVior;
    if(!takeOf fBehavior)delete  takeOf fBehavior;
    }
    };
    //
    其他代码省略

选项

答案(1)FlyBehavior*flyBehavior。 (2)TakeOffBehavior*takeOffBehavior (3)flyBehavior一>fly() (4)takeOffBehavior一>takeoff()_____ (5)SubSonicFly{} (6)VerticalTakeOff() (7)~Helicopter() 注:空(1)与空(2)参考答案可互换

解析 本题考查了设计模式中的策略设计模式。
    从本题的叙述中可以看出,存在4种不同的飞机类型,但每种飞机类型的起飞特征和飞行特征并不完全相同,这就使得我们很难采用比较直接的方法来实现重用。例如,定义一个抽象的飞机类,实现飞机的起飞特性,然后4种飞机直接重用该特征。但是,我们可以观察到,尽管飞机的起飞特征和飞行特征有所不同,有一点可以肯定的是,每一种飞机都具备了飞行特征和起飞特征。因此,可以抽象出一个飞机类,其中含有飞行特征与起飞特征,但关于两个特征的实现要单独抽取出来,所以义形成了FlyBehavior类和TakeOffBehavior类分别表示抽象的飞行和起飞特征,而这两个类的子类则分别实现不同的起飞和飞行特征,因此,在创建一个具体的飞机时,给其赋予不同的起飞特征和飞行特征即可。
    本题中的空(1)和(2)应该填写成员变量,根据类图可以得知,此处应该表示的是飞行和起飞特征变量,在C++中可以采用指针来表示。空(3)和空(4)处需要实现飞行与起飞特征,但AirCraft是抽象的类,所以把实现代理给指针变量。Helicopter类需要指定由父类继承而来的成员变量的初始值,因为Helicopter的特征是垂直起飞和亚音速飞行,因此生成这两个特征的对象,分别赋值给nyBehavior和takeOffBehavior变量。
转载请注明原文地址:https://kaotiyun.com/show/TpDZ777K
0

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