第12章面向对象开发概述_第1页
第12章面向对象开发概述_第2页
第12章面向对象开发概述_第3页
第12章面向对象开发概述_第4页
第12章面向对象开发概述_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、第12章 面向对象开发概述Information System计算机学院 陈丰 1第12章 面向对象开发概述学习目标:I.面向对象的基本思想II.类与对象、消息、属性、操作以及封装、继承、多态等基本概念III. 面向对象开发的几种主要方法12 面向对象开发概述12.1 面向对象基本思想 12.3 面向对象的特性 312.4 面向对象开发的主要方法12.2 面向对象的相关概念 12.1 面向对象基本思想面向对象基本思想 面向对象方法于20世纪60年代末提出,较为完善的面向对象分析和设计方法出现在八十年代中后期。为了克服早期的方法的不足,这时人们已经开始考虑使用面向对象方法来开发系统 早期的方法只

2、使用一种系统的视角作为构造块,而没有容纳其他视角。结构化分析和设计集中于将功能作为系统的构造块。在信息建模方法中(实体关系模型)构造块是实体,但在该方法中用来满足系统需求的功能被完全忽略掉了。两种方法都没有处理对动态行为的捕获,声明性语义(规则)以及例外处理机制都被完全忽略了。 为了克服传统开发方法的不足,面向对象方法解决问题的思路是从现实世界中的客观对象客观对象(如人和事物)入手,尽量运用人类的自然思维方式(抽象、运用人类的自然思维方式(抽象、分类、继承、聚合、封装、关联等)分类、继承、聚合、封装、关联等)来构造软件系统,这与传统的结构化方法从功能入手和建模方法从信息入手是不一样的。在面向对

3、象方法中,把一切都看成是对象。 以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路。 结构化方法:图书基本信息读者基本信息图书借阅信息图书预约信息等数据库借书还书预约查询图书信息查询借阅信息管理图书基本信息等函数和过程u面向对象的方法:图书管理员图书读者现实世界中的对象 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。 对象既可以描述客观存在的事物,也可以表示由人主观构造的抽象观念。对象可以是具体的、有形的物,也可以是无形的事物或概念。 客观空间客观空间软件空间软件空间主观空间主观空间扳手软盘吊车显微镜图片汽车事物事物/实体实体概念概念对象对象学生图书教师管理员

4、数据:姓名、学号、班级、入学年份、宿舍、电话等功能:借书、还书、预约、查询图书信息、查询借阅信息、交罚款等数据:书名、ISBN号、出版社、出版日期、作者等功能:告知图书状态、查询借阅时间、查询借阅该书读者信息等数据:姓名、工作证号、所在学院、入职年份、职称、电话等功能:借书、还书、预约、查询图书信息、查询借阅信息、交罚款等数据:姓名、工作证号、入职时间功能:图书入库图书出库办理借书/还书收罚款软件世界中的对象 可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。 面向对象基本思

