《面向对象方法学初步.ppt》由会员分享,可在线阅读,更多相关《面向对象方法学初步.ppt(44页珍藏版)》请在三一办公上搜索。
1、第一章 从过程抽象到数据抽象,1.2 面向对象方法学初步,主要内容,介绍面向对象方法学中的基本概念:对象类实例消息方法、属性重载封装性、继承和多态性OO这些概念独立于具体的语言。,1.2.1 抽象,在程序设计方法中,常用到抽象这个词。程序设计语言中的数据类型就是对一批具体的数的抽象。例如,整型int就是对所有整数的抽象。类是对象的抽象,而对象则是类的实例。抽象就是从许多事物中舍弃个别的、非本质的特征。,为什么要抽象:一方面有时问题很复杂但我们并不需要了解和描述它们的一切,只需要分析研究其中与系统目标有关的事物及其本质特性;对于那些与系统无关的特征和许多具体的细节,即使有所了解,也应舍弃。另一方
2、面通过舍弃个体在细节上的差异,抽取其共同特征而得到一批事物的抽象概念。面向对象程序设计主要有过程抽象和数据抽象,(1)过程抽象,过程抽象是指“任何一个确定的操作序列都可以把它看作一个单一的实体,尽管实际上它可能是由一系列更低的操作完成的”。运用过程抽象,程序员可以把一个功能分解为一些子功能;如果子功能仍然比较复杂可以进一步分解。这使得程序员可以在不同的抽象层次上考虑问题,在较高的层次上思考时可以不关心较低层次的实现细节。在面向对象程序设计中,过程抽象不是在全系统的范围内进行功能的描述。但是过程抽象对于在对象范围内组织对象的服务是有用的。,(2)数据抽象,数据抽象是根据施加于数据之上的操作来定义
3、数据类型,并限定数据的值只能由这些操作来修改和观察。数据抽象是面向对象分析的核心原则。它强调把数据和操作结合为一个不可分割的单位,对象的外部只需要知道它做什么,而不必知道它如何做。,1.2.2 对象(object),对象是面向对象方法学中的一个核心概念。现实中的对象:现实世界中的一切事物。特性(1)有一个唯一的名字(2)有一组状态描述它的某些特性(3)有一组操作,每一个操作决定了对象的一种功能或行为;操作分两类:自身所承受的操作,施加于其他对象的操作面向对象方法学中的对象:由描述该对象属性的数据和可以对这些数据施加的所有操作封装在一起构成的统一体。在面向对象分析和面向对象设计中,通常:把对象的
4、数据称为属性把对象的操作称为服务或方法。,1.对象的形象表示,一个对象很象一台录音机。(1)录音机使用:使用者只能通过录音机与外界的界面(按钮)来操作它。(2)内部结构被封装:使用者无法看到内部结构(内部状态的数据和实现各个操作的代码)。,录音机,对象的特征-分析:当在软件中使用一个对象的时候,只能通过对象与外界的界面来操作它。对象与外界的界面也就是该对象向公众开放的操作。例如:C+语言中对象的公有的(public)成员函数。一个对象好象是一个黑盒子。表示对象内部状态的数据和实现各个操作的代码及局部数据,都被封装在这个黑盒子内部,在外面是看不见的,更不能从外面去直接访问或修改这些数据或代码。,
5、2.对象的定义_I,目前,对对象所下的定义并不完全统一,人们从不同角度给出对象的不同定义。定义1:(从程序设计的角度)对象是具有相同状态的一组操作的集合。,定义2:(从信息模拟的角度)对象是对问题域中某个事物的抽象,这种抽象反映了该事物的有关信息和对信息的交互能力。即对象是属性值和操作的封装。,定义3:(形式化的定义)对象=ID,DS,MS,MI【BNF】其中,ID是对象的标识或名字;DS是对象的数据结构;MS是对象中的操作集合;MI是对象能受理的消息名集合(即对外接口),2.对象的定义_II,总之,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有唯一标识它的名字,而
6、且向外界提供一组服务(即公有的操作)。对象中的数据表示对象的状态,一个对象的状态只能由该对象本身的操作来改变。,2.对象的定义_III,2.对象的定义_IV,小结:对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,3.举例_I,4.举例_II,属性,操作,名字,5.对象的分类_I,对象是对问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念。具体地说,大多数客观事物可分为下述5类:可感知的物理实体。例如:飞机、汽车、
7、书、房屋等。人或组织的角色。例如:医生、教师、雇主等。应该记忆的事件。例如:飞行、演出、访问等。,两个或多个对象的相互作用(通常具有交易或接触的性质)。例如:购买、纳税等。需要说明的概念。例如:政策、保险政策、版权法等。,5.对象的分类_II,1.2.3 面向对象的其他概念,类(Class)类是面向对象方法学中的一个基本概念。面向对象的所有操作均可归结为对类的操作。在面向对象方法学中,正是因为引入了类的概念,使得面向对象方法与面向过程方法有根本区别。1)定义:类就是对具有相同数据和相同操作的一组相似对象的定义。即:类是对具有相同属性和行为的一个或多个对象的描述。,2)特征:,类是一组具有相同数
8、据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。在一个类中,每个对象都是类的实例,它们都可使用类中定义的函数。每个类的实例具有自己的属性值。,3)举例1:,四边形类,两个四边形对象,数据属性,共同行为,类常常可看做是一个抽象数据类型(ADT)的实现。但更合适的是把类看做是某种概念的模型。Quadrilateral类的每个对象有相同的一组属性和操作。因此,类Quadrilateral提供了一个模板,表示了所有四边形对象。,3)举例2:“student”Object-class,“student”
9、类,“student”对象,数据属性,共同行为,类student提供了一个模板,表示了所有student对象。,每个对象有相同的一组属性和操作,2.实例(Instance),实例就是由某个特定的类所描述的一个具体的对象。类是建立对象时使用的“模板”,按照这个模板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。分析:“对象”这个术语,既可以指一个具体的对象,也可以泛指一般的对象,如类对象;“实例”这个术语,必然是指一个具体的对象。,C+中,要定义一个对象或实例,必须先建立一个这类对象的类。类与实例的关系:(1)组成类的对象均为此类的实例(2)同一类的不同实例具有如下特点:相同的操作集合
10、,相同的属性集合,但是:不相同的名称、属性值可能不一样,3.属性(Attribute),属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在C+语言中把属性称为数据成员(Data Member)。例如:Circle类中定义的代表圆心坐标x/y、半径r等数据,就是圆的属性。,4.方法(Method),方法就是对象所能执行的操作,也就是类中所定义的服务。对象的数据(状态)通过该对象执行自己的方法来改变。从而达到为其他对象服务的目的。例如:一个口技演员(对象)为了让观众(对象)笑(要求口技演员这个对象提供的服务)。口技演员必须通过收紧或放松自己的口型(
11、对象的操作)来改变从自己口里发出的声音的频率(对象自己的数据),从而实现为顾客提供的服务。,在C+语言中把方法称为成员函数(Function Member)。通常,一个函数对应一个操作,实现一个功能。例如:圆类中必须定义能够显示这个圆和能够隐藏这个圆的方法-show()/hide()(用以为其他对象提供给服务)。实现时,通过这两个函数来改变圆的颜色(圆对象数据)。,5.消息(Message),消息是对象之间相互请求、相互协作的途径,是要求某个对象执行其中某个操作的规格的说明。消息是一个实例对象与另一个实例对象的通信单元,发消息的目的:是要求某个实例对象执行类中定义的某个操作。目前在大部分面向对
12、象的编程语言中,消息其实就是函数(或过程)调用。,一个消息由下述三部分组成:接收消息的对象;消息选择符(也称为消息名);零个或多个变元。例如:MyCircle.Show(GREEN)其中:MyCircle是接收消息的对象的名字;Show是消息选择符(即消息名);GREEN是消息的变元。,OOPL三大特性:封装性继承性多态性,6.封装性(Encapsulation),封装性就是信息隐藏,把对象的实现细节对外界隐藏起来。封装就是将某事物包装起来,使外界不了解它的详细内情。OO的封装性把数据和实现操作的代码集中起来放在对象内部。使用一个对象的时候,只需知道它向外界提供的接口形式而无须知道它的数据结构
13、细节和实现操作的算法。,封装的特点:1)有一个清楚的边界。尽可能的隐藏对象的内部细节,对外形成一个边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。2)有确定的接口。只保留有限的对外接口使之与外部发生联系。这些接口就是对象可以接受的消息,其他对象只能通过这些接口向该对象发送消息。3)受保护的内部实现。实现对象功能的细节(全部属性和全部操作代码)结合在一起,形成一个不可分割的独立单位,不能在定义该对象的类的范围外进行访问。,封装是面向对象程序设计语言必须提供的机制。面向对象程序设计语言必须提供把对象的属性和操作结合在一起的程序手段,并且需要保证其他对象只能访问该
14、对象的公共服务(操作),这种机制称为面向对象程序设计语言的封装机制。,在C+中,提供类这种语言成分来实现封装。类是属性和操作的结合体,并且在定义类的属性(定义为数据成员)和操作(定义为成员函数)时,规定了它们的可见性(访问权限)。类中的成员有公有(public)、私有(private)和保护(protected)三种控制权限,它们具有不同的访问限制。声明为私有的成员只能由类自己的函数访问;保护成员可以由该类及其派生类的成员函数访问;公有成员构成了类的界面,容许所有的函数访问。只有那些定义为公有(public)的对象成员才能为外界所访问。通过将类中成员设置为具有不同的访问权限,实现了信息隐藏。,
15、7.继承(Inheritance),广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。例如:,Polygon多边形,Triangle三角形,Quadrilateral四边形,Rectangle长方形,基类/父类,子类,在程序设计中,如果已经建立了一个名为A的类,又想另外建立一个名为B的类,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为,显然不必再从头设计一个新类,而只需在类A的基础上增加一些新的内容即可。这就是面向对象程序设计中的继承机制。在C+中,从一个基类派生一个类包括了三个方面的工
16、作:吸收基类成员、改造基类成员和添加新的成员。,说明:继承是使用已有的类定义做为基础建立新类的定义的技术。继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。一个类除了具有该类所描述的性质外,还具有类等级中该类上层全部基类描述的一切性质。,C,B,A,继承的好处,能清晰体现类间的层次关系减少数据和代码的重复冗余度,提供可重用性软件修改方便软件开发不必每次从零开始,可以继承原有系统的代码继承是建立和扩充新类的有效手段总之,继承是支持OO方法中可重用性、可扩展性的有效手段。,8.多态性(Polymorphism),多态性就是同一界面,多种实现.同一函数或运算符定义有多个不同的版本。OO
17、P中的多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要实现这个行为。当对象接收到发送给它的消息时,根据该对象所属于的类动态地选用在该类中定义的实现算法。举例:进入父子铁匠铺打制镰刀,多态性有2种:编译时多态:重载,Template运行时多态:在类等级的不同层次中,相同的消息,被不同的类(属同一簇)的对象接收,产生了不同的行为。(举例:父子铁匠铺打制镰刀,dog表演)在C+语言中,运行时多态性是通过虚函数来实现的。,多态性优点,增加了OO软件系统的
18、灵活性进一步减少了信息冗余显著的提高了软件的可重用性、可扩展性,9.重载(Overloading),有两种重载:函数重载和运算符重载。函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。例如:希望从3个数中找出其中的最大数,可以进行如下的函数声明。int max(int a,int b,int c);double max(double a,double b,double c);long max(long a,long b,long c);,运算符重载是指同一个运算符可以施加于不同类型的操作数上面。例如:cout“2”;表示向屏幕输出字符串2 x2;表示将x中的二进制左移2位,本节小 结,抽象对象(定义、特点和分类)其他面向对象的概念:类、实例、属性、消息、方法、封装性、继承、多态性和重载。,