《第5章 面向对象技术优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第5章 面向对象技术优秀PPT.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 面向对象技术现在学习的是第1页,共67页主要内容5.1 模块和名字空间5.2 类和对象5.3 属性、方法和事件5.4 继承和多态5.5 接口现在学习的是第2页,共67页5.1 模块和名字空间现在学习的是第3页,共67页模块(Modules)模块中可以包括变量和方法,通常很少直接引用模块的名称通常不是很重要,因此模块中的成员可以直接使用现在学习的是第4页,共67页举例1Module Test Sub Main()Console.WriteLine(Add(10,20)End SubEnd ModuleModule Math Function Add(ByVal x As Integer,
2、ByVal y As Integer)_ As Integer Return x+y End FunctionEnd Module现在学习的是第5页,共67页举例2Module Test Sub Main()Console.WriteLine(Acme.Add(10,20)End SubEnd ModuleNamespace Acme Module Math Function Add(ByVal x As Integer,ByVal y As Integer)_ As Integer Return x+y End Function End ModuleEnd Namespace现在学习的是第6
3、页,共67页什么时候需要明确指出模块名称?当两个模块中定义了同名的成员,在使用时必须明确指出该成员来自哪个模块现在学习的是第7页,共67页Module Test Sub Main()Console.WriteLine(Add(10,20)End SubEnd ModuleModule IntegerMath Function Add(ByVal x As Integer,ByVal y As Integer)As Integer Return x+y End FunctionEnd ModuleModule LongMath Function Add(ByVal x As Long,ByVal
4、 y As Long)As Long Return x+y End FunctionEnd ModuleIntegerMath.Add(10,20)orLongMath.Add(10,20)现在学习的是第8页,共67页名字空间(Namespaces)名字空间是程序集中相关类型的一个组织方式在.NET中使用名字空间对各种类型进行分类方便对所需类型的查找现在学习的是第9页,共67页名字空间的声明在VB.NET中声明名字空间需要使用NameSpace关键字名字空间的声明可以嵌套现在学习的是第10页,共67页举例合法的名字空间Namespace A Fully qualified name:A Cla
5、ss B Fully qualified name:A.B Class C Fully qualified name:A.B.C End Class End Class Namespace D.E Fully qualified name:A.D.E Class F Fully qualidied name:A.D.E.F End Class End NamespaceEnd Namespace现在学习的是第11页,共67页名字空间的导入(Imports)如果使用Imports引入了两个名字空间,但两个名字空间中具有同名的成员,必须使用别名,否则会出现错误现在学习的是第12页,共67页Name
6、space A Class Test End ClassEnd NamespaceNamespace B Class Test End ClassEnd NamespaceImports AImports BModule TestModule Sub Main()Error:Test is imported through A and B Dim x As Test End MoudleImports ATest=A.TestImports BTest=B.TestModule TestModule Sub Main()Error:Test is only imported through a
7、n alias Dim x As Test Dim y As ATest Dim z As BTest End Moudle现在学习的是第13页,共67页5.2 类和对象现在学习的是第14页,共67页面向对象的基本概念对象:是客观世界中的事物或人们头脑中的各种概念在计算机程序中的抽象表示,或者说,是现实世界中个体的数据抽象模型,是面向对象程序设计的基本元素。每个对象都有三个共同的特点:它们都有自己的名字,以区别其他对象它们都有自己的状态,如球有自己的质地、颜色和大小它们都有自己的行为,如球可以滚动、停止或旋转现在学习的是第15页,共67页面向对象的基本概念类就是对具有相同数据和相同操作的一组相
8、似对象的定类就是对具有相同数据和相同操作的一组相似对象的定义,也即是对具有相同属性和行为的一组相似对象的抽义,也即是对具有相同属性和行为的一组相似对象的抽象。类是用来创建对象的模板,它包含所创建对象的状象。类是用来创建对象的模板,它包含所创建对象的状态描述和方法定义,而对象只是类的一个实例态描述和方法定义,而对象只是类的一个实例类的性质类的性质抽象性封装性继承性多态性 现在学习的是第16页,共67页如何创建一个类的框架?完整的语法格式Public|Private|Protected|Friend|Protected Friend|Shadows _MustInherit|NotInherita
9、ble Class 类名类名Inherits基类名Implements 接口名 Variables Methods Properties EventsEnd Class 现在学习的是第17页,共67页如何创建一个类的框架?Public Class DogEnd ClassDog现在学习的是第18页,共67页举例Public Class Customer Public Name As String Public Address As String Public PhoneNumber As StringEnd Class现在学习的是第19页,共67页类的定义可以放在什么位置?放在窗体或模块文件中
10、放在项目内的单独文件中放在单独的项目中现在学习的是第20页,共67页如何创建一个对象?具体语法Dim|Public|Private 对象名 As New 类名(参数)Dim 对象名 As 类名=New 类名(参数)Dim x As New CustomerDim x As Customer=New Customer现在学习的是第21页,共67页如何使用对象?调用对象的方法对象名.方法名()设置对象的属性对象名.属性名=属性值读取对象的属性变量=对象名.属性名现在学习的是第22页,共67页共享与实例化一般情况下类中的所有成员都需要实例化 如果使用Shared关键字进行修饰的成员则是共享的成员共享
11、的成员会被类中的所有实例共享共享的成员可以直接从类中调用,而不用创建类的实例现在学习的是第23页,共67页Public Class Customer Public Name As StringEnd ClassModule Test Sub main()Dim x,y As Customer x=New Customer y=New Custormer x.Name=Joh Smith“If y.Name=x.Name Then Console.WriteLine(“Equal”)End If End SubEnd ModuleNothing will be printed现在学习的是第24页
12、,共67页Public Class Customer Public Prefix As String Public Name As String Public Shared PrintPrefix As Boolean=True Sub PrintName()If PrintPrefix Then Console.Write(Prefix)End If Console.WriteLine(Name)End SubEnd ClassModule Test Sub main()Dim x,y As Customer x=New Customer x.Prefix=Mr.x.Name=Joh Smi
13、th Customer.PrintPrefix=False x.PrintName()End SubEnd ModuleJohn Smith现在学习的是第25页,共67页构造函数构造函数在创建类的对象时对它进行初始化在创建每个对象时都要进行一次构造函数调用关键字New调用类的构造函数,执行初始化任务Public Sub New(参数列表)现在学习的是第26页,共67页Public Class Customer Public Name As String Public Address As String Public Sub New(ByVal Name As String,_ ByVal Ad
14、dress As String)Me.Name=Name Me.Address=Address End SubEnd ClassModule Test Sub main()Dim Bob As Customer Bob=New Customer(Bob,111 Main Street)End SubEnd Module现在学习的是第27页,共67页析构函数Finalize析构函数可以用来完成释放对象的一些清理工作通常情况下会被自动调用,可以根据实际需要进行重载Imports System.IOClass FileWriter Private Stream As FileStream Prote
15、cted Overrides Sub Finalize()Close the Stream Stream.Close()End SubEnd Class现在学习的是第28页,共67页类中变量的声明类中的变量声明与其他变量的声明相同类中的变量用Private关键字修饰,表示该变量的信息被隐藏,只能通过这个对象所在的类的方法和属性来访问例,Private A As Integer现在学习的是第29页,共67页5.3 属性、方法和事件现在学习的是第30页,共67页属性属性用来获取或修改类的Private数据使用Property语句定义属性Get:获取Set:修改或设置Private 变量名 As 数
16、据类型 Public|ReadOnly|WriteOnly Property 属性名()As 数据类型Get Get 属性过程 Return 变量名 End Get Set(ByVal Value As 数据类型)Set 属性过程 变量名=Value End Get End Property现在学习的是第31页,共67页下列哪个属性过程是错误的?Public Class First Private mAge As Integer Property Age()As Integer Get Return mAge End Get Set(ByVal value As Integer)mAge=va
17、lue End Set End PropertyEnd ClassPublic Class First Private mAge As Integer ReadOnly Property Age()Set(ByVal value)mAge=value End Set End PropertyEnd ClassPublic Class First Private mAge As Integer WriteOnly Property Age()Set(ByVal value)mAge=value End Set End PropertyEnd ClassPublic Class First Pri
18、vate mAge As Integer ReadOnly Property Age()Get Return mAge End GetEnd ClassPublic Class First Private mAge As Integer WriteOnly Property Age()Get Return mAge End GetEnd Class现在学习的是第32页,共67页举例Public Class Order Private mCost As Double Public mQuantity As Integer Public Property Cost()As Double Get R
19、eturn mCost End Get Set(ByVal Value As Double)mCost=Value End Set End PropertyEnd Class现在学习的是第33页,共67页方法的重载重载的方法需要使用Overloads关键字修饰Public Overloads Function|Sub 方法名(参数列表)As 数据类型现在学习的是第34页,共67页举例在类中编写一个“加法”方法,可以返回整数相加、小数相加的结果Public Class Class1 2个整数相加 Public Overloads Function add(ByVal x As Integer,_
20、 ByVal y As Integer)As Integer Return x+y End Function 2个小数相加 Public Overloads Function add(ByVal x As Single,_ ByVal y As Single)As Single Return x+y End FunctionEnd Class 现在学习的是第35页,共67页事件的创建与触发创建事件触发事件Public Event 事件名(参数列表)RaiseEvent 事件名(实参列表)现在学习的是第36页,共67页现在学习的是第37页,共67页事件与事件过程的关联方法一:使用WithEven
21、ts和HandlesPublic|Private|Dim|Friend WithEvent 对象变量名对象变量名 As New (类型类型)Private Sub 对象变量名对象变量名_事件名事件名(形参列表形参列表)Handles 对象变量名对象变量名.事件名事件名现在学习的是第38页,共67页现在学习的是第39页,共67页Private Sub Form1_Load(ByVal sender As _ Object,ByVal e As System.EventArgs)_ Handles Me.Load,MyBase.Click MessageBox.Show(CLick)End Sub
22、现在学习的是第40页,共67页事件与事件过程的关联方法二:使用AddHandler和RemoveHandler在运行时动态管理事件处理程序不能同时使用这两种方法不能同时使用这两种方法现在学习的是第41页,共67页AddHandler语句AddHandler语句用于把事件和事件处理程序关联起来AddHandler 对象名.事件名,AddressOf 事件处理程序AddHandler Man.Moved,AddressOf Man_Moved现在学习的是第42页,共67页RemoveHandler语句RemoveHandler语句用来撤销处理程序和事件之间的关联,可以防止对某个特定事件处理程序的调
23、用RemoveHandler 对象名.事件名,AddressOf 事件处理程序RemoveHandler Man.Moved,AddressOf Man_Moved现在学习的是第43页,共67页5.4 继承和多态现在学习的是第44页,共67页继承(Inheritance)Class Customer Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public CustomerID As IntegerEnd Clas
24、sClass Employee Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Public Salary As IntegerEnd ClassClass Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String End Class现在学
25、习的是第45页,共67页继承Class Customer Inherits Person Public CustomerID As IntegerEnd ClassClass Employee Inherits Person Public Salary As IntegerEnd Class现在学习的是第46页,共67页继承当设计从其他类继承得到的类时,可以使用“子类(subclass或child class)”、“派生类(derived class)”当提到被继承的类时,可以使用“超类(superclass)”、“父类(parent class)”和“基类(base class)”创建派生类
26、是,派生类将继承基类的所有成员现在学习的是第47页,共67页继承派生类也可以被其他类继承举例Class Programmer Inherits Employee Public Project As StringEnd Class现在学习的是第48页,共67页继承Object类是继承层次结构中最顶层的类如果一个类没有显示的继承于其他类,那么它缺省继承于Object类现在学习的是第49页,共67页继承ObjectPersonCustomerEmployeeProgrammerManager现在学习的是第50页,共67页NotInheritable修饰符使用NotInheritable可以终止继承层
27、次中的分支例,一个由圆派生出的用于椭圆的形状类型现在学习的是第51页,共67页抽象类抽象类型不能被实例化主要用途:提供适当的积累,供其他类继承,使他们共享通用的设计抽象类的声明需要使用MustInherit 关键字现在学习的是第52页,共67页举例MustInherit Class Person Public Name As String Public Address As String Public City As String Public State As String Public ZIP As String Sub Print()Console.WriteLine(Name)Cons
28、ole.WriteLine(Address)Console.WriteLine(City&,&State&ZIP)End SubEnd ClassClass Employee Inherits Person Public Salary As IntegerEnd Class现在学习的是第53页,共67页抽象方法一个抽象类可以包括一个或多个抽象方法抽象方法的声明需要使用MustOverride 关键字一个类如果包含了任何抽象方法,它必须声明为抽象类抽象基类的每个具体派生类必须提供基类的所有抽象方法的具体实现现在学习的是第54页,共67页MustInherit Class Person Publi
29、c Name As String Public Address As String Public City As String Public State As String Public ZIP As String MustOverride Sub PrintName()Sub Print()PrintName()Console.WriteLine(Address)Console.WriteLine(City&,&State&ZIP)End SubEnd ClassClass Employee Inherits Person Overrides Sub PrintName()Console.W
30、rite(Employee)Console.WriteLine(Name)End Sub Public Salary As IntegerEnd Class现在学习的是第55页,共67页重写/覆盖(Overriding)如果一个基类使用Overridable修饰符来声明方法,那么它就允许用户在派生类中对该方法的行为进行扩展或替换在派生类中要用使用Overrides修饰符来实现该方法的一种新版本如果需要禁止某个特定方法在派生类中被进一步扩展,可使用NotOverridable修饰符现在学习的是第56页,共67页Class Person Public Name As String Public A
31、ddress As String Public City As String Public State As String Public ZIP As String Overridable Sub Print()Console.WriteLine(Name)Console.WriteLine(Address)Console.WriteLine(City&,&State&ZIP)End SubEnd ClassClass Employee Inherits Person Overrides Sub Print()Console.WriteLine(Name)Console.WriteLine(A
32、ddress)Console.WriteLine(City&,&State&ZIP)Console.WriteLine(Salary=&Salary)End Sub Public Salary As IntegerEnd ClassNotOverridable现在学习的是第57页,共67页练一练建立一个基类myBaseClass,声明一个允许覆盖的方法ShowInfo,再建立该类的一个派生类mySubClass,然后分别建立myBaseClass类和mySubClass类的对象,并在该对象中分别调用基类和子类中的ShowInfo方法说明:在基类中ShowInfo方法通过消息对话框显示信息“我是
33、基类”;在子类中ShowInfo方法通过消息对话框显示信息“我是子类”现在学习的是第58页,共67页练一练EmployeeSalariedEmployeeCommissionEmployeeBasePlusCommissionEmployee现在学习的是第59页,共67页 Protected 成员派生类无法直接访问基类的 Private 成员基类的基类的Protected 成员可以被派生类访问现在学习的是第60页,共67页Class User Private SSN As String Protected Password As StringEnd ClassClass Guest Inher
34、its User Sub New()Error:SSN is private to User SSN=123-45-7890 OK:Password is protected and can be accessed Password=password End SubEnd Class现在学习的是第61页,共67页5.5 接口现在学习的是第62页,共67页接口的定义 Public|Friend Interface 接口名称 Inherits 接口,接口 Default Property 属性过程名 Function 成员名 Sub 成员名 Event 成员名End Interface现在学习的是
35、第63页,共67页接口的定义Module Module1Public Interface MyInterfaceProperty stuName As String 声明属性 Function GetScore(ByVal x As Single)As Single 声明Function过程 Event CalComplete()声明事件End Interface 接口定义结束End Module 现在学习的是第64页,共67页接口的实现 Implements 接口名接口名,接口名接口名 Implements 接口名接口名.成员名成员名,接口名接口名.成员名成员名现在学习的是第65页,共67页
36、Creating an Interface named TestPublic Interface Test Specifying two methods in the interface Sub Disp()Function Multiply()As DoubleEnd InterfacePublic Class One Implements Test Public i As Double=12 Public j As Double=12.17 Public Sub Disp()Implements Test.Disp Console.WriteLine(sum of i+j=&i+j)End
37、 Sub Public Function Multiply()As Double Implements Test.Multiply Console.WriteLine(Multiply of i*j=&i*j)End FunctionEnd ClassModule Moudule1 Sub Main()Dim OneObj As New One OneObj.Disp()OneObj.Multiply()End SubEnd Module现在学习的是第66页,共67页委托假定要编写一个排序算法。这个算法可以通过把用于比较元素大小的回调函数传递给排序方法,来对数组中的元素按升序、降序或任意一种顺序进行排序。现在学习的是第67页,共67页