5、想可以概括为:(1 1)从现实世界中客观存在的事物出发来构建软件系统,强调直接以问题域)从现实世界中客观存在的事物出发来构建软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征和要解决的具体问题域语境,把它们抽象地表示为软件系统中的对象,作特征和要解决的具体问题域语境,把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。为软件系统的基本构成单位。 ( (对象(对象(objectobject) (2 2)用对象的属性表示事物的静态特征;用对象的服务(操作)表示事物的动)用

6、对象的属性表示事物的静态特征;用对象的服务(操作)表示事物的动态特征(态特征(属性属性(attributeattribute)与)与服务服务(operationoperation)(3 3)对象的属性与服务结合为一体,成为一个独立的、不可分的实体,对外屏)对象的属性与服务结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。(对象的蔽其内部细节。(对象的封装封装(encapsulation)(encapsulation))(4 4)对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象)对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的

7、类的一个实例。(分类的抽象描述,每个对象是它的类的一个实例。(分类(classification)(classification))(5 5)类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可)类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可见的。见的。( (类的封闭性类的封闭性) )(6 6)复杂的对象可以用简单的对象作为其构成部分。(聚合)复杂的对象可以用简单的对象作为其构成部分。(聚合(aggregation)(aggregation))(7 7)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。)通过在不同程度上运用抽象的原则,可以得到较一般

8、的类和较特殊的类。特殊类继承一般类的属性与服务,从而简化系统的构造过程及文档。(特殊类继承一般类的属性与服务,从而简化系统的构造过程及文档。(继承继承(inheritance)(inheritance))(8 8)通过关联表达类之间的静态关系()通过关联表达类之间的静态关系(关联关联(associationassociation)(9 9)对象之间通过消息进行通信,以实现对象之间的动态联系。()对象之间通过消息进行通信,以实现对象之间的动态联系。(消息消息(messagemessage) 对象 类 关联和链 聚合12.2 面向对象的相关概念面向对象的相关概念对象对象是现实世界中某是现实世界中某

9、个实际存在的事物,个实际存在的事物,它可以是有形的(比它可以是有形的(比如一辆汽车),也可如一辆汽车),也可以是无形的(比如一以是无形的(比如一项计划)。对象是构项计划)。对象是构成世界的一个独立单成世界的一个独立单位。它具有自己的静位。它具有自己的静态特征和动态特征。态特征和动态特征。一个对象由一组一个对象由一组属性和对这组属属性和对这组属性进行操作的一性进行操作的一组操作构成。组操作构成。对象标识对象标识属性属性操作操作对象对象 对象标识对象标识就是对象的名字就是对象的名字 属性属性是用来描述对象状态特征是用来描述对象状态特征的一个数据项。的一个数据项。 操作操作(服务)是用来描述对象(服

10、务)是用来描述对象动态特征的一个操作序列。动态特征的一个操作序列。对象具有如下特点: 以数据为中心。以数据为中心。操作围绕对其数据所需要的处理来设置,不设置与这些数据无关的操作,而且操作结果与当时所处状态(数据值)有关。 对象是主动的。对象是主动的。对象是进行处理的主体,不能从外部直接处理对象的私有数据,而必须通过它的共有接口向对象发消息,请求它执行某个操作,处理它的私有数据。 实现了数据封装。实现了数据封装。对象的私有数据完全被封装,对外隐藏。对私有数据的访问只需要知道数据取值范围和可以施加的操作,而无法知道数据的具体结构和实现操作的算法。 本质上具有并行性。本质上具有并行性。不同对象各自独

11、立地处理自身数据,彼此通过发消息完成通信,本质上有并行工作的属性。 模块独立性好。模块独立性好。对象以数据为中心,操作围绕对其数据所需的处理设置,没有无关操作,内聚性强;完成对象功能所需的数据和方法封装在对象内部,与外界联系少,耦合性松。 类是具有相同属性、操作、关系和语义的对象集合的描述。类为属于该类的全部对象提供了统一的抽象描述,由类名、属性和服务三个主要部分组成。 对象是类的实例。 属性是类中所定义的数据,是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。(c+中称为数据成员) 例如:学生类中定义的学号、姓名等的数据成员,就是学生的属性。 12.1.4 属性属性 操作

12、(operation)是由类的所有实例提供的一个功能或服务。只有通过这些操作,其他对象才能够获得或处理存在一个对象中的信息。 操作为类提供了一个外部界面;该界面呈现了类的外部视图,而没有显示它的内部结构或其操作是怎样实施的。这种对外部视图隐藏对象内部实施细节的技术被称为封装(encapsulation),或信息隐藏。 例如:“学生”类有一个操作“借阅图书”,该操作为“学生”类提供了一个外部界面,而没有显示借阅操作是怎样完成借阅图书的过程。 类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。方法描述了对象执行操作的算法(c+中称为成员函数)。 12.1.5 操作操作 关联用来描述类之间

13、的静态联系,可以包含关联的名称、关联的方向和多重性等属性。 如上边所示:关联名称:驾驶关联方向:单向 链是关联的实例,用于描述具体对象之间的某种联系。 聚合刻画了现实世界事物的构成关系 ,是一种具有整体-部分语义的关联,也就是说,聚合是关联的一种,只是普通关联的语义没有聚合那么强 。 举例,车是一个整体实体,轮胎、发动机、车身、车座等是整辆车的一部分。 封装和信息隐藏 继承/泛化 消息通信 多态性12.3 面向对象的特性面向对象的特性 是指对象实现信息隐藏,对外界隐藏了对象的实现细节。使用对象时,只需要知道它向外界提供的接口形式,无法知道它的数据结构细节和实现操作的算法。 对象具有封装性的条件

14、如下:有一个清晰边界,所有私有数据和实现操作的代码都封装在这个边界内,从外部看不见,也不能直接访问。有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。受保护的内部实现。实现对象功能的细节(私有数据和代码)不能够在定义该对象的类的范围外访问。 信息隐藏有两方面含义:对象属性只有通过对象对外发布的接口访问;外部对象只关心接口的访问方法,不关心接口的内部实现; 降低软件复杂性,让其他对象不用关心它们不必关心的细节; 减少修改对象引起的“波动效应”:对象内部的修改对外部的影响很小,只要接口不变,里面怎么变都没有关系; 实现接口和实现的分离。 继承也称泛化,是面向对

15、象描述类之间相似性的一种重要机制 指能够直接获得已有的特征和性质,而不必重复定义它们在类的继承层次结构中,位于较高层次的类叫做一一般类般类/ /超类超类/ /父类父类,而位于较低层次的类叫做特殊类特殊类/ /子类子类。继承使得特殊类自动地拥继承使得特殊类自动地拥有或隐含地复制一般类的有或隐含地复制一般类的全部属性、操作和关联全部属性、操作和关联,根据需要添加自己的属性和方法。 “教职工”继承了“人员”的属性和方法,因此教职工除了能执行自身的“挣工资”方法,还继承了“人员”的“进校”和“离校”方法。 继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一。

16、需要注意的是,只有当两个类之间是 “is a”, “is like” 或 “is a kind of ”关系时,才可以使用继承。由于“学生” “is a” “人员”, “教职工” “is a” “人员”,因此“学生”可以继承“人员”、“教职工”可以继承“人员”。人员教师学生研究生本科生交通工具轮船客运工具火车客轮客运列车 继承可分为单继承和多继承。如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承多继承,否则就是单继承单继承。 继承是可传递的,可以跨越任意层次。子类继承其所有祖先类的属性、操作和关联。u对象与对象之间并不是彼此孤立的,它们之间存在联系,在面向对象的系统中,

17、对象之间的联系是通过消息传递进行的。u消息是对象之间相互请求和相互协作的途径,是要求某个对象执行其中某个功能操作的规格说明。一个对象通过向另一个对象发送消息来请求其服务。u一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。 一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。 例如:MyCircle是一个半径4厘米,圆心位于(100,200)的Circle类的对象,也就是Circle类对象的一个实例。当要求它以蓝色在屏幕上

18、显示自己时,则应该发送下列消息: MyCircle.Show(BLUE)MyCircle.Show(BLUE)MyCircle是接受消息的对象名称;Show是消息名;括号内的BLUE是消息的参数。30 “多态”来自希腊语,意思是“有多种形式”。 在收到消息时,对象要予以响应,不同的对象收到同一消息可不同的对象收到同一消息可产生多种不同的结果产生多种不同的结果,即会有多种不同形式,这就是多态这就是多态。在使用多态时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样,同一消息就可以由不同的对象调用不同的方法来响应,从而产生不同的响应结果。 多态的实现受到继承性的支持,利用类层次的

19、继承关系,把具有通用功能的消息存放在高层次,而实现这一功能的不同的行为放在较低层次,则在这些低层次上生成的对象就能给通用消息以不同的响应。 例如:面向对象绘图程序中,在父类“多边形”中定义了一个服务“绘图”,但并不确定执行时绘制一个什么图形。子类“正多边形”和“轴向矩形”都继承了多边形类的绘图服务,但其功能却不相同:一个是画正多边形,一个是画带坐标轴的矩形。正多边形和轴向矩形接收到请求绘图消息时各自执行不同的绘图算法。 多态性是面向对象的特征之一。 多态是指允许不同类的对象对同一消息作出不同的响应。 实现多态,有二种方式:覆盖,重载。 覆盖:是指子类重新定义父类的函数;-override 重载

20、:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。-overload一Booch的OOD方法二Coad/Yourdon的面向对象分析与设计(OOA/OOD)方法三Rumbaugh的对象建模技术(OMT)四Jacobson的面向对象软件工程(OOSE) 12.4 面向对象开发的主要方法面向对象开发的主要方法 Booch最先描述了面向对象的软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解的设计方法。 Booch方法在许多领域取得实际应用。它的最大特点是将几类不同的图表有机结合起来,以反映系统的各个方面是如何相互联系又相互

21、影响的。 Booch认为开发过程为螺旋上升模式,每一次重复的步骤如下: 从应用的问题域中发现类和对象; 分析类和对象的功能、行为,确定其属性和操作; 找出类、对象之间的关系; 说明每个类和对象的界面和实现。12.4.1 Booch 的的OOD方法方法Booch方法表示系统模型:系统模型静态模型动态模型逻辑模型物理模型类图对象图状态图交互作用图模块图进程图 Coad-Yourdon方法严格区分了面向对象分析OOA (OO Analysis)与面向对象设计OOD (OO Design)。 第15章 面向对象分析详细介绍OOA方法 12.4.2 Coad(科德科德)/Yourdon的的OOA-OOD

22、方法方法 主题层 subject level类-对象层object结构层 structure属性层 attribute服务层 serves图12.4 五层模型体系 OMT方法由James Rambough建立,它采用三种模型来描述分析与设计,分别是对象模型、动态模型和功能模型对象模型、动态模型和功能模型。 对象模型对象模型的描述手段是对象图。它用来刻画对象的静态结构及相互间的关系。用对象模型来建模就是确定问题域的类和相关的属性。 动态模型动态模型主要采用状态转换图(Statecharts)来描述,它用来刻画对象的动态行为,并定义和识别对象的行为。 功能模型功能模型主要表达系统内部数据流的传递和处理的过程。数据流图适用于描述系统的功能模型。 12.4.3 James Rumbaugh的的OMT 方法方法Jacobson提出的面向对象软件工程(OOSE,Object Oriented Software Engineering)将面向对象的思想贯穿到软件工程中,目的是为了得到一个能适应变化、健壮性好和维护性强的系统。OOSE采用五个模型来完成其实现目标系统的过程:u需求模型(RM)。用来捕捉用户的需求,主要建模手段有用例图、问题域对象模型和人与系统的接口界面。u分析模型(AM)。该模型定义一个健壮的、可扩展的系统的基本结构。OOSE定义了三种对象类型:

温馨提示

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

评论

0/150

提交评论