第三章 面向对象技术_第1页
第三章 面向对象技术_第2页
第三章 面向对象技术_第3页
第三章 面向对象技术_第4页
第三章 面向对象技术_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章面向对象技术第1页,课件共69页,创作于2023年2月面向对象(ObjectOriented)的基本概念什么是对象(Object)?什么是类(Class)类和对象区别与联系第2页,课件共69页,创作于2023年2月什么是对象?“对象”是事物对象有一个身份,该身份用属性定义对象还可以做事情,对象所能做的事情称为对象的行为对象可以是真实世界的事物,也可以是概念性的事物第3页,课件共69页,创作于2023年2月什么是类将事物分类进行研究,是人类常用的一种思维方式。类通过设定该类中每个对象将具有的属性和行为来提供对象的定义。第4页,课件共69页,创作于2023年2月类和对象区别与联系第5页,课件共69页,创作于2023年2月对象之间的关系对象的三种基本关系(relationship)

依赖(dependency)关系

泛化(generalization继承、父子)关系

关联(association)关系

第6页,课件共69页,创作于2023年2月依赖关系依赖(Dependency)是一种使用关系,它描述了一个对象的规格说明的变化可能会影响到使用它的另一个对象,但反之不然。

第7页,课件共69页,创作于2023年2月泛化关系天花病毒流感病毒SARS病毒病毒RNA复制侵害肌体传染性疫苗泛化(Generalization)描述了一般对象和较特殊的对象之间的关系。第8页,课件共69页,创作于2023年2月关联关系关联(Dependency)是一种结构关系,它描述了一个对象与另一个对象相联系

第9页,课件共69页,创作于2023年2月面向对象系统的基本元素抽象(Abstraction)封装(Encapsulation)继承(Inheritance)多态(Polymorphism)第10页,课件共69页,创作于2023年2月抽象(Abstraction)

过滤掉对象的一部分特性和操作直到只剩下你所需要的属性和操作。

通过抽象,可以将精力集中在应用程序对象上而不是实现上。使用户和领域专家能够真正参与到设计中来——关注重点第11页,课件共69页,创作于2023年2月封装(Encapsulation)当一个对象执行自己的操作时,它对外界隐藏了操作的细节。接口(Interface)对象总要提供一个“接口”与外部世界建立联系封装通过隐藏对象的内部实现来帮助抽象,即可以使用一个对象而不必理解对象类是如何实现的——隐藏私有第12页,课件共69页,创作于2023年2月继承(Inheritance)通过使用继承性可以消除冗余属性和行为并获得再利用。两类基本的继承:

实现继承,属于子类的任意对象自动再利用父类的全部属性和行为(VB6.0以下版本不支持)

接口继承,提供了一个接口(属性、行为)的再利用,允许这些属性和行为以不同的方式实现(VB6.0支持)

——再利用第13页,课件共69页,创作于2023年2月多态(Polymorphism) 两个或多个类可以有名字相同、基本目的相同但实现方式不同的行为 VB6利用公共接口来实现多态——同名行为,不同实现第14页,课件共69页,创作于2023年2月思考对汽车思考面向对象的概念 (抽象、封装、继承、多态各举一例)考虑过去是如何分析和设计程序的,试着用对象和类去具体化你的一个应用程序考察在食堂打饭的过程(用饭卡),描述相关对象的属性和行为,以及这些对象之间的关系第15页,课件共69页,创作于2023年2月VB6语言面向对象的特征(一)在类模块中定义类用Property过程提供公共访问定义多态性方法生成事件封装类常量用Object

Browser浏览类创建对象第16页,课件共69页,创作于2023年2月VB6语言面向对象的特征(二)将窗体用作对象使用多组对象定义多个接口用ActiveX组件说明对象开发基于Web的应用程序创建C/S应用程序第17页,课件共69页,创作于2023年2月VB6中类与集合的应用创建一个类使用一个类的实例窗体类的使用定义类中的常量生成和响应事件定义集合使用集合第18页,课件共69页,创作于2023年2月创建一个类插入一个类模块定义类的属性创建类的方法响应类事件文档化类第19页,课件共69页,创作于2023年2月插入一个类模块启动一个新的工程从工程菜单选择添加类模块设定类名称窗体也是一个类工具箱中的控件也是一个类第20页,课件共69页,创作于2023年2月定义类的属性

