8 面向对象方法学概述_第1页
8 面向对象方法学概述_第2页
8 面向对象方法学概述_第3页
8 面向对象方法学概述_第4页
8 面向对象方法学概述_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象方法学引论面向对象方法学引论 2011-4-20v面向对象思想最初起源于20世纪60年代末的simula67语言。面向对象方法的基本要点首次在simula语言中得到了表达和实现。v80年代,位于美国加州的Xerox研究中心推出smalltalk语言及其程序设计环境,使得面向对象程序设计方法得到比较完善的实现,掀起了面向对象研究的高潮。v80年代中后期,面向对象的软件设计和程序设计方法已发展成为一种成熟有效的软件开发方法。相比而言,面向对象的分析技术发展得比较滞后。 第一节 概述 1.1 传统方法学 v传统方法学存在的问题 生产率提高的幅度远远不能满足需要 软件重用程度很低 软件仍然很难

2、维护 软件往往不能真正满足用户需要 v出现问题的原因 僵化的瀑布模型*某些类型的系统需求是模糊的*项目参与者之间存在通信鸿沟*预先定义的需求可能是过时的 结构化技术的缺点 *用这种技术开发出的软件,其稳定性、可修改性和可重用性都比较差。*结构化分析、设计技术的本质是功能分析。从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,层层分解下去,直至仅剩下若干个容易实现的子处理为止。v功能与数据分离的软件设计结构与人类的现实世界环境很不一样,和人的自然思维也就很不一致,因此对现实世界的认识与编程之间存在着一道很深的理解上的鸿沟。 v系统是围绕着如何实现一定的行为来进行的,当系

3、统行为易变,需要常常修改时,修改极为困难。 v在系统中模块之间的控制作用有重要影响时,也就是说,实际的控制发生的根源来自分散的各个模块之中时,由于在“好的模块结构”中的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错。v自顶向下功能分解的分析方法极大地限制了软件的可重用性。 1.2 面向对象方法学 v“面向对象”(Object-Oriented)是针对“面向过程”一词提出的,是从本质上区别于传统的结构化方法的一种新方法,新思路。vOO技术的基本原理是:按照问题域的基本事物实现自然分割,按人们通常的思维方式建立问题域的模型,设计尽可能直接自然表现

4、问题求解的软件系统。v为此,OO技术引入了对象(object)概念来表现事物,用消息(message)传递建立事物间的联系。用类(class)和继承(inheritance)作为适应人们一般思维方式的描述模型。用方法(method)表示作用在对象上的各种操作。 v建立在对象、消息、类、继承和方法等概念基础上的面向对象软件的基本特征是对象的封装性和继承性。v通过封装可以将对象的定义与对象的实现分开。这样,无论是对象功能的完善扩充,还是对象实现的修改,影响仅限于该对象内部,保证了面向对象软件的可构造性和易维护性。 v通过继承可以表达类与类之间的联系,大大减少了重复定义,同时也使系统的结构更加清晰、

5、易于理解和维护。 v早在1982年,Rentsch就曾预言80年代的面向对象程序设计就象70年代的结构化程序设计一样,每个人都喜欢用它,每个软件开发商都开发他们的软件支持它,每个管理员都要付出代价应用它,每个程序员都要以不同的方式实践它,但是没有人能清楚地讲清楚它。 第二节 基本概念 面向对象=对象+类+继承+通信v如果一个软件系统是使用这样四个概念设计和实现的,则可以认为这个软件系统是面向对象的。 2.1 对象(object)v一般说来,在系统分析和系统构造中,对象是对客观世界事物的一种抽象,是由数据(属性)及在其上的操作(行为)所组成的封装体。v可以用一个公式表示为:对象=属性+操作 对象

6、具有如下主要特点:*自治性 对于给定的输入,经过状态转换,对象能产生输出。*封闭性 对象的封闭性是指对象具有信息隐蔽的能力。*通信性 对象能够接收其它对象发来的消息,也能向其它对象发送消息。通信性反映了不同对象间的联系。上述特点分别刻画了对象不同方面的性质,自治性反映了对象独立计算的能力,封闭性和通信性说明对象是一个既封闭又开放的相对独立体。 2.2 类(class) v类是一组具有相同数据结构和相同操作的对象的集合。v类的定义包括一组数据属性和在数据上的一组合法操作,可以用一个公式表示为:类=(组)数据属性+(组)数据操作 类名 属性 操作 circle (x0,y0) r color Di

