软件工程第9章 面向对象的软件开发技术概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

18
(6)多态性(Polymorphism) 当同样的消息可以被送到一个父类的对象和它的子 类的对象上时,被称作多态性。也就是说,在类等级的 不同层次中可以共享(公用)一个行为(方法)的名字, 然而,不同层次中的每个类却各自按自己的需要来实现 这个行为,并得到不同的结果。同一个操作(方法)、 函数或过程可以用不同类型的参数调用实现不同的结果。 多态即一个名字可具有多种语义。多态性机制不仅增加 了面向对象软件系统的灵活性、可理解性和可维护性, 进一步减少了信息冗余,而且显著提高了软件的可重用 性和可扩充性。
第9章 面向对象的软件开发技术 概述
在面向对象的程序设计方法出现之前,传统的程序 设计方法大都是面向过程的(少数也有面向数据结构 的)。面向过程的程序设计结构清晰,它在历史上为缓 解软件危机作出了贡献。面向过程的程序设计方法是以 功能分析为基础的,它强调自顶向下的功能分解,并或 多或少地把功能和数据进行了分离。换言之,在采用这 种方法开发系统时,不管是在模型设计中还是在系统实 现中,数据和操作都是分开的。对用这种设计方法设计 出的系统而言,
1
模块独立性较差,模块之间的耦合度较高,对一个 模块的修改可能会造成许多其他模块功能上的改变。因 此,系统的理解和维护都存在一定的难度。具体而言, 面向过程的程序设计方法存在如下问题: ①操作与数据分离的软件设计结构与人类(所认识) 的现实世界环境很不一样,和人的思维方式不相一致。 因此,人们对现实世界的认识与程序设计之间存在着一 道理解上的鸿沟。 ②系统是围绕着如何实现一定的行为来进行的,当 系统行为易变、需要常常修改时,修改工作颇为困难。
10
3)实例 实例是由某个特定的类所描述的一个具体的对象。 类描述了实例的结构,而实例的当前状态是由实例的执 行的操作定义的。如图9.5所示,李明是类讲师的实例, 不同的实例有自己的标志,具有各自的信息(状态)。 由于操作可能不同,因此状态也不同。
11
图9.5 类与对象的关系
12
(3)消息和方法(Message and Method) 消息是系统运行过程中对象之间互相传递的请求服 务的信息。消息实际上就是一段数据结构,它通常含有 下述4部分的内容:接收消息对象的标识,请求的服务 名称,输入参数和应答信号。 对象间的通信是通过消息传递来实现的。消息传递 是对象间的一种通信机制,某一对象在执行相应的处理 时,如果需要,它可以通过传递消息请求其他对象完成 某些处理工作或回答某些信息;其他对象在执行所要求 的处理活动时,同样可以通过消息传递与别的对象通信。 因此,在面向对象程序设计中,程序的执行是靠在对象 间传递消息来完成的,如图9.6所示。
6
图9.2 对象
7
图9.3 对象的属性集合
8
图9.4 封装了属性和操作的对象
9
(2)类和实例(Class and Instance) 1)类的概念 类是对一个或几个相似对象的描述。类是具有相同 (或相似)属性和操作的对象的集合,类是对象的抽象, 而对象是类的具体化。换句话说,类是对象的模板,而 对象是类的实例(Instance)。 2)类的层次 一个类的上层可以有超类(Superclass),下层可 以有子类(Subclass),形成一种层次结构。超类也称 基类,子类也称派生类。这种类之间的结构关系主要有 两种:一般与特殊结构关系和整体与部分结构关系。
15
图9.7 单重继承
16
图9.8 多重继承
17
(5)封装性(Encapsulation) 封装是面向对象的一个重要概念。封装是一种数据 组织的构造方式,是一种信息隐蔽技术。其含义是,为 了实现信息隐蔽而把对象的全部属性内容和服务的实现 过程结合成为一个独立的实体(即:对象),用户只能 见到对象封装界面上的信息,对象内部对用户是隐蔽的。 也就是说,用户只知道某对象是“做什么”的,不知道 “怎么做”。封装将外部接口与内部实现分离开来,用 户不必知道行为实现的细节,只须用消息来访问该对象。
19
(7)属性(Attribute) 是类中所定义的数据,它是对客观世界实体所具有 的性质的抽象。类的每个实例都有自己特有的属性值。 在C++语言中把属性称为数据成员。例如,Circle类中 定义的代表圆心坐标、半径、颜色等数据成员,就是圆 的属性。
2
③当系统中模块之间的控制作用有重要影响时(亦 即在实际的控制发生的根源来自分散的各个模块之中 时),由于在“良好模块结构”中的模块间的控制作用 只能通过上下之间的调用关系来进行,这样会造成信息 传递路径过长、效率低、易受干扰甚至出现错误。如果 允许模块间为进行控制而直接通信,那么结果是系统总 体结构混乱,从而难于维护。 ④用这种方法开发出来的系统往往难以维护,主要 因为所有的函数都必须知道数据结构。 ⑤自顶向下功能分解的分析方法大大限制和降低了 软件的易重用性,导致对同样对象的大量的重复性工作, 从而降低了开发人员的生产率。
13
图9.6 消息传递
14
(4)继承性(Inheritance) 继承是表达类与类之间相似性的一种机制。继承的 含义是“自动地拥有”或“隐含地复制”。即:在已定 义类B(称为父类)的基础上,创建一个新类A(称为子 类),当类A不但具有类B的属性,而且还具有自己的独 特属性时,这时称类A继承了类B,继承关系常称“即是” (is a)关系。 当类A继承类B时(如图9.7所示),就表明类A是类 B的子类,而类B是类A的超类。子类A由两部分组成: 继承部分和增加部分。继承部分是从B继承来的,增加 部分是专为A编写的新代码,因此继承具有传递性。
3
图9.1 两种程序设计方法开发程序的差别
4
9.1 面向对象的概念
“对象”一词最早出现在Simula语言中,后来成为面 向对象方法学中最基本概念。本节介绍该概念以及面向 对象的其他概念。
5ቤተ መጻሕፍቲ ባይዱ
(1)对象(Object) 在现实生活中,一般认为对象是行动或思考时作为 目标的各种事物。对象所代表的本体可能是一个物理存 在,也可能是一个概念存在。例如一枝花、一个人、一 项计划等。在使用计算机解决问题时,对象是作为计算 机模拟真实世界的一个抽象,一个对象就是一个物理实 体或逻辑实体,它反映了系统为之保存信息和(或)与 它交互的能力。
相关文档
最新文档