类属性定义由一个类创建的全部对象的属性声明一个公共变量 简单数据类型(Integer、String)

抽象类型(Object)

用户定义的类型(UDT)不能定义为公共变量 最简单,不推荐使用先声明一个私有变量,然后创建Property过程以显露属性

Property过程允许一个类中的属性被声明为私有变量并由公共过程显露第21页,课件共69页,创作于2023年2月创建Property(一)声明一个私有变量

Privatemvar*

注意是Private而不是Dim

只有类内部的过程可以更改变量值,对应用程序的其它部分隐藏创建Property过程

PropertyGet

获取或读入属性值

PropertyLet设置String、Integer等简单数据类型的属性值

PropertySet

设置对象数据类型的属性值第22页,课件共69页,创作于2023年2月创建Property(二)多数情况下,类的每个属性有一对Property过程PrivatemvarDescriptionAsStringPublicPropertyLetDescription(ByValvDataAsString) '向属性指派值时使用,位于赋值语句的左边。 'Syntax:X.Description=5 mvarDescription=vDataEndPropertyPublicPropertyGetDescription()AsString '检索属性值时使用,位于赋值语句的右边。 'Syntax:Debug.PrintX.Description Description=mvarDescriptionEndProperty第23页,课件共69页,创作于2023年2月创建Property(二)只使用PropertyGet限制属性为只读只使用PropertyLet或PropertySet限制属性为只写Property过程可以包含有效性验证、格式化或其它处理过程FriendPropertyLetPriority(ByValvDataAsInteger) ifvData<0orvData>4then vData=0

endif mvarPriority=vDataEndPropertyFriendPropertyGetPriority()AsInteger Priority=mvarPriorityEndProperty第24页,课件共69页,创作于2023年2月使用Property的益处封装 格式化、数据有效性或其它处理过程只读维护

可以只更改Property过程的代码而不更改使用该属性的代码第25页,课件共69页,创作于2023年2月创建方法

类方法定义由一个类创建的全部对象的方法Private方法

在类的内部访问Public方法

在类的外部访问 返回值Function

不返回值Sub类方法按正常的Sub或Function过程实现第26页,课件共69页,创作于2023年2月响应事件两个内置响应事件Initialize

提供了执行由类创建的对象初始化的机会Terminate

提供了执行任何清除处理的场所第27页,课件共69页,创作于2023年2月Initialize当由一个类创建对象时,就触发了Initialize事件,所以可用于是首批代码的执行PrivateSubClass_Initialize() ‘InitA为只读属性,将初始值设为1 mvarInitA=1 MsgBox"A的初始值"&InitAEndSub第28页,课件共69页,创作于2023年2月Terminate当释放一个对象时,触发Terminate事件

可以向Terminate事件中添加代码以解除与此对象相关联的相关对象,或在对象被破坏时应该执行的过程PrivateSubClass_Terminate() MsgBox"对象被释放"EndSub第29页,课件共69页,创作于2023年2月文档化类从“工具”菜单中选择“过程属性”从“工程”菜单中选择“添加文件”第30页,课件共69页,创作于2023年2月使用对象浏览器第31页,课件共69页,创作于2023年2月创建和使用一个类实例(对象)声明对象变量创建对象使用对象属性和方法释放对象第32页,课件共69页,创作于2023年2月声明对象变量声明一个数据类型为对象类的变量

Privatem_XqasCStudent使用New关键字声明一个数据类型为对象类的变量

Privatem_XqasnewCStudent利用定义为对象的数据类型去声明一个变量

Privatem_XqasObject第33页,课件共69页,创作于2023年2月创建对象通过使用带有New关键字的Set语句显式地创建对象

setm_Xq=newCStudent通过使用对象而隐式地创建对象

