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

下载本文档

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

文档简介

1、北航可靠性工程研究所 2005, 软件技术基础面向对象(Object Oriented)的基本概念Q什么是对象(Object)?Q什么是类(Class)Q类和对象区别与联系北航可靠性工程研究所 2005, 软件技术基础什么是对象?Q“对象”是事物Q对象有一个身份,该身份用属性定义Q对象还可以做事情,对象所能做的事情称为对象的行为Q对象可以是真实世界的事物,也可以是概念性的事物北航可靠性工程研究所 2005, 软件技术基础什么是类Q将事物分类进行研究,是人类常用的一种思维方式。Q类通过设定该类中每个对象将具有的属性和行为来提供对象的定义。北航可靠性工程研究所 2005, 软件技术基础类和对象区别

2、与联系北航可靠性工程研究所 2005, 软件技术基础对象之间的关系 对象的三种基本关系(relationship) 依赖(dependency)关系 泛化(generalization 继承、父子)关系 关联(association)关系北航可靠性工程研究所 2005, 软件技术基础依赖关系汽车$小强使用依赖(Dependency)是一种使用关系,它描述了一个对象的规格说明的变化可能会影响到使用它的另一个对象,但反之不然。北航可靠性工程研究所 2005, 软件技术基础泛化关系天花病毒流感病毒SARS病毒病毒RNA复制侵害肌体传染性疫苗泛化(Generalization)描述了一般对象和较特殊的

3、对象之间的关系。北航可靠性工程研究所 2005, 软件技术基础关联关系关联(Dependency)是一种结构关系,它描述了一个对象与另一个对象相联系北航可靠性工程研究所 2005, 软件技术基础面向对象系统的基本元素Q抽象(Abstraction)Q封装(Encapsulation)Q继承(Inheritance)Q多态(Polymorphism)北航可靠性工程研究所 2005, 软件技术基础抽象(Abstraction) 过滤掉对象的一部分特性和操作直到只剩下你所需要的属性和操作。 通过抽象,可以将精力集中在应用程序对象上而不是 实现上。使用户和领域专家能够真正参与到设计中来关注重点北航可靠

4、性工程研究所 2005, 软件技术基础封装(Encapsulation) 当一个对象执行自己的操作时,它对外界隐藏了操作的细节。 接口(Interface)对象总要提供一个“接口”与外部世界建立联系 封装通过隐藏对象的内部实现来帮助抽象,即可以使用一个对象而不必理解对象类是如何实现的隐藏私有北航可靠性工程研究所 2005, 软件技术基础继承(Inheritance)Q通过使用继承性可以消除冗余属性和行为并获得再利用。Q两类基本的继承:实现继承,属于子类的任意对象自动再利用父类的全部属性和行为(VB6.0以下版本不支持)接口继承,提供了一个接口(属性、行为)的再利用,允许这些属性和行为以不同的方

5、式实现(VB6.0支持)再利用北航可靠性工程研究所 2005, 软件技术基础多态(Polymorphism)两个或多个类可以有名字相同、基本目的相同但实现方式不同的行为VB6利用公共接口来实现多态同名行为,不同实现北航可靠性工程研究所 2005, 软件技术基础思考Q对汽车思考面向对象的概念(抽象、封装、继承、多态各举一例)Q考虑过去是如何分析和设计程序的,试着用对象和类去具体化你的一个应用程序Q考察在食堂打饭的过程(用饭卡),描述相关对象的属性和行为,以及这些对象之间的关系北航可靠性工程研究所 2005, 软件技术基础VB6语言面向对象的特征(一)Q在类模块中定义类 Q用Property过程提

6、供公共访问Q定义多态性方法Q生成事件Q封装类常量Q用Object Browser浏览类Q创建对象北航可靠性工程研究所 2005, 软件技术基础VB6语言面向对象的特征(二)Q将窗体用作对象Q使用多组对象Q定义多个接口Q用ActiveX组件说明对象Q开发基于Web的应用程序Q创建C/S应用程序北航可靠性工程研究所 2005, 软件技术基础VB6中类与集合的应用Q创建一个类Q使用一个类的实例Q窗体类的使用Q定义类中的常量Q生成和响应事件Q定义集合Q使用集合北航可靠性工程研究所 2005, 软件技术基础创建一个类Q插入一个类模块Q定义类的属性Q创建类的方法Q响应类事件Q文档化类北航可靠性工程研究所

