阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。【说明】欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表16—2所示。该绘图软件的扩展性要求,将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图16—2所示的类图。
【正确答案】正确答案:(1)virtual void drawLine(double xl,double y1,double x2,double y2); (2)virtual void drawCircle(double X,double Y,double r); (3)DPI.draw-a-ircle(x,y,r);(4)DP2.drawCircle(x,y,r); (5)virtual void draw();(6)Shape(dp)。
【答案解析】解析:本题考查Bridge桥接模式的概念及应用,将抽象与其实现解耦,使它们都可以独立地变化。大致意思是说:将一组实现与另一组使用他们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)Drawing是一个虚拟基类,里面包含了希望不同策略实现的算法,派生类V1Drawing,V2Drawing都派生自Drawing,对基类中的希望实现的算法都作了具体实现,且它们都含有drawLine和drawCircle函数,所以Draw类中缺失的应该是这两个算法,于是 (1)virtual void drawLine(double x1,double y1,double x2,double y2); (2)virtual void drawCircle(double x,double y,double r);DPI和DP2中包含了绘制Line和Circle的具体实现的Static方法,因此在V1Drawing,V2Drawing类中可以直接进行调用它们。 (3)DPL draw—a—circle(x,y,r) (4)DP2.drawCircle(x,y,r);Shape类派生出Rectangle和Circle类,里面都含有draw方法,但是具体draw方法的实现却不相同,所以(5)virtual void draw(),最后Circle的构造函数初始化了后4个变量,还有继承自shape的变量一dp未做初始化,因此调用shape~构造函数做初始化(6)shape(dp)。