(2013年下半年下午试题六)阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表10.5所示。 根据绘图软

admin2018-07-27  45

问题 (2013年下半年下午试题六)阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表10.5所示。

    根据绘图软件的扩展性要求,该绘图软件将不断扩充新的图形和新的绘图程序。为了避免出现类爆炸的情况,现采用桥接(Bridge)模式来实现上述要求,得到如图10.16所示的类图。

【Java代码】
  ______(1),Drawing{
  ______(2);
______(3);
}
class DP1{
    static 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){/*代码省略*/}
};
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 drawCircle(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 Rectangle 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(){drawCi rcle(X,Y,r);  )
  };

选项

答案(1)abstract class (2)public abstract void drawLine(double x1,double y1,double x2,double y2) (3)public abstract void drawCircle(double x,double y,double r) (4)DP1.draw_a_circle(x,y,z) (5)DP2.drawcircle(x,y,z) (6)public abstract void draw()

解析 本题考查桥接模式的概念及应用。桥接模式将抽象与其实现解耦,使它们都可以独立地变化。也就是说:将一组实现与另一组使用它们的对象分离。这里的实现指的是抽象类及其派生类用来实现自己的对象(而不是抽象类的派生类,这些派生类被称为具体类)。
    Java语言中声明抽象函数用abstract,且每个函数都需要声明访问类型。对照试题2的代码可以看出,空(1)处应填入abstract class。Drawing是一个虚拟基类,里面包含了希望不同策略实现的算法。派生类V1Drawing、V2Drawing都派生自Drawing,对基类中希望实现的算法都作了具体实现,且它们都含有drawLine和drawCircle函数,所以Drawing类中缺失的应该是这两个算法,于是空(2)处应填入public abstract void drawLine(double x1,double y1,double x2,double y2),空(3)处应填入public abstract void drawCircle(double x,doubley,double r)。DP1和DP2中包含了绘制Line和Circle的具体实现的static方法,因此在
V1Drawing、V2Drawing类中可以直接进行调用,空(4)处应填入DP1.draw_a_circle(x,y,z),空(5)处应填入DP2.drawcircle(x,y,z)。Shape类派生出Rectangle和Circle类,里面都含有draw方法,但是具体draw方法的实现却不相同,所以空(6)处应填入public abstract void draw()。
转载请注明原文地址:https://kaotiyun.com/show/1zxZ777K
0

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