计算机软件技术基础第三章.ppt
第三章 面向对象的程序设计方法,1.面向对象技术2.面向对象方法中的基本概念3.什么是面向对象程序设计4.VB的面向对象方法,本章要求:,1,3.1 面向对象技术,定义:面向对象技术是强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。基本特征主要有抽象性、封装性、继承性和多态性。面向对象技术是软件工程中最为流行的软件系统分析与设计的方法。VB类库中封装了大量的可视控件,并为其设计了各自的属性和方法。,2,基本特征,(1)抽象性(Abstract)就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念。例如,在设计一个学生成绩管理系统的过程中,考察学生张华这个对象时,就只关心他的班级、学号、成绩等,而忽略他的身高、体重等信息。抽象性是对事物的抽象概括描述,实现了客观世界向计算机世界的转化。将客观事物抽象成对象及类是是面向对象方法的第一步。,3,3.1 面向对象技术,(2)封装性(Encapsulation)就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。封装有两个含义:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。对象的属性值(除了公有的属性值)只能由这个对象的行为来读取和修改;二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。,4,基本特征,3.1 面向对象技术,(3)继承性(Inheritance)是一种联结类与类的层次模型。继承性是指特殊类的对象拥有其一般类的属性和行为。继承意味着“自动地拥有”,即特殊类中不必重新定义已在一般类中定义过的属性和行为,而它却自动地、隐含地拥有其一般类的属性与行为。继承允许和鼓励类的重用,提供了一种明确表述共性的方法;继承下来的属性和行为是隐式的;继承是传递的。,5,基本特征,3.1 面向对象技术,(4)多态性(Polymorphism)是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数。继承性和多态性的结合,可以生成一系列虽类似但独一无二的对象。由于多态性,针对相同的消息,不同对象可以有独特的表现方式,实现特性化的设计。,6,基本特征,3.1 面向对象技术,3.2 面向对象方法中的基本概念,对象类对象与类的关系消息和方法,7,对象的广义定义,什么是对象(object)?现实世界中的任何一个事物都可以看成是一个对象。,自然的实体:一个人,一辆汽车,一个教师,逻辑结构:一个银行帐号,一个学生的学籍档案,客户通信录,对象,8,3.2 面向对象方法中的基本概念,对象是人们要研究的任何事物,其特性是:(1)每一个对象必须有一个名字以区别于其它对象;(2)用属性(或叫状态)来描述它的某些特征;(3)有一组操作,每一个操作决定对象的一种行为。/这是关于对象的广义定义,对象,9,对象的广义定义,3.2 面向对象方法中的基本概念,对象是基本的运行实体,它既包含数据(属性),也包括作用于数据的操作(行为);一个对象把属性和行为封装成一个整体;对象是数据和对数据的操作的结合体;从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。,对象,10,面向对象系统中的对象,3.2 面向对象方法中的基本概念,人 类果 类鱼 类类定义了一个大体上相似的对象,具有共同属性特征和行为特征。,类,11,类的概念,3.2 面向对象方法中的基本概念,“类”是对具有共同属性特征和行为特征一个或多个对象的抽象描述。把一组对象的共同特性加以抽象并存储在一个类中的能力,是面向对象技术最重要的手段。,类,12,3.2 面向对象方法中的基本概念,什么是类(class)?,手机类手机的基本功能是一致的。属功能相同的一类商品。类的属性:品牌,颜色、外形尺寸功能相同:拨打电话、接听电话、收发短信等。,能否照相,类,13,3.2 面向对象方法中的基本概念,类的形象表示,Class Studentint number;String name;float score;Public Student(int number1,String name1)number=number1;name=name1;Public void getScore(float score1)score=score1;print();,属性,操作,类,14,3.2 面向对象方法中的基本概念,OOP中类的例子,类是对一组性质相同的对象的抽象描述,是对一组数据和方法的封装。对象则是类的具体化,是类的实例。可以这样定义对象:对象是类的一个实例,包括了数据和过程。,类,实例,对象=实例类,实例化,=,对象与类的关系,15,3.2 面向对象方法中的基本概念,对象与类的关系,(1)消息 Message,消息是要求某个对象执行其中某个功能操作的规格说明。OOP中的一条消息由消息选择器(“消息操作”或“消息名”)及若干个参数和接受消息的对象三部分组成。例如:student1.modify(score1),消息和方法,16,3.2 面向对象方法中的基本概念,消息和方法,消息的例子,接受消息的对象 参数 student1.modify(score1);消息名,消息和方法,17,(1)消息 Message,3.2 面向对象方法中的基本概念,消息和方法,“方法”对应于对象的行为(能力),即它是实现对象所具有的功能操作的代码段。在VB程序中,方法即是窗体中定义的过程、函数,它是该类所能执行的操作的算法实现。通常每个类中包含多个方法(C+中称为成员函数),每个方法由方法名(函数名+参数表)和说明该成员函数的算法实现的一段代码所组成。,消息和方法,18,3.2 面向对象方法中的基本概念,消息和方法,(2)方法(method),3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法3.3.2 面向对象程序设计方法,19,结构化程序设计的基本思想,按功能划分模块,分而治之。分解系统时按照自顶向下的顺序,逐步求精。设计时使各模块间的关系尽可能简单,功能上相对独立,从而可单独验证模块的正确性。,20,3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法,21,结构化程序的组成,3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法,把数据结构和处理数据的操作过程分离为相互独立的实体。用数据表达实际问题中的信息;程序代码则实现用于处理加工这些数据的算法。简而言之,就是数据和操作代码分离。,22,结构化程序设计方法的基本特点,3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法,给程序员增加了负担:必须确保数据和代码匹配。当数据结构改变时,所有相关的处理过程都要进行相应的修改,可维护性低。即使要对不同的数据格式(结构和类型)作同样的处理计算,也必须编写不同名的过程程序,可重用性不好。,23,数据和操作代码分离 产生的问题,3.3 什么是面向对象程序设计,3.3.1 结构化程序设计方法,用面向对象程序设计语言中的对象和类直接模拟现实世界中的对象,将问题空间直接映射到软件空间。便于设计出尽可能直接、自然地表示问题求解方法的软件。面向对象的这种思维方式符合人类的自然思维习惯,使我们能够在程序中自然地描述现实世界的实体和问题,增强了程序代码的可读性,有利于控制软件的复杂性。,24,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,模块化,将一个复杂的大规模软件系统划分成几个规模较小、相对简单的模块,即分而治之。面向对象程序设计方法是按对象来划分。面向对象的软件系统由对象组成,对象之间通过消息传递互相联系。,25,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,面向对象的软件系统的组成,26,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,对象作为程序模块,面向对象的软件系统中每个模块都是高度独立的对象,而对象是比功能模块粒度更大的模块。对象是由数据和对数据的操作(代码)形成的一个整体。面向对象程序设计采用封装的办法,使对象的内部实现与外界隔离,实现了信息隐藏,从而提供了更理想的模块化机制,显著地减少了程序模块间的干扰和依赖性。(低耦合,高内聚),27,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,耦合:软件结构内不同模块之间相互关联的紧密程度。对象(模块)之间的联系内聚:模块内各元素彼此结合的紧密程度。对象功能齐全,数据与操作结合紧密高内聚低耦合、强内聚弱耦合,28,耦合与内聚,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,面向对象程序设计的优越性,重用性:有利于软件生产率的提高;符合人类的自然思维习惯,能够自然地描述现实世界的实体和问题:有利于控制软件的复杂性;更好的模块化,便于多人分工和合作开发软件;编写的代码有更好的可维护性。,29,3.3 什么是面向对象程序设计,3.3.2 面向对象程序设计方法,3.4 VB的面向对象方法,对象的概念 对象是基本的运行时的实体,如窗体、各种控件等,它既包括作用于对象的操作(方法)和对象的响应(事件)。将数据和处理这些数据的过程封装在一起。,30,3.4.1 VB的面向对象设计思想,工具箱的各种控件并不是对象,而是代表了各个不同的类。通过类的实例化,可以得到真正的对象。当在窗体上画一个控件时,就将类转换为对象,即创建了一个控件对象,也简称为控件。,31,3.4 VB的面向对象方法,3.4.1 VB的面向对象设计思想,对象的属 性、事件和方法 一、属性 它们是用来描述和反映对象特征的参数。对象中的数据,所有对象都有自己的属性。控件的属性决定了对象展现给用户的界面具有什么样的外观及功能。对象属性设置的方法:方法一:在设计模式下,通过属性窗口直接设置对象的属性。方法二:在程序的代码中通过赋值实现,其格式为:对象.属性=属性值 eg:command1.Caption=“确定”,32,3.4 VB的面向对象方法,3.4.1 VB的面向对象设计思想,二、事件及事件过程 事件:可被对象识别的动作。事件过程:是指在对象上发生了事件后,应用程序对这个事件所能做出的反应及处理步骤,一般形式如下:Sub 对象名_事件过程名(参数列表).(事件过程代码)End Subeg:Sub command2_Click()end 按下该键结束程序End Sub,33,3.4 VB的面向对象方法,3.4.1 VB的面向对象设计思想,三、方 法(Method)是对象所具有的动作和行为用代码来实现,实际上是VB提供的一个已经封装好了的能用子程序。对象方法 调用形式:对象.方法 参数列表 如省略对象,表示在当对象,一般指窗体。eg:Form1.print“欢迎您使用Visual Basic 6.0 世界,34,3.4 VB的面向对象方法,3.4.1 VB的面向对象设计思想,自定义类的设计手工设计自定义类分以下四步:(1)设计类的属性;(2)设计类的方法;(3)设计类的事件;(4)编写初始化和中断事件,35,3.4 VB的面向对象方法,3.4.2 VB中自定义类的设计和使用,3.4.2 VB中自定义类的设计和使用,自定义类的设计手工设计自定义类分以下四步:(1)设计类的属性属性变量:用向类模块中添加变量的方法定义的一般属性 例如:Public name As String Private age As Integer属性过程:用向类模块中添加Property GET/LET/SET过程的方法定义的属性。属性过程分只读(Property GET)、只写(Property LET/SET)、读写(Property GET和LET/SET)属性过程三种.SET用于定义对象类型属性过程,而LET用于定义非对象类型属性过程。,36,3.4.2 VB中自定义类的设计和使用,自定义类的设计手工设计自定义类分以下四步:(1)设计类的属性例如:Public Property Get Myage()As Integer 读属性Myage Myage=age End PropertyPublic Property Let Myage(n As Integer)写属性MyageIf n18 Then MsgBox(“未满十八岁,无法注册学籍!)Else age=nEnd IfEnd Property注意:读写属性过程的Property GET名称和LET/SET名称必须相同,且Property GET的参数个数比LET/SET的参数个数少一个,但Property GET的类型和LET/SET的最后一个参数的类型相同。,37,3.4.2 VB中自定义类的设计和使用,自定义类的设计手工设计自定义类分以下四步:(2)设计类的方法向类模块中添加Sub或Function过程即可。例如:下例定义了一个公用方法Public Sub ageCheck()If age 18 And age 30 ThenMsgBox(引发事件ageWarn)RaiseEvent ageWarnEnd IfEnd Sub,38,3.4.2 VB中自定义类的设计和使用,自定义类的设计(3)设计类的事件在VB6中,向类模块中添加自定义事件有三步:在类模块的声明部分,用Public Event定义一个事件,事件可以有参数。例如:Option ExplicitPublic Event ageWarn()在该类模块的某一个模块中,用Raise Event引发该事件。例如,公用模块ageCheck引发事件ageWarn(如果属性age之值在1830范围之外则引发该事件):编写事件代码不是在该类模块中编写,而是在事件源中编写,在事件源的声明部分用WITHEVENT声明该类。,39,3.4.2 VB中自定义类的设计和使用,自定义类的设计(3)设计类的事件编写事件代码:例如:使用该类的窗体为form1,则在该窗体代码中写下:Private WithEvents xage As studentPrivate Sub xage_ageWarn()MsgBox(年轻人注意锻炼身体!)End Sub(4)编写类的Initalize和Terminate事件代码为该类编写初始化和中断事件。,40,3.4.2 VB中自定义类的设计和使用,自定义类的使用分四步:(1)声明类变量和事件(类的实例化)(2)变量赋值(设置属性)(3)方法调用(4)释放对象,41,3.4.2 VB中自定义类的设计和使用,自定义类的使用分四步:(1)声明类变量和事件在适当的模块中(如通用)声明类变量。若类中有自定义事件,则使用WithEvents声明该类,并为自定义事件编写事件代码。例如:Private WithEvents ly As studentPrivate Sub ly_ageWarn()MsgBox(年轻人注意锻炼身体!)End Sub,42,3.4.2 VB中自定义类的设计和使用,自定义类的使用分四步:(2)变量赋值 在适当的模块中(如Form_Load模块)对类变量赋值。例如:Private Sub Form_Load()Set ly=New student ly.name=刘永“ly.Myage=32End Sub,43,3.4.2 VB中自定义类的设计和使用,自定义类的使用分四步:(3)方法调用在适当的模块中(如Form_Load模块)使用类的Public或Friend属性、方法。例如:Private Sub Command1_Click()ly.Myage=val(Text1.Text)ly.ageCheckEnd Sub,44,3.4.2 VB中自定义类的设计和使用,自定义类的使用分四步:(4)释放类对象变量这一点非常重要,当不用类对象变量时一定要释放它,以释放内存资源。例如:Private Sub Form_QueryUnload(Cancel As Integer,Un-loadMode As Integer)Set ly=NothingEnd Sub,45,本章结束,46,