m_Xq.Study通过使用CreateObject函数创建对象第34页,课件共69页,创作于2023年2月设定、获取对象属性举例说明第35页,课件共69页,创作于2023年2月释放对象的引用SetXobject=Nothing第36页,课件共69页,创作于2023年2月定义类中的常量避免幻数定义局部常量(Const)使用Enum语句(枚举变量)定义全局长整型常量定义字符串常量第37页,课件共69页,创作于2023年2月集合集合提供了一种把一组相关的对象和一个“包含”它们的对象连接起来的方法集合本身是一个对象,并由类来创建,该类称为集合类通过将私有的集合对象包装到类模块中,可实现部件的对象模型的集合,这样就定义了一个集合类第38页,课件共69页,创作于2023年2月Collection

对象示例

声明Collection对象Count属性Add方法添加成员Remove方法删除成员Item方法返回特定成员ForEach...Next枚举集合举例第39页,课件共69页,创作于2023年2月在VB6.0中创建集合类在类模块中定义类(CStudents)创建集合对象实例向集合类中添加属性和方法使用集合类第40页,课件共69页,创作于2023年2月创建集合对象实例PrivatemColStudentsAsCollectionPrivateSubClass_Initialize()'创建集合对象

SetmColStudents=NewCollectionEndSubPrivateSubClass_Terminate()SetmColStudents=NothingEndSub第41页,课件共69页,创作于2023年2月集合类中添加属性和方法与Collection类似,集合类必须提供添加(Add)、删除(Remove)成员以及返回(Item)特定成员的功能第42页,课件共69页,创作于2023年2月Add方法PublicFunctionAdd(StudentNameAsString,SexAsInteger,OptionalsKeyAsString)AsStudent'创建新对象

DimobjNewMemberAsStudentSetobjNewMember=NewStudent'设置传入方法的属性

objNewMember.StudentName=StudentNameobjNewMember.Sex=SexIfLen(sKey)=0ThenmColStudents.AddobjNewMemberElsemColStudents.AddobjNewMember,sKeyEndIf'返回已创建的对象

SetAdd=objNewMemberSetobjNewMember=NothingEndFunction第43页,课件共69页,创作于2023年2月Remove方法PublicSubRemove(vntIndexKeyAsVariant)'删除集合中的元素时使用。

'vntIndexKey包含索引或关键字,这是为什么要声明为

Variant的原因

'语法:x.Remove(xyz)mColStudents.RemovevntIndexKeyEndSub第44页,课件共69页,创作于2023年2月Item方法PublicPropertyGetItem(vntIndexKeyAsVariant)AsCStudent'引用集合中的一个元素时使用。

'vntIndexKey

包含集合的索引或关键字,

'这是为什么要声明为

Variant

的原因

'语法:Setfoo=x.Item(xyz)orSetfoo=x.Item(5)SetItem=mColStudents(vntIndexKey)EndProperty第45页,课件共69页,创作于2023年2月使ForEach...Next

有效

‘NewEnum必须返回一个集合的枚举算子的IUnknown接口。 PublicFunctionNewEnum()AsIUnknown SetNewEnum=mcolEmployees.[_NewEnum]EndFunction委派给Collection对象的最重要的东西是它的枚举算子。枚举算子是一个小对象,该对象知道如何遍历集合中的各项。不能用VisualBasic来书写枚举算子对象,因为Employees类是基于Collection对象的,可以返回Collection对象的枚举算子—它自然知道如何枚举Collection对象所保存的各项。包围Collection对象的_NewEnum方法的方括号是必要的,这是因为方法名前面的下划线。前面的这个下划线是一个约定,它指明该方法是隐藏在类型库中的。不能把自己的方法命名为_NewEnum,但是可以把它隐藏在类型库中,并将ForEach...Next所需要的过程ID赋给它。第46页,课件共69页,创作于2023年2月隐藏

NewEnum在“工具”菜单上,单击“过程属性”,打开“过程属性”对话框,在“名称”框中,选择NewEnum方法。

单击“高级”,显示一些高级功能。选中“隐藏该成员”,使NewEnum隐藏在类型库中。

在“过程标识符”框中,键入-4,将ForEach...Next

