问题 问答题

【说明】 某绘图系统定义了一个抽象类Ishape,现有3个类Cpoint,CLine和Ccircle,它们都具有IShape界面。相应的类图关系如图5-11所示。

已知某第三方库已经提供了XCircle类,且完全满足CCircle图元显示时所需的功能。【Visual Basic代码6-1】是抽象类IShape类模块内容。【Visual Basic代码6-2】实现了类CCircle的IShape界面,并使用了XCircle提供的显示功能。 XCircle提供的显示功能方法接口为displayIt。 【Visual Basic代码6-1】 Publie Color As Long Sub draw()’方法体不包括可执行语句 End Sub Sub move(stepx As Single, stepy As Single)’方法体不包括可执行语句 End Sub 【Visual Basic代码6-2】 (1) Private color As Long … ’其他定义省略 Private ridged As (2) Private Sub Class_Initialize() Set bridged= (3) End Sub Private Property (4) ()As Long IShape_Color=color End Property Private Property (5) (ByVal newColor As Long) Color=newColor End Property Private Sub IShape_draw() 使用XCircle提供的显示功能 (6) End Sub Private Sub IShape_move(stepx As Single, stepy As Single) … ’省略描述 End Sub

答案

参考答案:

解析:(1)Implements IShape
(2)XCircle
(3)New XCircle
(4)Get IShape_Color
(5)Let IShape_Color
(6)bridged. displayIt
[要点解析] 这是一道要求考生掌握Visual Basic中面向对象程序设计的试题。本试题的解答思路如下。
在面向对象的程序设计中,类是进行数据封装和数据隐藏的工具。在Visual Basic中与类有关的知识点如表5-17所示。
表5-17 Visual Basic中与类有关的知识点

知 识 点说  明
(1)声明一个对象变量与声明普通变量的格式基本相同。其格式如下:
Dim|Redim|Static|Private|public变量名As类名
(2)为对象变量赋值用Set语句可以把一个对象赋给一个对象变量。其格式是:
Set变量=对象
(3)对象变量的释放每个对象都使用内存和系统资源,当不再使用这些对象时,应将这些资源及时释放。其格式如下:
Set 对象变量名=Nothing
(4)向类中添加属性可以向类中添加公共变量(Public)来定义类的属性。如果向类中添加私有变量(Private),则该变量仅可被该类中的代码所访问,而对外相当于是隐藏的,即面向对象程序设计中的封装原则
(5)向类中添加方法属性是关于某个对象的数据,而方法是该对象要求去执行的动作。类的方法就是类中的Sub过程和Function过程。对于声明成Public的方法,可以被外部数据访问;而对于声明成Private的方法,则只能被该对象内部的数据所访问。这不仅是封装的一部分,更重要的是,当变更了内部方法时,只要定义成Public:部分的方法不变,则不影响外部程序代码对该对象的访问,即将对象的实现细节隐藏在接口之后
(6)继承面向对象程序设计的基础之一就是可以从现有对象派生出新的对象,即对象的继承。在Visual Basic中,继承是通过关键字Newr来实现的
(7)接口接口(也称为抽象类)是一组属性和方法,但不给出实现这些方法的代码。抽象类是一种特殊的类,首先是建立一个类模块,然后在该模块中声明一些予程序,但不实现其代码,这样的类模块可以说是一个抽象类(即接口);然后建立其他的类模块,在这些类模块的声明部分中,使用Implements语句表明该类实现了上述接口,接着即可实现接口代码(也即接口的方法)了,即体现了面向对象程序设计中的多态性原则。实现接口的语句格式如下。
Implements接口名
(8)集合在Visual Basic中,集合类似于数组,在集合中可以保存各种数据。集合是一个预定义的对象,为了建立一个集合,必须先建立一个Collection类的实例。其格式是:
Dim 集合名 As New collection
由表5-17可知,在Visual Basic中,抽象类模块只包含属性和方法的定义,而不包括任何可执行代码。本试题所定义的抽象类Ishape中,定义了一个属性color、两个方法draw和move。在实现该接口时,需要在有Ishape接口的类模块的说明段中添加一个关键字“Implements”,因此(1)空缺处应填入“Implements IShape”。
根据题干中“【Visual Basic代码6-2】实现了类CCircle的IShape界面,并使用了XCircle提供的显示功能。XCircle提供的显示功能方法接口为displayIt。”的说明信息可知,若类CCircle中要使用XCircle提供的显示功能,则需声明XCircle的实例变量并生成和引用实例对象,因此(2)空缺处应填入“XCircle”,(3)空缺处填入“New XCircle”,(6)空缺处填入“bridged. displayIt”。
由语句“IShape_Color=color”可知,(4)空缺处所在的Property过程使IShape_Color取得CCircle的私有数据成员color的值,因此(4)空缺处应填入“Get IShape_Color”。
同理,由语句“color=newColor”可知,(5)空缺处所在的Property过程使CCircle的私有数据成员color取得外部设置的newColor值,因此(5)空缺处应填入“Let IShape_Color”。

多项选择题
填空题