7、splay 2.3 属性(attribute) v每一对象的属性是一些有着确定值的,用于描述对象状态信息的数据。v属性一般只能通过执行对象的操作来改变。 2.4 消息(message) v消息就是用来请求对象执行某个处理或回答某些信息的要求,是连接对象的纽带。或者说,一个对象为实现其责任而与其它对象的通信称为消息。v消息通常由三个部分组成:接收消息的对象;消息选择符(也称为消息名);零个或多个变元。 2.5 服务(method,即操作、方法)v为了完成某一任务,一个对象所提供的并体现其责任的操作称为服务。属于同一类的所有对象共享相同的服务。2.6 继承(inheritance) v类之间的继承

8、关系是现实世界中遗传关系的直接模拟,它表示类之间的内在联系以及对属性和操作的共享。即子类可以沿用父类(被继承类)的某些特征。当然,子类也具有自己独有的属性和操作。v新类的定义可以是现存类所声明的数据、定义与新类所增加的声明的组合。在组合过程中,新类复用现存类的定义,而不要求修改现存类。 v继承的优点:是软件开发中复用概念的核心便于模块修改简化模块 2.7 多形(polymorphism)与动态连接(dynamic binding) v多形的本质是一个消息可以与不同的实例结合,而且这些实例属于不同类。 v具体的多形行为主要表现在以下方面:1)运算符重载 同一个运算符可作用于多种数据类型上;2)函

9、数名重载 相同的函数名可作用于不同的对象类上,并产生不同的行为效果;3)虚函数与动态联接 这是OO方法特有的动态性质。当将重载的函数名标识为虚函数时,该函数就有较大的灵活性。它既可以表示子类中的同名函数,也可表示父类中的同名函数。这种较大灵活性的关键在于允许在运行中才按照具体的数据类型和参量和确定选用哪一个函数,这种方式称动态联接方式。 第三节 面向对象的主要方法 vCoad/Yourdon的方法vRumbaugh等的OMT方法vBooch的方法vWirtf-Brock等的RDD方法v此外,还有ESA的HOOD方法、Shlear和Mellor的OOSA方法、Wasserman的OOSD方法、R

10、eenksang的OORASS方法、Embley的OSA方法、Gibon的OBA方法、Page-Jones和Weiss及Buhr的SYNTHESIS方法等 3.1 Coad与Yourdon的方法 vCoad与Yourdon的方法是在信息模型化技术、面向对象程序设计语言及知识库系统的基础上发展起来的,这个方法分为OOA和OOD两部分。 3.1.1 面向对象的分析(OOA)vCoad与Yourdon和其它描写面向对象方法的作者一样,认为OOA主要考虑与一个特定应用有关的对象及对象与对象之间在结构与相互作用上的关系。 1.OOA的任务1)形式地说明所面对的应用问题,最终成为软件系统基本构成的对象,还

11、有系统所必须遵从的,由应用环境所决定的规则和约束。2)明确地规定构成系统的对象如何协同合作,完成指定的功能。 v在OOA中,要建立分析模型来描述系统的功能第一个层次主要是识别类和对象,这是整个分析模型的基础。第二层和第三层是属性层和服务层,用以说明前面已识别的类和对象。第四层是结构层,OOA允许两种类型的基本结构:一是整体与部分结构,也叫组装结构,组装结构表示聚合,即由属于不同类的成员聚合而成新的类;二是泛化与特化结构,也叫分类结构。其中,特化类是泛化类的子类,泛化类是特化类的父类。分类结构具有继承性,泛化类和对象的属性与服务一旦被识别,即可在特化类和对象中使用。第五层是主题层,是一些类和对象

