填空题

[说明]
某绘图系统中有两个画矩形的程序DP1和DP2。程序DP1用函数draw a line(x1,y1,x2,y2)画一条直线,程序DP2则用函数drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为Bridge(桥接)模式。图8-9显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理3个对象:Shape对象、Drawing对象,以及DP1或DP2对象。以下是C++语言的实现过程,能够正确编译通过。


[C++程序]
class DP1
public:
static void draw a line(double x1,double y1,double x2,double y2)
… //省略具体实现

;
class DP2
public:
static void drawline(double x1,double x2,double y1,double y2)
//省略具体实现

;
Class Drawing
Public:
virtual void drawLine(double x1, double y1, double x2, double y2)=0;
;
class V1Drawing:public Drawing
public:
void drawLine(double x1,double y1,double x2,double y2)
DP1::draw_a_line(x1,y1,X2,y2);

;
class V2Drawing:public Drawing
public:
void drawLine(double x1, double y1, double x2, double y2)
(1) ;

;
class Shape
Private:
(2) _dp;
Public:
Shape(Drawing *dp);
(3) void draw()=0;
void drawLine(double x1,double y1,double x2,double y2) ;
;
Shape::Shape(Drawing *dp)
_dp=dp;

void Shape::drawLine(double x1,double y1,double x2,double y2)
//画一条直线
(4) ;

class Rectangle:public (5)
private:
double _x1,_y1,_x2, _y2;
public:
Rectangle(Drawing *dp,double x1,double y1,double x2,double y2);
void draw();
;
Rectangle::Rectangle(Drawing *dp,double x1,double y1,double x2,double y2) : (6)

_x1=x1; _y1=y1;_x2=x2;_y2=y2;

void Rectangle::draw()
… //省略具体实现

【参考答案】

DPB::drawline(xA,xB,yA,yB) (B)Drawing
(C) virtual (D)......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

填空题
[说明] 某绘图系统中有两个画矩形的程序DP1和DP2。程序DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,程序DP2则用函数drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为Bridge(桥接)模式。图8-10显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理3个对象:Shape对象、Drawing对象,以及DP1或DP2对象。以下是Java语言实现,能够正确编译通过。 [Java代码] DP1.java文件 public class DP1 static public void draw a line(double x1,double y1,double x2,double y2) ... 省略具体实现 DP2.java文件 public class DP2 static public void drawline(double x1,double y1,double x2,double y2) ... 省略具体实现 Drawing. java文件 abstract public class Drawing (1) public void drawLine(double x1,double y1,double x2,double y2); V1Drawing.java文件 public class V1Drawing extends Drawing public void drawLine(double x1,double y1,double x2,double y2) DP1.draw a line(x1,y1,x2,y2); V2Drawing.java文件 public class V2Drawing extends Drawing public void drawLine(double x1,double y1,double x2,double y2) 画一条直线 (2) ; Shape.java文件 abstract public class Shape( abstract public void draw(); private (3) dp; Shape(Drawing dp) _dp=dp; protected void drawLine(double x1,double y1,double x2, double y2) (4) ; Rectangle.java文件 public class Rectangle (5) private double _x1,_x2,_y1,_ y2; public Rectangle(Drawing dp, double x1,double y1, double x2,double y2) (6) ; _x1=x2; _x2=x2; _y1=y1; _y2=y2; public void draw() … 省略具体实现