7、2005, 软件技术基础插入一个类模块Q启动一个新的工程Q从工程菜单选择添加类模块Q设定类名称Q窗体也是一个类Q工具箱中的控件也是一个类北航可靠性工程研究所 2005, 软件技术基础定义类的属性类属性定义由一个类创建的全部对象的属性Q声明一个公共变量简单数据类型(Integer、String)抽象类型(Object)用户定义的类型(UDT)不能定义为公共变量最简单,不推荐使用Q先声明一个私有变量,然后创建Property过程以显露属性 Property过程允许一个类中的属性被声明为私有变量并由公共过程显露北航可靠性工程研究所 2005, 软件技术基础创建Property(一)Q声明一个私有变量

8、Private mvar*注意是 Private 而不是Dim只有类内部的过程可以更改变量值,对应用程序的其它部分隐藏Q创建Property过程Property Get 获取或读入属性值Property Let 设置String、Integer等简单数据类型的属性值Property Set 设置对象数据类型的属性值北航可靠性工程研究所 2005, 软件技术基础创建Property(二)Q多数情况下,类的每个属性有一对Property过程Private mvarDescription As StringPublic Property Let Description(ByVal vData As

9、String)向属性指派值时使用,位于赋值语句的左边。Syntax: X.Description = 5mvarDescription = vDataEnd PropertyPublic Property Get Description() As String检索属性值时使用,位于赋值语句的右边。Syntax: Debug.Print X.DescriptionDescription = mvarDescriptionEnd Property北航可靠性工程研究所 2005, 软件技术基础创建Property(二)Q只使用Property Get限制属性为只读Q只使用Property Let或P

10、roperty Set限制属性为只写Q Property过程可以包含有效性验证、格式化或其它处理过程Friend Property Let Priority(ByVal vData As Integer)if vData4 thenvData=0end ifmvarPriority = vDataEnd PropertyFriend Property Get Priority() As IntegerPriority = mvarPriorityEnd Property北航可靠性工程研究所 2005, 软件技术基础使用Property的益处Q封装格式化、数据有效性或其它处理过程Q只读Q维护可以

11、只更改Property过程的代码而不更改使用该属性的代码北航可靠性工程研究所 2005, 软件技术基础创建方法类方法定义由一个类创建的全部对象的方法QPrivate方法在类的内部访问QPublic方法在类的外部访问返回值Function不返回值SubQ类方法按正常的Sub或Function过程实现北航可靠性工程研究所 2005, 软件技术基础响应事件 两个内置响应事件 Initialize提供了执行由类创建的对象初始化的机会 Terminate提供了执行任何清除处理的场所北航可靠性工程研究所 2005, 软件技术基础Initialize 当由一个类创建对象时,就触发了Initialize事件,

12、所以可用于是首批代码的执行Private Sub Class_Initialize()InitA为只读属性,将初始值设为1mvarInitA = 1MsgBox A的初始值 & InitA End Sub北航可靠性工程研究所 2005, 软件技术基础Terminate 当释放一个对象时,触发Terminate事件可以向Terminate事件中添加代码以解除与此对象相关联的相关对象,或在对象被破坏时应该执行的过程Private Sub Class_Terminate()MsgBox 对象被释放End Sub北航可靠性工程研究所 2005, 软件技术基础文档化类 从“工具”菜单中选择 “过

13、程属性” 从“工程”菜单中选择 “添加文件”北航可靠性工程研究所 2005, 软件技术基础使用对象浏览器北航可靠性工程研究所 2005, 软件技术基础创建和使用一个类实例(对象)Q声明对象变量Q创建对象Q使用对象属性和方法Q释放对象北航可靠性工程研究所 2005, 软件技术基础声明对象变量 声明一个数据类型为对象类的变量Private m_Xq as CStudent 使用New关键字声明一个数据类型为对象类的变量 Private m_Xq as new CStudent 利用定义为对象的数据类型去声明一个变量 Private m_Xq as Object北航可靠性工程研究所 2005, 软件