12、的特定组合表示,用来帮助和指导模型的读者。 人 男人 女人 分类结构 人 头 身体 胳膊 腿 组装结构 2.OOA的步骤 1)找到类和对象首先确定问题空间中包含哪些对象,有哪些操作,这些对象之间有什么关系,它们与操作又有什么关系。 对象应该是实际问题域中有意义的个体或概念实体,具有目标软件系统所关心的属性,还应该以某种方式与系统发生关联,即对象必须与系统中其他有意义的对象进行消息传递,并提供外部服务。有关对象命名的重要原则:a.使用单个名词或名词短语;b.对象名称必须简洁、精确、易于理解;c.尽量使用用户熟悉的标准词汇。 2)确定结构第一种结构是分类结构,代表了确定的类中的继承等级。另一种结构

13、是组装结构,即由属于不同类的成员聚合而成新的类。 3)定义主题 确定主题通过将类和对象划分成更大的单元来完成。主题是类和对象的组合。每个主题的规模按有助于读者通过模型理解系统来选择。 4)定义属性 对每个对象,确定划给该对象所需的属性。关键是识别与当前所处理的问题相关的属性。被确定的属性放到继承等级的正确层次。注意应避免冗余的或不正确的属性 5)定义服务对象怎样进行消息通信是用消息的联系来确定的。这些都用来指定某一个操作。综上所述,OOA大体上可以按照这个顺序进行。但是,分析不可能严格地按照预定顺序进行,大型、复杂系统的模型需要反复构造多遍才能建成。3.1.2 面向对象的设计(OOD) OOA

14、到OOD实际上是一个逐渐扩充模型的过程。面向对象分析主要模拟问题空间和系统任务;而面向对象设计则是对其进行扩充,主要是增加各种组成部分。OOA识别和定义的类/对象,是一些直接反映问题空间和系统任务的;而OOD识别和定义的类/对象则是附加的,反映需求的一种实现。Coad与Yourdon在设计阶段中继续采用分析阶段中提到的五个层次,他们认为这有助于从分析到设计的过渡。不同的是,在设计阶段中,这五个层次是用于建立系统的四个组成成分上。这四个组成成分是:问题论域,用户界面,任务管理和数据管理。 人机交互 问题域 数据管理 任务管理 主题层 类与对象层 结构层 属性层 服务层 问题论域部分包括与所面对的

15、应用问题直接有关的所有类和对象。 在其它的三个部分中,识别和定义新的类和对象。 1.问题域部分(PDC)的设计 OOA阶段得到的有关应用的概念模型描述了所要解决的问题 。在OOD阶段,主要是对OOA产生模型中的某些类与对象、结构、属性、操作进行组合与分解,或者增加必要的类、属性和联系。 1)复用设计 根据问题解决的需要,把从现有的类库或其它来源得到的现存类增加到问题解决方案中去。 某 OOA 中含 车辆 车牌 颜色 式样 生产日期 产地 车牌确认 类库中已有 车辆 OTS 车牌 车牌确认 车辆 车牌 颜色 式样 生产日期 产地 车牌确认 设计结果: 车辆 OTS 车牌 车牌确认 2)把问题论域

16、的专用类关联起来3)为建立公共操作集合建立一般类4)调整继承级别 2.用户界面部分(HIC)的设计 v通常在OOA阶段给出了所需的属性和操作,在设计阶段必须根据需求把交互的细节加入到用户界面的设计中,包括有效的人机交互所必需的实际显示和输入。1)用户分类 通常可将其分为外行型、初学型、熟练型和专家型四类 2)描述人及其任务的场景什么人、特点、期望软件用途、主要要求与喜好以及任务场景等。3)设计命令层尽量遵循用户界面的一般原则和规范,根据用户分析结果确定初步的命令系统,然后再优化。 4)设计详细的交互5)设计HIC(人机交互)类 3.任务管理部分(TMC)的设计 v任务是进程的别称,是执行一系列

