第五章面向对象基本概念.ppt
《第五章面向对象基本概念.ppt》由会员分享,可在线阅读,更多相关《第五章面向对象基本概念.ppt(48页珍藏版)》请在三一文库上搜索。
1、1,第五章 面向对象基本概念,2,提纲,5.1 什么是面向对象? 5.2 为什么要面向对象? 5.3 面向对象基本概念 5.4 面向对象软件工程 5.5 面向对象基本原则,3,5.1 什么是面向对象?,人类认识世界的两个最基本的法则: 分类:任何事物都有其所属的类别,认识事物时首先识别类;(抽象) 组成:复杂事物都是由简单事物组成的。(聚集) 面向对象基本思想: 任何事物都是对象,客观世界是由各种互相联系的对象组成的; 每个对象都有自己的内部状态和运动规律; 不同对象之间相互作用构成了各种各样不同的系统。,4,5.2 为什么要面向对象?,1. 面向对象技术采用主体-动作模式来刻画世界,符合人类
2、认识世界的规律。 对于面向对象的用户界面,总是先选定一个界面对象,如一段正文或者一个图标,然后在这个对象上进行操作; 对于面向对象的程序设计语言,先指定接受消息的对象,然后才在对象上执行消息指定的操作; 对于面向对象的分析和设计,也是先确定系统中的实体对象,然后再确定在这些对象上可能实施的操作。 传统的面向过程的程序设计语言最关心的是过程,而过程实施的对象是作为过程参数传递的。面向对象中的数据是主动的,面向过程中的数据是被动的。 人类认识客观世界时也是先主体后动作的。,5,5.2 为什么要面向对象?,程序设计方法学要求分析、设计和实现一个系统的方法尽可能地接近认识一个系统的方法。 人类在认识和
3、理解现实世界的过程中,普遍运用着三个构造法则: (1)区分对象及其属性,例如,区分一棵树和树的大小或空间位置关系。 (2)区分整体对象及其组成部分,例如,区分一棵树和树枝。 (3)不同对象类的形成及区分,例如,所有树的类和所有石头的类的形成和区分。,6,5.2 为什么要面向对象?,构造程序常用的方法如下: 功能分解法: 功能分解=功能 + 子功能 + 功能界面 功能分解需要经验 功能及其子功能只是间接地反映问题的实质,即使分析员认为功能划分清楚了,仍然无法验证功能集合是否精确完整地表达了问题需求。 功能经常发生变化,功能的大小(粒度)如何选择? 程序算法(为主)数据结构(为辅)wirth定律
4、问题空间和解空间不一致,7,5.2 为什么要面向对象?,数据流方法 数据流方法数据流数据转移数据存储数据字典加工说明 将世界映射为数据流和加工 类似于事件及对事件的处理 着眼于数据的变换(IPO),容易验证需求描述的准确性,不是简单的功能划分。 分析的时候强调数据流,但是设计的时候强调功能,这样分析和设计之间必然进行转换。因此,问题空间和解空间仍然不一致。,8,5.2 为什么要面向对象?,信息模型方法(实体关系图,语义数据模型) 信息模型方法实体实体属性实体关系抽象实体关联实体 没有描述实体的服务 没有描述实体之间发送消息的动态行为,只描述了静态的关联。 扩展ER图才描述实体的分类和组成结构
5、面向对象方法 面向对象方法对象(属性及其服务)分类继承消息 对象将属性和服务封装在一起 直接从问题空间映射为解空间,9,5.2 为什么要面向对象?,系统的易变性和稳定性 功能数据流实体对象(过程抽象数据抽象) 需求容易变; 外部界面容易变; 数据属性容易变; 问题空间中的对象是稳定的。 面向对象将系统变化限制在对象范围内,并加以控制,变化对系统的影响范围小。,10,5.2 为什么要面向对象?,对象工程的wirth定律 程序(算法)(数据结构) 程序(算法数据结构) 对象(算法数据结构) 程序 对象对象对象 面向对象并不排除功能划分,只不过功能划分的角度是站在外部使用者角度的,而且这些功能最终要
6、分配到主体对象上。,11,5.2 为什么要面向对象?,3. 模块化要求 (1)模块定义 软件被划分成若干可单独命名和编址的部分,它们被称作模块,这些模块相互连接组成满足应用需求的软件系统。模块化是软件对付复杂问题所应具备的关键特性。 (2)模块的特征 模块的基本特征是抽象和实现信息隐藏。模块分模块界面和模块体两部分。模块对外的联系和相互作用只能通过模块接口进行。模块体是模块的具体实现细节,对外是不可见的。 抽象和信息隐藏正是面向对象的主要特征。 (3)模块化原则 可分解性:降低系统的复杂程度;模块应该具备一定的层次结构。 可组合性:组合的模块中有些是可以复用的;模块必须具备较高的通用性和适用性
7、,具备规范的接口,易于组装。 可理解性:模块必须具有完整的语义特征,易于理解。 面向对象正好满足模块化的要求。,12,5.2 为什么要面向对象?,4. 软件复用的支持 对象技术使软件复用更臻完善和规范:对象封装和继承可以很好地支持软件复用。 对象封装允许应用开发者将对象模块视作黑匣子,通过界面去理解和操作对象,而不去关心实现细节;(接口复用) 对象继承容许对象实现复用具有相同特性的其它对象的代码,而不要去重复开发。(代码复用) 基于对象的统一的语义模型,对象技术可提供统一的机制将对象模块组装在一起,极大地复用已有的对象,满足各种应用需求。除了各种可复用的公共对象模块外,信息化社会的进步还要求人
8、们开发满足各种应用需求的领域对象。(对象复用),13,5.2 为什么要面向对象?,5. 软件维护要求 软件维护需要对软件作部分的修改,这种修改应该是方便的,而且必须保证维护后软件的可靠性。这就对软件开发方法提出了较高的要求。 软件开发过程不同阶段应该采纳相同的系统模型,使得不同阶段之间的信息不会因为转移而发生变形;如果发生变形,软件的追踪性就无法得到保证,软件的验证非常困难。面向对象的系统开发各阶段都是使用统一的建模方法。 企业信息系统必须适应环境的经常性变化,应该根据企业内部的真实对象对系统进行建模,这样当系统的功能发生变化时,只需要对真实对象的功能进行改变,而其接口可以不发生变化。,14,
9、5.3 面向对象基本概念,对象(object) 定义:对象是对问题域中某个实体的抽象(映射到计算机领域)。这里的实体既可以是物理实体,也可以是逻辑或者人为概念上的实体。 对象是一个封装体,将对象的属性及其操作封装在一起。 对象是一台自动机。对象属性集合表示对象的状态,对象的状态由对象的操作改变(当接收到其他对象发来的消息时)。 并行性是对象的本质特征。(对象间的并行性、对象本身的并行性),15,5.3 面向对象基本概念,类(class) 定义:是对具有相同属性和行为的一组对象的描述。 在程序设计语言中,类是一种抽象数据类型。 具体对象是类的实例。 抽象类:用来定义协议。不具备直接的具体的对象实
10、例。 实例(instance) 定义:按照类模板建立起来的具体对象就是实例; 实例是一个具体的对象。(对象有泛指的含义),16,5.3 面向对象基本概念,接口(interface) 对象声明的每一个操作需要指定操作名、作为参数的对象和返回值类型,这就是所谓的操作的型构( signature )。 对象操作所定义的所有对外提供服务的操作型构的集合被称为该对象的接口( interface )。 对象接口描述了该对象所能接受的全部请求的集合,任何匹配对象接口中型构的请求都可以发送给该对象。 在面向对象系统中,接口是基本的组成部分。对象只有通过它们的接口才能与外部交流,如果不通过对象的接口就无法知道对
11、象的任何事情,也无法请求对象做任何事情。 对象接口与其功能实现是分离的,不同对象可以对请求做不同的实现,也就是说,两个有相同接口的对象可以有完全不同的实现。 当给对象发送请求时,所引起的具体操作既与请求本身有关又与接受对象有关。支持相同请求的不同对象可能对请求激发的操作有不同的实现。发送给对象的请求和它的响应操作在运行时刻的连接就称之为动态绑定(dynamic binding)。,17,5.3 面向对象基本概念,类型(type) 类型是用来标识特定接口的一个名称。 一个对象可以有许多类型,并且不同的对象可以共享同一个类型。 对象接口的某部分可以用某个类型来刻画,而其他部分则可用其他类型刻画。两
12、个类型相同的对象只需要共享它们的部分接口。,类型和类之间有什么关联呢?,18,5.3 面向对象基本概念,类型和类之间的关联 类是对象的构造模板,类型是对象的操作型构集合。因此,类型规定了对象所能处理的消息集合。 类是类型的基础,类型靠类来定义。,19,5.3 面向对象基本概念,抽象类(abstract classs) 所有的对象都是通过类来实例化的,但是反过来却不是这样。并不是所有的类都是用来实例化对象的。 如果一个类中没有包含足够的信息来实例化一个具体的对象,这样的类就是抽象类。 抽象类往往用来表征对问题领域进行分析、设计得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
13、如:对圆、三角形进行抽象形成的图形概念。 抽象类在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。只能通过派生类实例化对象。 在面向对象领域,抽象类主要用来进行类型隐藏。 可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。,20,5.3 面向对象基本概念,抽象类和接口的区别:,abstract class Demo abstract void method1(); abstract void method2(); ,interface Demo void
14、method1(); void method2(); ,1.抽象类可以有自己的数据成员,也可以有非abstract操作成员;接口的操作成员全部是abstract的,而且一般没有数据成员,即使有也只能是static final的,不能修改。 2.抽象类和接口都可以实现DBC(Desing By Contract)的设计思想; 3.接口是一种特殊的抽象类; 4.抽象类定义了一种继承关系,接口定义了一种契约关系。 5.Java中,只能从一个抽象类派生子类(单继承),但是可以有多个类实现一个相同的接口。,21,5.3 面向对象基本概念,消息(message) 对象之间相互作用构成系统,那么如何相互作用
15、呢?通过发送消息。 消息是发送对象为了激活接收对象执行某一个功能的唯一手段。 消息接收对象的标识消息名参数 方法(method):对象的操作成员 属性(attribute):对象的数据成员,22,5.3 面向对象基本概念,继承(inheritance) 继承是类实现可重用性(避免代码的重复)和可扩充性(同一个类可以扩充应用到不同的场合)的重要特征; 一个类可以定义为另一个更一般类的特殊情形,一般类是特殊类的父类,特殊类是一般类的子类; 继承是is-a的关系,如:卡车是一个汽车,因此,子类的实例也是父类的实例。从实现的角度看:子类类型变量可以赋值给父类类型变量,反之不行。从这个角度来讲,一个变量
16、就具备多种类型:静态类型(声明的时候)、动态类型(运行的时候)。,23,5.3 面向对象基本概念,子类可以覆盖(override)父类的操作,因此,子类可以接管父类对请求的处理。 覆盖不能破坏父对象的语义,否则会破坏is-a关系。 继承是一种白盒(white-box)复用,是在编译阶段确定的,因此破坏了封装性,直接的后果就是:父类的任何变化都对子类有影响。 单继承和多继承,24,5.3 面向对象基本概念,多态性(polymorphism) 多态性(多形):一个对象发送消息给另一个对象的时候不需要知道接受消息的对象具体所属的类。换句话说:一个消息可以和多个对象结合,而且这些对象属于不同的类。 从
17、实现的角度看:一个消息的处理方式在不同的类中可以有不同的实现方式。 当对于一个接口有多种实现方式的时候就要用到多态性的概念。,25,5.3 面向对象基本概念,例: Figure fig; Rectangle rect; Circle cir; Triangle tri; 变量fig的静态类型是Figure、rect的静态类型是Rectangle、cir的静态类型是Circle、tri的静态类型是Triangle。 按照继承的“is a”语义,子类对象也是父类对象,因此,figrect;figcir;figtri;都是合法的。,26,5.3 面向对象基本概念,当系统对象发送一个draw消息给fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 面向 对象 基本概念
链接地址:https://www.31doc.com/p-2571139.html