14、技术基础创建对象 通过使用带有New关键字的Set语句显式地创建对象 set m_Xq = new CStudent 通过使用对象而隐式地创建对象 m_Xq.Study 通过使用CreateObject函数创建对象北航可靠性工程研究所 2005, 软件技术基础设定、获取对象属性 举例说明北航可靠性工程研究所 2005, 软件技术基础释放对象的引用 Set Xobject=Nothing北航可靠性工程研究所 2005, 软件技术基础定义类中的常量 避免幻数 定义局部常量(Const) 使用Enum语句(枚举变量 ) 定义全局长整型常量 定义字符串常量北航可靠性工程研究所 2005, 软件技术基础

15、集合Q 集合提供了一种把一组相关的对象和一个“包含”它们的对象连接起来的方法 Q 集合本身是一个对象,并由类来创建,该类称为集合类Q 通过将私有的集合对象包装到类模块中,可实现部件的对象模型的集合,这样就定义了一个集合类 北航可靠性工程研究所 2005, 软件技术基础Collection 对象示例 Q声明Collection对象QCount 属性 QAdd 方法添加成员 QRemove 方法删除成员 QItem 方法返回特定成员 QFor Each.Next枚举集合Q举例北航可靠性工程研究所 2005, 软件技术基础在VB6.0中创建集合类Q在类模块中定义类 (CStudents)Q创建集合对

16、象实例Q向集合类中添加属性和方法Q使用集合类北航可靠性工程研究所 2005, 软件技术基础创建集合对象实例Private mColStudents As CollectionPrivate Sub Class_Initialize() 创建集合对象 Set mColStudents = New CollectionEnd SubPrivate Sub Class_Terminate() Set mColStudents = NothingEnd Sub北航可靠性工程研究所 2005, 软件技术基础集合类中添加属性和方法Q与Collection类似,集合类必须提供添加( Add )、删除(Rem

17、ove)成员以及返回(Item)特定成员的功能北航可靠性工程研究所 2005, 软件技术基础Add方法Public Function Add(StudentName As String, Sex As Integer, Optional sKey As String) As Student 创建新对象 Dim objNewMember As Student Set objNewMember = New Student 设置传入方法的属性 objNewMember.StudentName = StudentName objNewMember.Sex = Sex If Len(sKey) = 0

18、Then mColStudents.Add objNewMember Else mColStudents.Add objNewMember, sKey End If 返回已创建的对象 Set Add = objNewMember Set objNewMember = NothingEnd Function北航可靠性工程研究所 2005, 软件技术基础Remove方法Public Sub Remove(vntIndexKey As Variant) 删除集合中的元素时使用。 vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因 语法:x.Remove(xyz) m

19、ColStudents.Remove vntIndexKeyEnd Sub北航可靠性工程研究所 2005, 软件技术基础Item方法Public Property Get Item(vntIndexKey As Variant) As CStudent 引用集合中的一个元素时使用。 vntIndexKey 包含集合的索引或关键字, 这是为什么要声明为 Variant 的原因 语法:Set foo = x.Item(xyz) or Set foo = x.Item(5) Set Item = mColStudents(vntIndexKey)End Property北航可靠性工程研究所 2005

20、, 软件技术基础使 For Each . Next 有效 NewEnum 必须返回一个集合的枚举算子的 IUnknown 接口。 Public Function NewEnum() As IUnknown Set NewEnum = mcolEmployees._NewEnum End Function 委派给 Collection 对象的最重要的东西是它的枚举算子。枚举算子是一个小对象,该对象知道如何遍历集合中的各项。不能用 Visual Basic 来书写枚举算子对象,因为 Employees 类是基于 Collection 对象的,可以返回 Collection 对象的枚举算子它自然知道

21、如何枚举 Collection 对象所保存的各项。 包围 Collection 对象的 _NewEnum 方法的方括号是必要的,这是因为方法名前面的下划线。前面的这个下划线是一个约定,它指明该方法是隐藏在类型库中的。不能把自己的方法命名为 _NewEnum,但是可以把它隐藏在类型库中,并将 For Each . Next 所需要的过程 ID 赋给它。北航可靠性工程研究所 2005, 软件技术基础隐藏 NewEnum在“工具”菜单上,单击“过程属性”,打开“过程属性”对话框,在“名称”框中,选择 NewEnum 方法。单击“高级”,显示一些高级功能。选中“隐藏该成员”,使 NewEnum 隐藏在