17、活动的一段程序,或者说,任务是由目标软件系统中一段代码决定的处理行为。v任务管理主要包括任务的选择和调整。 1)识别事件驱动任务 一些负责与硬件设备通信的任务是事件驱动的,也就是说这些任务可由事件来激发,而事件常常是当数据到来时发出的一个信号。 2)识别时钟驱动任务 以固定的时间间隔激发这种事件,以执行某些处理。 3)识别优先任务和关键任务 根据处理的优先级别来安排各种任务。在系统中,有些操作具有高优先级,因此必须在很强的时间限制内完成;有些操作具有较低的优先级,可进行时间要求较低的处理。关键任务是对系统的成败起关键作用的处理,这些处理要求有较高的可靠性。 4)识别协调者 当有三个或更多的任务

18、时,应当增加一个附加任务,专门负责任务之间的调度、协同和仲裁。5)评审各个任务 6)定义各个任务定义任务的工作主要包括它是什么任务、如何协调工作及如何通信。任务的定义如下:vname(任务名)vdescription(描述)vpriority(优先级)vservicesincluded(包含的操作)vcommunication via(经由谁通信) 4.数据管理部分(DMC)的设计 数据管理部分提供了在数据管理系统中存储和检索对象的基本结构 设计数据管理部分的目的是,将目标软件系统中依赖开发平台的数据存取部分与其他功能分离,数据存取通过一般的数据管理系统实现,但实现细节集中在DMC中。这样既有

19、利于软件的扩充、移植和维护,又简化了软件设计、编码和测试的过程。 1)数据管理方法数据管理方法主要有三种v文件管理v关系数据库管理v面向对象的数据库管理 2)数据管理部分的设计数据存储管理部分的设计包括数据存放方法的设计和相应操作的设计 3.2 OMT(object modeling technique) OMT是美国通用电气公司在总结其内部多年来采用OO技术开发实践的基础上提出的一套系统开发方法学。OMT最早是由Loomis,Shan和Rumbaugh在1987年提出的,曾扩展应用于关系DB设计。J.Rumbaugh在1991年正式把OMT应用于OO的分析和设计。它以面向对象思想为基础,通过

20、构造一组相关模型(对象模型、动态模型和功能模型)来获得关于问题的全面认识(即问题领域模型),是在实体关系模型上扩展了类、继承和行为而得到的。 对象模型(object model)代表了系统的静态的、结构方面的特性。动态模型(dynamic model)代表了系统对象之间的时间的、行为的、控制方面的特性。功能模型(functional model)主要描述值与值之间的函数关系。v这三个模型从不同角度对系统进行描述,分别抓住了系统的一个重要方面,组合起来构成了对系统的完整描述。vOMT认为一个典型的软件过程是三个方面的合作:它的数据结构(对象模型)、它按时间顺序的操作(动态模型)和它所改变的值(功

21、能模型)。 v在分析阶段,应用领域的一个模型被建立,不考虑最后的实现。v在设计阶段,解决领域的结构加入模型中,明确系统中各个类的定义和相互关系以及各个类中的操作,并考虑到重用效率,重新设计一些类和关系。v在实现阶段,应用领域和解决领域的结构都被编码。 模型有两层含义:从系统的观点看v对象模型v动态模型v功能模型从开发阶段看v分析模型v设计模型v实现模型3.2.1 三种模型介绍1.对象模型对象模型描述了系统中对象的结构,即它们的标识、它们与其它对象之间的关系、它们的属性以及它们的操作。 对象模型为动态模型和功能模型提供了重要的框架,因为只有当事物变化时,动态模型和功能模型才有存在的意义。 对象模

22、型用包含对象及对象的关系图表示。 类名 属性 操作 对象名 属性 操作 类 对象 类名 属性 操作 一个类及属于该类的对象 v类之间的联系称为关系。类之间的关系在OMT符号中用一条线表示。对象图在关系线的端点用特定的符号表示多元性。 (0 或 1) (0 或多) (1) (1) (1 或多) (2,4 或 18) (3 到 5) (一对一关系) (多对多关系) 1 1+ 2,4,18 3-5 对象模型中类之间的三种基本关系以OMT符号来表示 1)相关关系 公司 公司名 地址 工作关系 工资 职务 人员 姓名 地址 (a) 2)包容关系 文档 段落 语句 3)继承关系 工人 车工 钳工 纺织工

