《面向对象的基本概念.ppt》由会员分享,可在线阅读,更多相关《面向对象的基本概念.ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 50年代为了让计算机作些有用的事情,人们必须充分利用计算机硬件的性能,精确地计算并分配存贮字和指令的时钟周期,程序结构是整体式如同一块铁板,随着计算机硬件的发展,人们逐渐认识到如同铁板一块般的整体式程序虽然是解决问题的最有效的方案,但并不是最佳方案,越来越注重程序的可理解性,提出了模块化的程序结构。怎样划分模块:(按)功能:每个模块做且仅做一件事;数据结构:每个模块仅容纳一个数据结构事件驱动:每个模块识别一个事件且对这 个事件做出反应;现实世界中的事物:每个模块对应现实世 界中的唯一一件事物(称之为 对象)。面向对象(Object-Oriented)不仅是一些具体的软件开发技术与策略,而且是
2、一整套关于如何看待软件系统与现实世界的关系以及如何进行系统构造的软件方法学。特点:特点:(1)面向对象的技术建立的模型与客观世界一致,因而便于理解(图3.1);(2)适应变化的需要,修改局限在模块中;(3)可复用性1.3.2对象(Object)一般意义来讲,对象是现实世界中存在的一个事物,可以是有形的,如一个桌子,可以是无形的,如一个开发项目。对象是构成现实世界的一个独立的单位,具有自己的静态特征(用数据描述)和动态特征(行为或具有的功能)。举例:张三、李四。软件系统中抽象地表示现实世界中的对象,数据表示特征,用操作表示对象的行为。例:人:姓名、年龄、职业等特征,跑、跳等行为;(1)定义:对象
3、是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和一组对属性进行操作的服务组成。例图 3.3 TomOperationsOperationsStore AgeAge?WalkDanc(2)信息隐藏:从对象外部看不知道对象的信息是怎样定义的,不知道操作是如何实现的,只知道有什么操作。信息:如年龄、性别,又称对象的状态。什么类型?长度?操作:用于存取信息,也可以与内部信息无关,如跳舞。(3)对象间的关系:例如,发票对象知道顾客对象,哪个顾客哪个单位要开发票。人可以知道另一个人,相互认识。两种关系:静态关系:长期存在的关系,两个对象相互知道对方是否存在。例:组成关系是一种静态
4、关系,Tom是由他的头、胳膊、腿和躯干组成。为什么将人划分成几个组成部分?便于理解,实现,可复用。(两个胳膊复用)动态关系:对象间互相进行通信。例:跳舞,一个人请另一个人一起跳舞,动态地建立关系。(4)如何定义信息和行为:图3.6 从对象内部看。(5)消息:对象发出的服务请求称为消息 (用来激发对象的一个行为)。1.3.3 类和实例 系统是由许多相互通信的对象组成的,对象有些共同的特征,根据特征可以将对象分组,称为类。如:Tom、Mary和John三个人有类似的行为和信息结构。因此可以定义Person类。(1)类的定义:类是某些对象的模板,抽象地描述了属于该类的全部对象的内部结构,同一类对象的
5、信息属性和操作。(2)实例的定义:实例是由类建立的对象。类描述了实例的结构,而实例的当前状态是由实例的执行的操作定义的。举例:图3.10 Tom、John和Mary是类Person的实例,不同的实例有自己的标识,具有各自的信息(状态)。由于操作可能不同,因此状态也不同。(3)怎样划分类 把类Person中共同的信息和操作提取出来,放在一个类中,实际上具有不同的属性。如由于性别不同,因此建立两个新类Male和Female。如图3.12 ,图3.13 。共同:这两个类有共同的信息和行为,Age,Friend,Address,Jump,Walk应该抽象出来,避免重复,这在以后讨论。不同:Dance,
6、Husband,Wife(4)怎样建立一个实例:由类的行为建立实例。图3.10 (相对于对象的行为)总结:类定义了对象的操作和信息结构,实例是由类建立的,定义了对象的状态。1.3.4 继承性(1)概念:类之间具有共性(信息结构和行为),抽取出来放在一个一般类中,如把Male和Female中共同的特性放在Person类中,不同的特性放在特殊类中分别描述,特殊类的对象拥有一般类的全部属性与服务,称作特殊类对一般类的继承。Male和Female类可以从Person 复用共同的描述,继承性往往被看作是软件复用的核心概念。(2)好处:易编程、易理解 代码短,结构清晰易修改 共同部分只要在一处修改即可易增
7、加新类 只须描述不同部分 术语:父类子类,一般特殊,祖先后代,基类派生类,直接父类,直接子类 表示:带箭头的虚线 父类不知道子类 子类知道父类(3)怎样建立一个好的继承层次 类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层,可能需要插在中间层,这样可能破坏原来的层次结构,或需要调整原来的层次结构。例:图3.14 上例中增加两个对象James和Lawrence都是男性的老人,他们与年青人有什么不同呢?跳舞的动作不同,比较慢。增加一个新类:Old Male与已有类的关系是什么样的?见图3.16 有三种方案:(a)Old Male和Male中有共性(
8、b)Old Male中修改Male中Dance的功能(c)新建一个类young Male,old Male与young Male中有不同的特性 到底选择哪一种方案,具体情况而定,第三种情况结构清楚,但要修改原有的类。第一种增加一个类old Male重复太多,概念不清楚,不可取;(不修改原有的类)第二种增加新类继承关系中Dance具有不同的行为,第三种只增加不同的部分,共同部分放在Male中,是可取的。但如再增加一类小男孩,则还会涉及修改Male。(不修改原有的类)权衡选择第二、三种。继承层次中增加的新类的4种方法:在继承类中,由下向上找一个合适的类作为父类;完全独立的一个类,不能在已有的类中继
9、承重新构造继承层次,见图3.17 。加ABF类,找不到一个合适的类作为直接父类,重新构造原来的层次。好处:层次结构清楚;问题:a找出更好的层次结构 b修改工作量较大。重新定义所需要的特征,称为重载(Overriding)。例图3.16(b)好处:容易且灵活地修改已有类;问题:在类的层次结构中一些操作具有同样的名字,但不同的语义(在不同类中),要知道操作的功能,必须向上找到定义操作的类(4)代码复用 通过继承性可以实现代码复用 建立类库(应用领域)当增加新类时,从类库中找到一个适合的类,从中继承,然后扩充或修改得到所需功能。(不必从0开始实现系统)(5)多继承 如果一个类需要用到多个已有类的特征
10、,可以从多个类中继承,称为多继承。这意味着一个类可以有多个直接的祖先。例如船屋是可以从房子和船这两个类继承得到一个类,从两个类中抽取共同的部分构成一个新的类,图3.19 ,重新构造类的结构。问题:继承层次结构不好理解。如果祖先中具有相同名字但不同定义的操作时,产生问题;到底继承的是什么操作;解决:用户必须选择某个祖先的定义或重新定义操作,图3.20 ,共同的祖先,重新定义过,名字冲突问题。1.3.5 多态性 对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。发送消息的对象可能不知道另一个对象的类。例如在上述例子中,一个人的朋友可以是男的,也可以
11、是女的,例如Tom的朋友可能是John或Mary,因此对于Male类的对象不知道朋友实例将属于哪一类。多态性意味着一个操作在不同类中可以有不同的实现方式。如Dance的实现Male和Female是不同的。(1)定义:多态性意味着消息的发送者不必知道接收实例的类,接收实例可以属于任何类。(2)动态绑定:只有发送消息时才与接收实例的一个操作绑定。(3)受限的多态性:实际上接收实例是受一定条件限制的。(4)好处:发送者只知道另一个实例可以执行某个行为,但不知道该实例属于哪个类。因此多态性使我们建立的系统很灵活,易扩充。如打印功能,打印某页到某页,发送print命令,打印设备可以是任意类型。可以是子类
12、的实例,增加一种新的打印设备,不必修改,发送打印命令的类也不必修改其它设备的类。1.3.6总结:(1)面向对象是一种建模的技术,由于它与人们认识世界的方法非常一致,所以建立的模型容易理解。(2)对象有类似性因而用类来描述;类描述了类似对象的行为和信息,封装性 使用者不需知道怎样实现,只要知道它的外部功能,因此修改可局限在类的内部,系统易维护。多态性,使对象可以不必知道与它通信的对象的确切的类,因此容易增加新类,易扩充系统功能,不需修改其它类使用继承性可以方便地复用已有代码,只需增加新代码,或修改已有功能时不必修改已有代码,只需定义新的行为;继承性必须正确使用,否则使系统的结构很难理解和不易维护
13、,因为类的相同名字的行为功能可能不同。结束HeadBodyBodyArmArmLegLegFigure 3.4 A model of a person can be composed with the objects head,legs,arms and body.TomTomInformationInformationAgeWifeFriendAddress.PartsPartsmyLeftlegmyRightlegmyHeadmyBodymyRightArmmyLeftArmBehaviorBehaviorStoreAgeAge?Jump Bend myLeftLeg and myRigh
14、tLeg Stretch myLeftLeg and myRightLeg Lift myRightArm.Walk.Dance.The inside of object Tom.Only the behavior for Jump is shown.Class personClass personInformationInformationAgeFriendAddress.PartsPartsmyLeftlegmyRightlegmyHeadmyBodymyRightArmmyLeftArmBehaviorBehaviorStoreAgeAge?JumpWalk.Dance.Tom,John
15、 and Mary are all instances of the class Person.Create an InstanceCreate an InstanceCreate myLeftLegcreate myRightLegCreate myHeadCreate myBodyInstance ofTomTomMaryMaryJohnJohnInstance ofParts:Parts:myLeg from class LegmyHead from class Head.Class BodyClass BodyClass HeadClass HeadClass LegClass Leg
16、 Instances of one class can recognize instances of another.The relevant classes are defined in the original class.Operation:StoreAgeJumpDanceWalk.Operation:StoreAgeJumpDanceWalk.Class MaleClass MaleClassClass FemaleFemaleinstance ofTomTomJohnJohnMaryMaryinstance ofinstance of Male and Female are sep
17、arate classes.InformationInformation:AgeHusandFrendAddress.PartsPartsmyLeftLegmyRightLegmyHeadmyBodymyRightArmmyLeftArm.BehaviorBehaviorJumpWalkDance Ask friend to Dance Jump Walk Jump Shake myHead Shake myBody Bend myRightLeg Stretch myRightLeg.Create an InstanceCreate an Instance.InformationInform
18、ation:AgeWifeFrendAddress.PartsPartsmyLeftLegmyRightLegmyHeadmyBodymyRightArmmyLeftArm.BehaviorBehaviorJumpWalkDance Jump Shake myBody Jump Shake myHead Jupm.Create an InstanceCreate an Instance.The inside of class Male and FemaleClass FemaleClass FemaleClass MaleClass MaleInformationInformation:Age
19、WifeFrendAddress.PartsPartsmyLeftLegmyRightLegmyHeadmyBodymyRightArmmyLeftArm.BehaviorBehaviorStoreAgeAge?Walk.Create an InstanceCreate an Instance.Class with inheritanceClass PersonClass PersonBehaviorBehaviorJumpDance.BehaviorBehaviorJumpDance.Class MaleClass MaleClass FemaleClass Femaleinheritsin
20、heritsStoreAgeAge?Walk.DanceJump MaleDanceJump Old MaleDanceJump FemalePersonPerson ins ins insStoreAgeAge?Walk.DanceJumpDanceJumpDance(new)ins insPersonPerson Female Male Old MaleStoreAgeAge?Walk.DanceJumpPersonPerson insDanceJump Male insDanceDance ins ins Old Male Young Male Female(a)(b)(c)A+BC=(
21、ABC)+E=(ABCE)+D=(ABCD)ABFWe WantinheritsinheritsinheritsA+B=(AB)inherits+C=(ABC)+F=(ABF)+D=(ABCD)+E=(ABCE)inheritsinheritsinheritsinheritsbecomes withrestructuringNew class addedWanted classExisting classes:ABCEFGAEWe want:restructuringAE+BC=(ABC)=(AE)+FG=(EFG)insinsinsinsNew classes Multiple inheritance.The middle class inherits the descriptions from two other classes.A(.A.)(.A.)(.A.)(.A.)insinsMore inheritance hierarchies(possibly redefining)?insins Which A to choose?Repeated inheritance.The same characteristic exists in two parents.How is this detected and which should be chosen?
限制150内