【VB开源代码栏目提醒】:网学会员鉴于大家对VB开源代码十分关注,论文会员在此为大家搜集整理了“VB NET程序设计实用教程电子讲稿8 - 计算机教材”一文,供大家参考学习
第八章面向对象的程序设计出版社出版社: : 清华大学出版社清华大学出版社 第第11版版20082008年年1010月月11日日 丛书名丛书名: : 高职高专“工作过程导向”新理念教材高职高专“
工作过程导向”新理念教材··
计算机系列计算机系列平装平装: 342: 342页页正文语种正文语种: : 中文中文开本开本: 16 : 16 ISBN: 9787302179306 ISBN: 9787302179306
网络资源ftp://ftp.tup.tsinghua.edu.cn/职业教育分社/VBNET程序设计实用教程
课件与源
代码.rar 本章主要内容命名空间、类的定义与对象的声明面向对象的基本概念类的构造器和析构器属性定义、方法重载、类的继承与事件处理主要内容8.1由于结构化程序设计方法的一些缺陷从而导致“软件危机”的产生为消除
软件危机产生了面向对象的程序设计方法OOPObject Oriented Programming。
“面向对象”是对“面向过程”的一次革命目前常用的程序设计语言如Microsoft C、Borland C等都是面向对象的程序设计语句。
Visual Studio.NET中的每种语言都是面向对象的程序
设计语言8.1.1 面向对象程序设计的基本概念1类和对象一般把具有同样性质和功能的个体所构成的集合叫作类。
在指定一个类后往往把属于这个类的对象称为类的实例。
可以把类看成是对象的模板把对象看成是根据模板创建出来的产品。
在.NET程序中类与对象的关系就类似于类型与该种类型变量的关系。
类和类型如Integer代表的是一般的概念对象和变量如整型变量代表的是具体的实例2属性、方法与事件属性是对象的状态和特点。
例如对于教师来说有教师号、姓名和职称等特征对于钢笔来说有厂家、价格等特征。
方法是对象能够执行的一些操作它体现了对象的功能。
如教师有讲课、改作业等功能钢笔有写字的功能等。
事件是对象能够识别和响应的某些操作在大多数情况下事件是由用户的操作引起的例如用户单击某个对象就发生了该对象的Click事件。
事件也可以由系统触发定时器控件的时间到将发生Tick事件。
用户可以自己编写事件
代码来响应特定的事件这样的
代码称为事件过程当一个事件发生时将调用相应的事件过程3封装封装就是将用来描述客观事物的一组数据和操作组装在一起形成一个类。
也就是说类是对客观事物的一种高度抽象是具有一组相同的属性和操作的对象的综合。
例如对于不同的教师无论是张和平还是李世界都拥有姓名、性别、年龄、职称和教龄等属性数据都拥有讲课、
学习、改
作业等行为能力因此我们可以从张和平、李世界等教师的身上抽象出教师类。
在程序设计中可以把类看作是一种与具体
问题相适应的自定义的数据类型通过增添类可以扩展程序设计语言的数据结构。
被封装的数据和操作必须通过所提供的公开接口才能够被外界所访问具有私有访问权限的数据和操作是无法从外界直接访问的只有通过封装体内的方法或函数才可以被访问这就是隐藏性。
隐藏性增加了数据的安全性4继承类可以继承。
所谓继承是指一个新类得到了原来类所有的属性和操作这个新类称为派生类或子类原来类称为新类的基类派生类和基类之间存在着继承关系。
子类还可增加属于自己的新属性和新操作。
需注意的是类的继承是100的继承派生类必须继承基类所有的属性和操作用Private声明的除外基类中具有的任何属性和操作在派生类中就不需要描述如果描述则就有了另一层含义。
例如在动物物种
管理系统中基类是“动物”无论哪一种动物都会有重量范围、脚数、习性等属性能够进行活动等功能。
“动物”基类可以派生出许多更加特殊的动物类如脊椎动物、爬行动物、哺乳动物等它们在拥有基类所有属性和操作的基础上还有其各自的属性和操作比如就会增加脊椎动物具有脊椎、爬行动物能够爬行、哺乳动物通过哺乳养育下一代等。
5重载重载指的是方法名称一样但如果参数不同就会实现不同的功能。
例如定义一个钢笔类钢笔具有写的功能可以定义钢笔的写方法。
可从两个方面对写进行限制一种是限制时间的写法限制的时间作为“写”方法的参数一种是限制笔画次数的写法笔画次数作为写”方法的参数。
这两种“写”法的具体实现过程显然不同。
这时就可以利用重载的方法使它们都具有相同的方法名称但是所使用的参数类型不同。
而在实际调用的时候就可以根据调用时传入的参数类型来判断最终需要调用的函数。
例如如果参数的类型是时间类型则调用限制时间的“写”方法而如果参数是次数则是调用限制笔画次数的“写”方法。
6多态性方法的重载也是一种多态性。
所谓多态性是指在程序运行时面向对象语言会自动判断对象的派生类型并调用相应的方法。
例如某个属于“形体”基类的对象在调用它的“计算面积”方法时程序会自动判断出它的具体类型如果是圆则将调用圆对应的“计算面积”方法如果是正方形则调用正方形对应的“计算面积”方法。
这种在运行情况下的动态识别派生类并根据对象所属的派生类自动调用相应方法的特性就是“多态性”。
1命名空间的概念命名空间NameSpace是组织类的一种机制可以把一组逻辑上有联系的类组织在一个命名空间中。
因此通过命名空间可以将系统中的大量类有序地组织起来使得类更容易被使用和管理。
8.1.2.NET2命名空间的使用使用
VB .NET开发应用程序经常需要使用命名空间。
使用命名空间的方式有两种一种是明确指出命名空间的位置另一种是通过Import关键字引用命名空间。
8.1.2.NET1直接定位命名空间在应用程序中任何一个命名空间都可以在
代码中直接使用。
例如有下面语句Dim pic As System.Drawing.Graphics这条语句就引用了System.Drawing命名空间中的Graphics类来定义一个名为pic变量。
使用直接定位的方法可以在应用程序中引用所有的命名空间。
但需输入较多的字符输入比较麻烦。
8.1.2.NET2使用Imports关键字引用命名空间可先把命名空间引用到程序中然后就可以直接使用命名空间中的类了。
引用命名空间的方法是利用Imports关键字该语句的格式与功能如下。
格式Imports ltNameSpacegt功能把NameSpace所指定的命名空间引入到当前应用程序中。
例如在应用程序中要引入System.Drawing命名空间只需使用如下语句Imports System.Drawing此时要引用其中的类只需直接写类名即可例如下面语句就引用了System.Drawing命名空间中的Graphics类来定义一个名为pic变量。
Dim pic As Graphics8.1.2.NET3命名空间的定义在.NET应用程序中用户还可以通过NameSpace……End NameSpace语句来自己定义命名空间以组织用户自定义类。
例如有如下语句块NameSpace MyNameSpacePublic Class MyClass1……类成员声明End ClassPublic Class MyClass2……类成员声明End ClassEnd NameSpace上述
代码定义了一个名为MyNameSpace的命名空间在该命名空间中定义了MyClass2和MyClass2两个类。
8.1.2.
NET在使用
VB .NET开发应用程序时每个项目都会自动附加一个默认的命名空间。
如果在应用
程序中没有自定义的命名空间那么应用程序中定义的所有的类和模块都属于一个默认的命名空间该命名空间的名字就是项目的名字这个命名空间称为根命名空间。
根命名空间的名字也可以改变只需要在项目的“属性页”对话框中在“根命名空间”下面的文本框中直接修改项目名称即可。
如果在应用程序中自定义了一个命名空间则它属于根命名空间。
例如假设上面例子中的MyNameSpace命名空间是在项目MyApplication1中定义的那么引用该命名空间可使用MyApplication1.MyNameSpace。
8.1.2.NET任务8-1描述编写一个教师信息设置与显示程序程序的设计界面如图8-1所示程序的运行界面如图8-2所示。
程序运行时输入一个教师信息后单击“录入”按钮教师信息将被保存并清空界面上控件中的输入内容并等待用户输入用户可以输入多个教师信息。
若要查看某个教师信息只需单击“显示”按钮将出现一个输入对话框让用户输入教师的序号输入序号后按“确定”按钮将把对应序号的教师信息显示出来。
要求教师信息使用一个类来表示存放教师信息使用教师类的数据来实现。
8.2任务8-1教师信息设置与显示——类与对象的定义图8-1 程序设计界面图8-2 程序运行界面任务分析定义一个Teacher类用来存放教师信息在该类中可以定义一些方法来实现对老师信息的操作如设置教师信息。
在窗体中Teacher类就好象一个类型可以用来定义变量和数组使用该类定义的数组来保存教师信息以便
查询。
8.2任务8-1教师信息设置与显示——类与对象的定义任务实现1启动
VB.NET新建一个项目项目类型为“Windows应用程序”项目的存放位置为“D:VBTASKCH08”项目名为“Task8_1”。
2把Form1窗体的Text属性值设置为“教师信息设置与显示”把它的Name属性值设置为“frmTeacherims”。
单击“解决方案资源管理器”中的“Form1.
VB”窗体然后在属性窗口中把它文件名属性设置为“frmTeacherims.
vb”。
然后执行【项目】→【Task8_1属性】命令在出现的“Task8_1属性页”对话框中把“启动对象”设置为“frmTeacherims”。
8.2任务8-1教师信息设置与显示——类与对象的定义3对照程序设计界面为窗体添加控件并设置控件的属性。
控件的属性设置如表8-1所示。
任务8-1控件属性设置及其功能8.2任务8-1教师信息设置与显示——类与对象的定义控件名 属性名 属性值 说明 Label1 Text quot教师号quot 提示 TextBox1 Text quotquot 输入教师号 Label2 Text quot教师名quot 提示 TextBox2 Text quotquot 输入教师名 Label3 Text quot性别quot 提示 ComboBox1 Text Items quotquot 男 女 输入教师性别 Label4 Text quot年龄quot 提示 TextBox3 Text quotquot 输入教师年龄 Label5 Text quot工资quot 提示 TextBox4 Text quotquot 输入教师工资 CheckBox1 Text quotquot 输入教师婚否信息 4执行【项目】→【添加类】命令将会弹出【添加新项】对话框。
在【添加新项】对话框中右边的模板框中选中【类】图标并在下面【名称】文本框中输入一个类名称本例输入为Complex扩展名为.
VB在VBNET中类文件与窗体文件的扩展名都是.
VB。
如图8-3所示。
8.2任务8-1教师信息设置与显示——类与对象的定义图8-3 通过“添加新项”对话框添加类5单击“打开”按钮将在【解决
方案资源管理器】窗口中看到新建立的Teacher.
vb文件并在
代码窗口中自动添加了一个空类的模板可以在该模板中定义类的成员如下所示。
Public Class TeacherEnd Class说明创建类一般有两种方法一种是继承现有的类对现有类的功能进行扩充另一种是重新创建自己的新类。
VB .NET为程序设计人员提供了创建自己的新类的方法——在应用程序中添加“类”模块创建“类库”。
需注意的是类只能作为项目的一部分因此在创建新类之前必须创建一个项目。
8.2任务8-1教师信息设置与显示——类与对象的定义6为Teacher类中定义成员变量
代码如下。
Public No As String 教师号Public Name As String 教师名Public Sex As String 教师性别Public Age As Integer 教师年龄Private Salary As Single 教师工资Public Marriage As Boolean 婚否信息8.2任务8-1教师信息设置与显示——类与对象的定义说明1类成员的分类上述
代码中定义的类成员都是成员变量在
VB.NET中经常使用的类成员有以下几类。
①常量用来定义与类相关的常量值。
②域又称成员变量类中的变量又称成员变量。
③方法完成类中各种计算或功能的操作是一个通用过程或函数过程。
④属性定义类的特征并对它们提供读、写操作。
⑤事件由类产生的通知用于说明发生了什么事情。
⑥构造器在类被实例化时首先执行的过程主要是完成对象初始化操作。
⑦析构器在对象被销毁之前最后执行的过程主要是完成对象结束时的收尾操作。
8.2任务8-1教师信息设置与显示——类与对象的定义2类成员的可访问性在
VB .NET中根据类成员的可访问性可以把类成员分成五类分别是公有成员、私有成员、保护成员、朋友成员友元和朋友保护成员保护友员。
在
VB.NET中提供了访问修饰符用来可以控制类成员的可访问性。
①公有成员Public提供类的外部接口允许类的使用者从外部访问公有成员。
这是限制最少的一种访问方式。
②私有成员Private仅限于类中的成员可以访问从类的外部访问私有成员是不合法的。
③保护成员Protected保护成员不允许外界对它进行访问但允许其派生类对它进行访问。
④朋友成员Friend又称友元是一种特殊的成员类的这种成员对于同一应用程序是透明的、可访问的而对于其他应用程序则是禁止访问的。
⑤保护友员Protected Friend只能被本程序中的本类或其派生类访问。
注意默认情况下没有指定访问修饰符的类将声明为Friend。
8.2任务8-1教师信息设置与显示——类与对象的定义7接着在Teacher类中编写如下
代码。
Public Sub New 构造器默认工资为2500元Salary 2500End Sub设置一个教师信息Public Sub SetTeacherByVal jsh As String ByVal xm As String ByVal xb As String _ByVal nl As Integer ByVal gz As Single ByVal hf As BooleanNo jsh : Name xmSex xb : Age nlSalary gz : Marriage hfEnd Sub返回工资值因为Salary是Private型成员故只能通过本方法获得教师的工资Public Function GetSalaryReturn SalaryEnd Function8.2任务8-1教师信息设置与显示——类与对象的定义说明1
代码中的New通用过程是一个构造器。
在
VB .NET的类中可以定义两个特殊的过程构造器和析构器。
构造器是在创建类的实例也就是对象时首先执行的过程析构器是当实例也就是对象从内存中销毁前最后执行的过程。
这两个过程的执行是无条件的
系统会自动在创建对象时调用构造器在销毁对象时调用析构器。
构造器又称构造函数主要用来为对象分配存储空间完成初始化操作如给类的成员变量赋值等。
在
VB.NET中类的构造器遵循以下规定。
8.2任务8-1教师信息设置与显示——类与对象的定义①构造器是一个通用过程过程名为New其访问修饰符总是Public。
②当某个类没有定义构造器时系统将自动为其创建构造器这种构造器称为默认构造器。
默认的构造器为Public Sub NewEnd Sub③构造器可以带参数也可以不带参数。
具体实例化时对于带参数的构造器需要实例化的对象也带参数并且参数个数要相等类型要一一对应。
如果是不带参数的构造器则在实例化时对象不具有参数。
8.2任务8-1教师信息设置与显示——类与对象的定义2析构器又称析构函数是在对象销毁时对象离开作用范围或被赋值为Nothing时被调用
常用来释放对象占用的存储空间。
析构器是一个受保护Protected的Sub过程过程名为Fianlize不能带有参数不能拥有访问修饰符。
程序中不能显式地调用析构器析构器是在对象被销毁时由系统自动调用。
8.2任务8-1教师信息设置与显示——类与对象的定义3
代码中还定义了一个名为SetTeacher的过程用来对教师信息进行设置相当于类的方法。
代码中还定义了一个名为GetSalary的方法用来返回Salary成员变量的值由于该成员变量的访问修饰符为Private所以外界要得到它的值只能通过该方法。
8.2任务8-1教师信息设置与显示——类与对象的定义8在窗体的
代码窗口中定义一个模块级变量t存放当前教师信息和一个模块级数组objTeacher保存输入的所有教师信息如下。
Dim t As New Teacher 定义并创建一个Teacher类的实例变量t存放当前教师信息Dim objTeacher As Teacher 定义一个教师类型的数组8.2任务8-1教师信息设置与显示——类与对象的定义说明①Delare是声明对象变量的关键词可以是Dim、Protected、Friend、Protected Friend、Private、Shared 或Static。
其中Static用来声明静态变量在过程中定义的静态变量在过程退出后不被清除仍然保存值下一次进入过程时该变量的值将仍旧是上一次退出时的值。
Static不能用来声明成员变量。
Shared通常用来定义类的成员用Shared声明的类成员是共享成员共享对象属于类所有非共享属于对象所有。
8.2任务8-1教师信息设置与显示——类与对象的定义说明类定义后就可以创建类的实例了创建类的实例需使用New关键字。
类的实例也就是对象相当于一个变量创建对象的语句格式及功能如下。
格式Declare 对象变量名As New 类名参数功能生成一个由“类名”指定的类的名为“对象变量名”的对象。
如果有参数则将参数传递给构造函数。
8.2任务8-1教师信息设置与显示——类与对象的定义②New 关键字实际上是调用构造函数来完成对象的初始化工作。
③创建对象也可以分成两步先定义对象变量然后用New关键字创建对象如下。
Dim 对象名As 类名定义类的实例变量对象名New 类名参数 创建类的实例例如要根据Teacher类生成对象Tea可使用如下语句Dim Tea As New Teacher 定义并生成Teacher类的实例Tea或者使用下述两条语句Dim Tea As Teacher 定义Teacher类的变量TeaTeanew Teacher 生成Teacher类的实例并存放到变量Tea中8.2任务8-1教师信息设置与显示——类与对象的定义9编写Button1按钮的Click事件过程
代码如下。
Private Sub Button1_ClickByVal sender As System.Object ByVal e As System.EventArgs Handles Button1.ClickStatic num As Integer 0Dim jsh As String xm As StringDim xb As String nl As IntegerDim gz As Single hf As Boolean8.2任务8-1教师信息设置与显示——类与对象的定义获得教师的各项信息jsh TextBox1.Text : xm TextBox2.Textxb ComboBox1.Text : nl ValTextBox3.Textgz ValTextBox4.Text : hf CheckBox1.Checked8.2任务8-1教师信息设置与显示——类与对象的定义调用教师的SetTeacher方法设置各项信息t.SetTeacherjsh xm xb nl gz hfReDim Preserve objTeachernumobjTeachernum tnum num 1 Num的值加1准备输入下一个教师信息清除界面上的输入TextBox1.Text quotquot : TextBox2.Text quotquotTextBox3.Text quotquot : TextBox4.Text quotquotComboBox1.Text quotquot : CheckBox1.Checked FalseEnd Sub8.2任务8-1教师信息设置与显示——类与对象的定义说明程序中的语句“t.SetTeacherjsh xm xb nl gz hf”用来调用对象变量t的SetTeacher方法。
对象创建之后在应用程序中就可以使用这个对象。
例如可使用下面
代码为对象设置属性对象名.属性名属性值使用下列
代码读取对象的属性值变量对象名.属性名使用下列
代码调用对象的方法对象名.方法名参数上述
代码中的“属性”也可以是带有Public访问修饰符的成员变量。
8.2任务8-1教师信息设置与显示——类与对象的定义10编写Button2按钮的Click事件过程
代码如下。
Private Sub Button2_ClickByVal sender As System.Object ByVal e As System.EventArgs Handles Button2.ClickDim sal As SingleDim n As Integern InputBoxquot请输入要显示的教师的序号quot quot输入教师序号quotIf n -1 gt objTeacher.GetUpperBound0 ThenMsgBoxquot序号超出范围quot quot序号超出范围提示quot8.2任务8-1教师信息设置与显示——类与对象的定义Exit SubEnd Ifn n -1 与数组下标对应起来TextBox1.Text objTeachern.No : TextBox2.Text objTeachern.NameComboBox1.Text objTeachern.Sex : TextBox3.Text objTeachern.Agesal objTeachern.GetSalary : TextBox4.Text CStrsalCheckBox1.Checked objTeachern.MarriageEnd Sub说明程序功能比较简单请注意对象数组元素的引用及对象数据元素成员的引用。
8.2任务8-1教师信息设置与显示——类与对象的定义11编写“退出”按钮的Click事件过程
代码并对程序功能进行验证。
验证无误后保存项目至此本任务全部完成。
归纳说明本任务通过教师信息的设置和显示程序的实现过程讲解了在程序中定义类的方法、定义类的成员的方法、根据类定义对象和数组的方法以及访问对象变量成员的方法。
在讲解过程后还着重强调了类成员的访问修饰符的使用方法构造器和析构器的特点等较难掌握的知识点。
8.2任务8-1教师信息设置与显示——类与对象的定义拓展与提高类的成员又可以分成共享成员和非共享成员。
在声明成员时如果在语句前加上Sh.