23、vOMT建立一个对象模型的步骤大致如下:确定对象类定义一个DD,包括类、属性和关系的描述增加类之间的关系增加对象和联系的属性用继承组织和简化对象类用场景测试访问路径如有需要重复以上各步基于相近的关系和相关的功能将成组的对象形成模块 2.动态模型动态模型描述系统中与时间有关的方面以及操作执行的顺序,包括引起变化的事件、事件的序列、定义事件序列上下文的状态、以及事件和状态的主次。动态建模中的主要概念是事件和状态。一个对象的状态是指对象所拥有的属性值和连接关系。从一个对象到另一个对象的单个消息叫作一个事件。 在系统的一个特定的执行中发生的一系列事件叫一个场景。 打电话者提起话机 开始拨号音 打电话者

24、拨数字(6) 拨号音停止 打电话者拨数字(8) 打电话者拨数字(2) 打电话者拨数字(2) 打电话者拨数字(6) 打电话者拨数字(6) 打电话者拨数字(8) 打电话者拨数字(8) 受话方电话机开始响铃 打电话者的电话中出现铃声 受话方回应 受话方电话机停止铃声 打电话者的电话中铃声消失 双方电话连通 受话方挂机 双方电话断开 打电话者挂机 打电话者 电话线 受话方 打电话者提起话机 拨号音开始 拨号(6) 拨号音停止 拨号(8) 拨号(2) 拨号(2) 拨号(6) 拨号(6) 拨号(8) 拨号(8) 电话中铃声 电话铃声响 回应 电话铃声停 电话中铃声停 电话连通 电话连通 受话方挂机 连结断

25、开 连结断开 打电话者挂机 打电话的场景 电话的事件跟踪图 v动态模型由多个状态图组成,每个用来描述一个类的重要动态行为,并表明整个系统的活动方式,不同类的状态图通过共享的事件组成一个动态模型。v状态图的结点是状态,标有事件的线是转移。v转移的箭头指向接收事件后的目标状态。 提机 空闲 挂机 拨号音 正在拨号 数字(n) 超时 超时 挂机 非法电话号码 记录异常 连接 合法电话号码 数字(n) 受话话机忙 忙音 短促忙音 线路忙 响铃 路由 连通 受话话机回应 断开 受话话机挂起 消息已记录 在案 超时 电话线的状态图 空闲空闲 挂机 拨号音拨号音 do:发拨号声发拨号声 提机 正在拨号正在拨

26、号 数字(n) 超时 超时超时 do:发超时声发超时声 挂机 非法电话号码 记录异常记录异常 do:处理消息处理消息 连接连接 do:查找查找 合法电话号码 数字(n) 受话话机忙 忙音忙音 do:发普通忙发普通忙 短促忙音短促忙音 do:发短促忙发短促忙 线路忙 响铃响铃 路由 连通连通 受话话机回应 断开断开 受话话机挂起/线路断开 消息已记录 在案 超时 加上了活动和行为的电话线的状态图 挂机 挂机 挂机/线路断开 挂机 挂机 v建立一个动态模型的步骤准备典型的交互序列的场景确定对象之间的事件和为每个场景准备一个事件跟踪图为每个系统准备一个事件流图为每个有重要的动态行为的类开发一个状态图

27、检验状态图之间的共享的事件的一致性和完整性。 3.功能模型对象模型指出事件要发生在什么方面,动态模型指出什么时候发生,功能模型则指出要发生什么。功能模型表示怎样从输入值得到输出值。包括函数、映射、约束和功能性依赖。功能模型由多个DFD组成,它们表示从外部输入,通过操作和内部数据存储,到外部输出这样一个流。DFD不表示控制或对象结构信息,这些分别属于动态模型和对象模型。功能是由动态模型的动作引起,并在对象模型里表示对对象的操作。一个DFD包括转换数据的过程,移动数据的DF,生产和消费数据的角色对象,以及被动地存储数据的数据存储对象。v建立一个功能模型的步骤确定输入和输出值需要时用DFD表示功能的依赖性描述每个功能干什么确定限制,指定优化准则 4.三个模型之间的关系对象模型、动态模型和功能模型都包含了同

温馨提示

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

评论

0/150

提交评论