题目详情

欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。以绘制直线和圆形为例,对应的绘图程序如表6-1所示。

表6-1不同的绘图程序

中级软件设计师,历年真题,2013年下半年(下午)《软件设计师》真题

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

中级软件设计师,历年真题,2013年下半年(下午)《软件设计师》真题

图6-1类图

【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 y1,double x2,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);}

}

class V2Drawing implements Drawing{

public void drawLine(double x1,double y1,double x2,double y2){/*代码省略*/}

public void drawCircle(double x,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(x1,y1,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(  ){drawCircle(_x,_y,_r);}

}

正确答案及解析

正确答案
解析

(1)public interface或interface

(2)public void drawLine(double x1,double y1,double x2,double y2)或void drawLine(double x1,double y1,double x2,double y2)

(3)public void drawCircle(double x,double y,double r)或void drawCircle(double x,double y,double r)

(4)DP1.draw_a_circle(x,y,r)

(5)DP2.drawcircle(x,y,r)

(6)abstract public void draw()

本题考查Java面向对象程序设计。这类题型主要涉及两个方面的考查内容:Java语法与设计模式。所谓语法考查是要求考生清楚接口、抽象类、抽象方法等的定义,相关意思能用正确方式表达出来。而设计模式层次的考查主要是模式间关联的建立。

在本题中,(1)~(3)都是典型的语法问题,由于Drawing在后面被实现(implements)了,所以他是一个接口,帮(1)为:public interface。继续通过这条线索分析可知,Drawing应有drawLine和drawCircle两个方法的定义。故(2)(3)分别为:public void drawLine(double x1,double y1,double x2,double y2)和public void drawCircle(double x,double y,double r)。

接下来的第(4)和(5)是同样类型的空,都需要完成函数的实现部分,此处的实现,一般不要求考生真正实现功能,而是通过别的函数完成该职能。从对应的类图可以了解到V1Drawing与DP1存在依赖关系,而DP1中有draw_a_circle()的函数已完成了画圆的操作,所以在此只需要调用这个方法即可。所以(4)和(5)分别为:DP1.draw_a_circle(x,y,r)和DP2.drawcircle(x,y,r)。最后的(6),可以通过分析类图得知,因为类图中标明Shape类中有:draw()、drawLine()和drawCircle()三个函数,而在Shape类中缺draw(),所以需要补上该函数的定义,即abstract public void draw()。

中级软件设计师,章节练习,中级软件设计师案例分析

包含此试题的试卷

你可能感兴趣的试题

单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.P(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S1)P(S2)和V(S3)
  • B.P(S1)V(S2)和V(S3)
  • C.V(S1)V(S2)和V(S3)
  • D.P(S1)P(S2)和V(S3)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S4)和V(S4)V(S5)
  • B.V(S5)和P(S4)P(S5)
  • C.V(S3)和V(S4)V(S5)
  • D.P(S3)和P(S4)V(P5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S3)和V(S4)V(S5)
  • B.V(S3)和P(S4)P(S5)
  • C.P(S3)和P(S4)P(S5)
  • D.V(S3)和V(S4)V(S5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.V(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案

相关题库更多 +