22、类型库中。在“过程标识符”框中,键入 -4,将 For Each . Next 所需要的过程标识符赋给 NewEnum。单击“确定”。 北航可靠性工程研究所 2005, 软件技术基础其它Public Property Get Count() As Long 检索集合中的元素数时使用。语法:Debug.Print x.Count Count = mColStudents.CountEnd PropertyPublic Sub Clear() Set mColStudents = New CollectionEnd Sub北航可靠性工程研究所 2005, 软件技术基础利用类生成器构建集合类 手工建

23、立繁琐 首先利用类生成器构建类 然后利用类生成器构建集合类北航可靠性工程研究所 2005, 软件技术基础作业作业Q 利用集合类创建学生成绩信息输入程序,并成批保存到数据库中北航可靠性工程研究所 2005, 软件技术基础接口Q 接口就是一些属性、方法和事件的集合Q 单独的Customer类可以定义公共属性和方法(复杂)Q 将对象的功能分为被称为接口的逻辑集Q 一个例程随后可以使用这些接口并确保它只使用该接口正确的属性和方法SendToSendFromMessageSendDeleteFax NumberTransmitPhone NumberCallNameAddressBuyIDefaultI

24、PhoneIFaxIEmailCustomerNameAddressBuyPhone NumberCallFax NumberTransmitSendToSendFromMessageSendDelete北航可靠性工程研究所 2005, 软件技术基础使用接口的益处 简化开发在一个大型程序中,一个类可以有很多不同的属性和方法以提供特定类型的功能。如果属性和方法组合到接口中,类的开发就被简化了。 一组类中的标准功能 一个接口提供了一组预定义的属性和方法 简化的再利用可以在任意数量的类中实现一个接口,如果以后想在不同的类中定义同一组属性和方法,可以通过在其它类中实现接口来再利用北航可靠性工程研究所

25、2005, 软件技术基础使用接口的益处 添加了新功能但不影响已有的接口如何向Customer中增加Mobile功能?1、更改IPhone接口 2、添加新接口IMobile思考:软件是如何升级的? 改善的多态性 实现统一接口的多重类一般可以通过使用多态性的接口进行访问 获得实现继承性为了防止多个类中代码的重复,可以在单个类中开发公共的代码,该类称为基类,可通过引用每个类中的基类的接口实现继承北航可靠性工程研究所 2005, 软件技术基础创建并实现接口 使用VB6创建接口 使用新的Implements关键字 实现接口 使用替代接口北航可靠性工程研究所 2005, 软件技术基础VB6创建接口 添加一

26、个类 (Isave) 添加空的方法(Save) 模块级变量声明和过程代码? 在一个用作接口的类模块中的代码,包括定义的私有变量和事件,当实现接口时将被忽略 接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分 。北航可靠性工程研究所 2005, 软件技术基础Implements语句 指定要在包含该语句的类模块中实现的接口或类 Implements InterfaceName | Class Implements 语句不能在标准模块中使用 北航可靠性工程研究所 2005, 软件技术基础实现接口 同一接口可以在应用程序中的任意数量的窗体或类模块(不含标准模块)

27、中实现 用Implements语句声明接口 从”对象”框中选择接口,从 “过程/事件”框中选择属性和方法 添加代码以实现接口北航可靠性工程研究所 2005, 软件技术基础使用接口 将对象分配给接口 声明带有接口变量的过程北航可靠性工程研究所 2005, 软件技术基础将对象分配给接口 声明对象变量Private mCustomer as CCustomer 声明接口类型变量Private mIsave as Isave 将接口对象赋给对象变量set mCustomer = New CCustomer set mIsave = mCustomer 不要New 使用接口变量引发属性或方法 mIsav

28、e.save北航可靠性工程研究所 2005, 软件技术基础声明带有接口变量的过程 声明对象变量Private mCustomer as CCustomer 创建过程以实现该操作public sub save(Obj as Isave)if obj.isdirty then obj.saveend ifend sub 调用过程并将对象作为变量传递 save mCustomer北航可靠性工程研究所 2005, 软件技术基础用接口实现多态性 多态性就是利用公共接口与来自不同类的对象交流的能力 实现多态性多重类可以实现同一接口,该接口中所定义的属性和方法随后可以被引发,以作用于由实现接口的类所创建的任意对象。 Private mCustomer as CCustomer Private mStudent as CStudent save mStudent save mCustomer北航可靠性工程研究所 2005, 软件技术基础集合多态性的实现 可以使用同集合相

温馨提示

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

评论

0/150

提交评论