所需要的过程标识符赋给NewEnum。单击“确定”。第47页,课件共69页,创作于2023年2月其它PublicPropertyGetCount()AsLong'检索集合中的元素数时使用。语法:Debug.Printx.CountCount=mColStudents.CountEndPropertyPublicSubClear()SetmColStudents=NewCollectionEndSub第48页,课件共69页,创作于2023年2月利用类生成器构建集合类手工建立繁琐首先利用类生成器构建类然后利用类生成器构建集合类第49页,课件共69页,创作于2023年2月作业利用集合类创建学生成绩信息输入程序,并成批保存到数据库中第50页,课件共69页,创作于2023年2月接口接口就是一些属性、方法和事件的集合单独的Customer类可以定义公共属性和方法(复杂)将对象的功能分为被称为接口的逻辑集一个例程随后可以使用这些接口并确保它只使用该接口正确的属性和方法SendToSendFromMessageSendDeleteFaxNumberTransmitPhoneNumberCallNameAddressBuyIDefaultIPhoneIFaxIEmailCustomerNameAddressBuyPhoneNumberCallFaxNumberTransmitSendToSendFromMessageSendDelete第51页,课件共69页,创作于2023年2月使用接口的益处简化开发

在一个大型程序中,一个类可以有很多不同的属性和方法以提供特定类型的功能。如果属性和方法组合到接口中,类的开发就被简化了。一组类中的标准功能

一个接口提供了一组预定义的属性和方法简化的再利用

可以在任意数量的类中实现一个接口,如果以后想在不同的类中定义同一组属性和方法,可以通过在其它类中实现接口来再利用第52页,课件共69页,创作于2023年2月使用接口的益处添加了新功能但不影响已有的接口

如何向Customer中增加Mobile功能?

1、更改IPhone接口2、添加新接口IMobile

思考:软件是如何升级的?改善的多态性

实现统一接口的多重类一般可以通过使用多态性的接口进行访问获得实现继承性

为了防止多个类中代码的重复,可以在单个类中开发公共的代码,该类称为基类,可通过引用每个类中的基类的接口实现继承第53页,课件共69页,创作于2023年2月创建并实现接口使用VB6创建接口使用新的Implements关键字实现接口使用替代接口第54页,课件共69页,创作于2023年2月VB6创建接口添加一个类(Isave)添加空的方法(Save)模块级变量声明和过程代码?

在一个用作接口的类模块中的代码,包括定义的私有变量和事件,当实现接口时将被忽略接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分。第55页,课件共69页,创作于2023年2月Implements语句指定要在包含该语句的类模块中实现的接口或类Implements[InterfaceName|Class]Implements语句不能在标准模块中使用

第56页,课件共69页,创作于2023年2月实现接口同一接口可以在应用程序中的任意数量的窗体或类模块(不含标准模块)中实现用Implements语句声明接口从”对象”框中选择接口,从“过程/事件”框中选择属性和方法添加代码以实现接口第57页,课件共69页,创作于2023年2月使用接口将对象分配给接口声明带有接口变量的过程第58页,课件共69页,创作于2023年2月将对象分配给接口声明对象变量

PrivatemCustomerasCCustomer声明接口类型变量

PrivatemIsaveasIsave将接口对象赋给对象变量

setmCustomer=NewCCustomer

setmIsave=mCustomer‘不要New使用接口变量引发属性或方法

mIsave.save第59页,课件共69页,创作于2023年2月声明带有接口变量的过程声明对象变量

PrivatemCustomerasCCustomer创建过程以实现该操作

publicsubsave(ObjasIsave) ifobj.isdirtythen obj.save endif endsub调用过程并将对象作为变量传递

savemCustomer第60页,课件共69页,创作于2023年2月用接口实现多态性多态性就是利用公共接口与来自不同类的对象交流的能力实现多态性

多重类可以实现同一接口,该接口中所定义的属性和方法随后可以被引发,以作用于由实现接口的类所创建的任意对象。

PrivatemCustomerasCCustomer

PrivatemStudent

asCStudent

savemStudent

savemCustomer第61页,课件共69页,创作于2023年2月集合多态性的实现可以使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论