《面向对象分析与设计复习提要》由会员分享,可在线阅读,更多相关《面向对象分析与设计复习提要(56页珍藏版)》请在金锄头文库上搜索。
1、面向对象分析与设计复习提要软件学院2010.12.25.第一部分 面向对象技术的 基本概念和基本方法1.1 软件开发方法的发展计算机诞生之后,计算机技术一直处于高速发展状 态,计算机科学技术的发展由原来只依靠硬件的发展 逐渐变为更多地依靠软件的发展。事实上,软件技术 的发展经历了多代历程。 l第一代(20世纪50-60年代),是以FORTRAN和 ALGOL等编程语言为标志的算法技术时代。那时,程序设计全靠人们发挥创造才能,全靠技巧 和窍门。基于这种算法技术的软件生产率非常低,程 序很难看懂,甚至程序员自己写的程序过一段时间后 自己也看不懂,这给软件的修改、维护带来极大的困 难。于是60年代末
2、出现了 “软件危机”。l第二代(20世纪70年代末开始到80年代盛行 的),以PASCAL、COBOL等编程语言和关系数 据库管理系统为标志的结构化系统分析和设 计技术。为了克服软件危机,人们主要从如下两个方向 做了努力: l 一是从管理的角度改进软件开发方法,提出了软件工程方法,大大改善了软件的质量与可维护性 。 l 二是侧重于对软件开发过程中分析与设计方法的研 究和改进 。这方面的重要成果就是在70年代出现 了风靡一时的结构化开发方法结构化系统分析 和设计技术。 l 。l 为了改进基于算法技术的软件开发方法,人们提 出了软件工程方法,使软件开发工作从只考虑程 序的编写技巧转变到利用软件工程
3、的方法,使软 件系统的生产过程遵循一系列的规范化步骤:计划需求分析设计编码 测试 运行维 护 每个阶段都有其明确的任务,任务完成后都将 交付给下一阶段一定规格的文档,作为下一阶段 开发的依据。这种开发过程直观上就像一级一级 的瀑布,所以系统开发生命周期也称为“瀑布模 型”。软件工程方法大大改善了软件的质量与可 维护性。 瀑布模型的缺点:1)在项目各个阶段之间极少有反馈。只有在项 目生命周期的后期才能看到结果。 2)由于软件开发过程是一个非常复杂的过程, 在软件开发的每一阶段都有可能留下隐患和错 误,如果等到系统已经开发完毕,在测试阶段 发现了重大问题,这时的返工就会造成人力、 物力、财力及时间
4、上的巨大浪费。当软件需求 不明确或不准确时容易出现问题。 l其他模型: 原型模型 增量模型 螺旋模型。l第三代 (80年代开始至今还盛行的)以 Smalltalk、C+等为代表的面向对象软件开发 方法(OO)。 (问题1:面向对象软件开发方法发展的动因是什么?) 传统的结构化程序设计以算法为核心, 把本来密切相关的数据和对数据的操作分离开 来,很难保持数据和操作的一致性,其软件开 发方法也不符合人们的自然思维习惯,设计出 来的软件系统其解空间与问题空间不一致,致 使程序难以理解、修改和扩充,最终导致程序 复杂性问题和软件危机。为了超越程序复杂性 障碍,克服软件危机,人们提出了面向对象软 件开发
5、方法。(问题2:面向对象软件开发方法的优点有哪些?)面向对象开发方法一改过去传统的以功能分析 和功能分解为基础的面向过程的结构化分析与设计 方法,面向对象开发方法模拟人们理解和处理客观 世界的方式来分析问题,把系统视为一系列对象的 集合,其面向对象的设计又将分析的结果映射到某 种面向对象实现工具的结构上,使映射过程有着比 较直接的对应关系,使分析者、设计者和编程者都 可使用相同的概念,从而使面向对象的软件开发能 比较自然地模拟客观世界的活动,使问题描述空间 与解空间在结构上尽可能一致。因此,采用面向对 象方法可以更有效地开发大型软件系统。面向对象 方法的封装、继承、多态等机制不仅支持软件复用
6、,而且使软件维护工作可靠有效,可实现软件系统 的柔性制造,更好地克服软件危机。因此,它已成 为成熟的广为采用的软件开发方法。到20世纪末, 面向对象软件工程逐渐发展成熟,特别是统一建模 语言(UML)标准的形成和广泛使用,使面向对象软 件开发方法已成为软件开发的主流技术。1.2 面向对象的基本概念 (1)对象:对象是客观实体的抽象表示, 是由描述对象的属性数据和对这些数据进 行的操作行为两部分组成。 (2)类 l 类是具有相同属性和行为的对象集合的抽象 描述; l 类的内部包括属性和行为两个主要部分。 (3)实例: 类是对具有相同属性和行为的一 组对象的抽象描述。因此,类可作为一种用 户自定义
7、类型和创建对象的样板,而按照这 种样板所创建的一个个具体对象就是类的实 际例子,通常称为实例。(4)消息消息就是请求某个对象执行它所包含的某 项处理操作的指令信息。实质是对某个类对 象的操作函数的调用,即方法的调用 。例如, student S1;S1.display()是一个消息。一个消息一般由三部分组成:接收消息的对 象名、操作函数名、函数的参数。(5)面向对象技术的三个基本特征 l封装性 l继承性 l 多态性(6) 封装性所谓封装就是把对象的属性和行为结合成 一个独立的单位,使外界不能直接访问或修改 这些数据和代码,外界只能通过对象提供的接 口函数来改变或获取对象的属性数据,这就实 现了
8、消息隐蔽。(7)继承性如果在一个已定义的类上,增加一些特殊属性或 操作,可以形成一个新的类,这个类不仅继承了前一 个类的全部特征,而且具有新的特性,因此可看作前 一个类的特例,是对前一个类的继承。前一个类称为 父类,新产生的类叫做子类。通过继承关系可形成一 种类层次结构,叫做继承结构。(10) 多态性l定义:在不同类中,可用相同的函数名实现功能不 同的函数。 l多态性的优点:高层代码(算法)只需写一次,低层便可多次复用,可提高程序设计的灵活性和效率。1.3 面向对象的分析方法 1、面向对象的分析(OOA)是面向对象软件工程 方法的第一个环节,包括一套概念原则、过程 步骤、表示方法、提交文档等规
9、范要求。 2、OOA的基本任务是:运用面向对象方法,对 问题域和系统责任展开分析,正确认识其中 事物和它们之间的关系,发现描述问题域和 系统责任所需要的对象和类,并定义类的属 性和服务,以及它们之间所形成的结构和连 接,最终的目的是产生一个符合用户需求, 并能直接反映问题域和系统责任的OOA模型及 其详细说明,为后续的面向对象设计(OOD) 和面向对象编程实现(OOP)提供指导。OOA 与OOD能够自然地过渡和结合,这是面向对象 方法的一个优点。3、面向对象分析的大致步骤如下: (1)分析问题域,明确描述用户需求 l 系统问题域说明:应用系统的业务范围 l 系统边界说明:确定系统与用户之间接口
10、 l 系统功能说明:系统需要实现的功能 (2)确定对象和类即分析确定并标识构成系统的对象,再对对 象进行抽象分类。先把系统看成由一些子系 统组成,把每个子系统划分成一个主题,主 题是由一组类和对象组成。(3)确定系统各部分的分类和组成结构 l 第一是按照一般特殊关系,标识类间的继承关系 ,确定分类结构; l 第二是按照整体部分关系,标识一个对象是有哪 些对象组成,确定组装结构。 (4)找出并建立每个对象及其相互之间的联系 即以 应用为基础来标识对象,定义对象的内部特征(属 性和方法),建立实例连接和消息连接。消息连接 体现了对象间的通信关系和接口协议形式。 (5)进一步协调和优化模型中各个组成
11、部分(包括 类/对象)的性能和相互关系,精炼侯选的类/对象 ,使系统成为由不同部分组成的最小集合。 (6)分析和设计模型中每个组成部分(包括类/对象 )的功能实现细节,检查分析模型的一致性和完整 性。6、OOA模型的建立过程可以划分为五个层次: (1)对象-类层划分待开发系统及其环境信息的基本构造单位,标出反 映问题域的对象和类,并用符号进行规范的描述,用信息提 供者熟悉的术语为对象和类命名。 (2)属性层定义对象类和某些结构中的数据属性 。 (3)服务层要表示对象的服务或行为,就是要定义类上的操作。列出 对象需要做什么(即方法),也给出对象间的消息连接(并 应以箭头指示消息从发送者到接受者)
12、。 (4)结构层识别系统中对象之间的结构关系。当一种对象是另一种 对象的一部分时,用整体-部分关系表示;当一个类属于另 一个类时,用类之间继承关系表示。 (5)主题层将复杂的系统划分为更小的子系统,每个子系统 都由相关类或对象组成,称为一个主题,这样有便 于大系统的管理。1.4 面向对象的设计初步 1、 虽然OOA与OOD分两个阶段进行,但它 们是紧密结合的,可以很自然地从OOA过 渡到OOD,这正是面向对象方法的一个重 要优点。 OOA与OOD的主要区别是: OOA与问题域更接近, OOD与系统的实 现更接近。 2、 OOD模型可采用扩展OOA模型的方法来得到 OOD模型,即在OOA模型横向
13、划分5个层 次的基础上,将目标系统纵向划分成4个 部分:问题域部分、人机交互部分、任务 管理部分、数据管理部分,如下图所示。3、建立OOD模型包括4个部分的工作: (1)问题论域部分:在OOA模型的基础上,细化分析结 果,设计一组构成底层(即数据层)应用模型的类和 对象。 (2)人机交互部分:设计用户界面模型,该用户界面模 型中的类和对象提供实现人机交互操作的接口函数 。用户界面设计包括 菜单设计、窗口设计、输入/ 输出界面设计等等。 (3)任务管理部分:建立一些类,用于处理子系统之 间的通讯、并发、活动调度等问题。例如,在多用 户交互系统中,几个用户同时与系统进行交互,无法 预知哪一个用户是
14、下一个输入者,这些交互活动是 并行发生的,需要建立一些专门的类对象来处理; 在空中交通控制系统中,系统同时监控着数架飞机, 有许多活动在同时发生。对于诸如此类的并发问题 ,需要建立一些专门的类对象来处理。(4)数据管理部分:提供数据管理系统中存 储和检索对象数据的基本方案,包括对永久 性数据的访问和管理方式。数据管理设计包 括: 数据存放设计:数据存放设计选择数 据存放的方式(文件存放、关系数据库表格 存放或面向对象的数据库存放)。 设计相应的操作。为每个需要存储的 对象和类增加用于存储管理的属性和操作, 在类和对象的定义中加以描述。4、什么是优良的OODOOD的关键工作是确定对象、类及其联系
15、 。一个优良的OOD应具备如下基本条件: (1)继承耦合应尽可能紧密 (2)类与类之间的耦合应该很松散 (3)信息隐藏某个类的数据实现细节对于别的类来说应该是隐藏 的 (4)设计应该具有最优的可重用性 (5)尽力使类、对象和方法的定义具有简单性 (6)对所设计的类和类族,应注意保持其协议或接口 的稳定性 (7)类的层次结构设计规模适度,不要太深或太浅 (8)系统整体规模的最小化习题 1. 试述面向对象技术的发展动因和优点 。 2. 面向对象设计技术具有哪些特性(或机制) ? 3. 解释下列术语的含义: 类 对象 消息 方法 继承性 多态性 封装性 泛化 特化 抽象 分类 4、建立一个校园信息管
16、理系统,其主要功能就 是对在校人员(包括学生和教师)的信息资料 进行管理。 (1)试着按OOA步骤做系统分析; (2)画出类的层次图。第二部分 面向对象程序设计一、复习内容 第2章 C+语言基础 第3章 类与对象的构造设计 第4章 继承性与派生类 第5章 多态性与虚函数 第6章 文件的输入与输出二、复习要点 0 C+语言程序结构例如,编程打印一个55点阵 :#include “stdio.h“class matrix private:int rown;int colm;public:void show() int i,j;for (i=1;i Getage(); 运行结果: person student 20 delete student delete person3、多态性机制与虚函数的定义 l 多态性是指在类层次结构的相同类或不同类中,可 用相同的函数名实现功能不同的操作,从而可以使 用相同的调用方式来调用这些具有不同功能的同名