《软件工程 第七章 面向对象的分析及设计课件》由会员分享,可在线阅读,更多相关《软件工程 第七章 面向对象的分析及设计课件(36页珍藏版)》请在金锄头文库上搜索。
1、面向对象的分析与设计,第7章,7.1 面向对象分析,第7章,面向对象分析(Object Oriented Analysis,OOA)是软件开发过程中的问题定义和需求分析阶段,这一阶段最后得到的是对问题领域的清晰、精确的定义。OOA的目标是完成对所需求解问题的分析,确定目标系统所要做的工作,定义所有与待解决问题相关的类,并建立系统的模型。OOA的核心思想是利用面向对象的概念和方法为软件需求建造模型,以使用户需求逐步精确化、一致化、完全化。为了达到这一目标,必须完成以下任务: (1)与用户进行充分沟通,全面理解和分析用户需求,明确所开发的软件系统的职责,形成文件并规范地加以表述; (2)识别解决问
2、题的对象集合及对象间的关系; (3)定义类(包括定义其属性和操作)并建立类间的层次关系; (4)通过建立模型来表示对象之间的关系及行为特性。,7.1.1 面向对象分析的目标和任务,7.1 面向对象分析,第7章,7.1.2 面向对象分析的过程,7.1 面向对象分析,第7章,1.分析需求文档 系统分析通常是从一个需求文档(或称需求陈述)和用户一系列的讨论开始的。大多数需求陈述都是有二义性的、不完整的甚至不一致的。通过分析可以发现和改正需求文档中的歧义性、不一致性,剔除冗余的内容,挖掘潜在的内容,弥补不足,从而使需求文档更完整、更准确。分析过程中,系统分析员除了要反复多次地与用户讨论沟通外,还应调研
3、、观察和了解现有的类似系统,从而快速地建立一个原型系统,通过在计算机上运行原型系统,使得分析员和用户尽快交流和相互理解,从而能更正确地、更完整地提取和确定用户的需求。,7.1.2 面向对象分析的过程,7.1 面向对象分析,第7章,2.需求建模 系统分析员根据所提取的用户需求,深入地理解用户需求,识别出问题域内的对象,并分析它们之间相互的关系,抽象出目标系统应该完成的任务,并用OOA模型准确地表示出来,即用面向对象观点建立对象模型、动态模型和功能模型。OOA模型是OOD的基础,它应该准确、简洁地表示问题。通过建立模型,可以避免理解上的片面性,提高目标系统的正确性和可靠性,在此基础上,编写出面向对
4、象的需求规格说明书。 3.需求评审 需求规格说明文档经用户、领域专家、系统分析员和系统设计人员以及其他有关人员评审、并进行反复修改后形成定稿,该文档将成为面向对象设计的依据。,7.1.2 面向对象分析的过程,7.1 面向对象分析,第7章,面向对象建模是OOA的关键。OOA的模型要表示出系统的数据、功能和行为三方面的基本特征,因此通常需要建立三种模型,分别是对象模型、动态模型和功能模型。其中: (1)对象模型描述系统的数据结构,它是用来描述系统包含的对象及对象之间关系的模型; (2)动态模型描述系统的控制结构,它是用来确定各个对象之间交互及整体的控制结构的模型; (3)功能模型描述系统的功能,它
5、是用来描述系统要实现的功能的模型。,7.1.3 面向对象分析的三种模型,7.1 面向对象分析,第7章,1.对象模型的五个层次 复杂问题(大型系统)的对象模型由五个层次组成,即主题层、类|对象层、结构层、属性层和服务层,如图7-3所示。,7.1.4 对象模型的层次,7.1 面向对象分析,第7章,2.OOA的五项活动 OOA对象模型的五个层次对应着OOA过程中建立对象模型的五项活动。这五项活动是: 确定类|对象、识别结构、识别主题、定义属性、定义服务。 需要说明的是,这五项工作完全没有必要顺序完成,也无需在彻底完成一项工作以后再开始另外一项工作,在分析过程中并不需要严格遵循自顶向下,逐步求精的原则
6、。五项活动可以同时(并行)处理,也可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理。例如,当系统分析员在确定类|对象时,想到了该类应该包含的一个服务,于是把这个服务的名字写在服务层,然后又返回到类|对象层,继续寻找另外的类|对象。,7.1.4 对象模型的层次,7.1 面向对象分析,第7章,3.OOA的主要流程 面向对象分析大体上按照如图7-4所示的顺序进行。,7.1.4 对象模型的层次,7.2 建立对象模型,第7章,OOA的核心是确定问题域中相关的对象,找出这些对象是个重要而复杂的过程。一般采用基于词汇分析的方法:从目标系统的描述开始,找出其中的名词作为候选对象类,此外,还可
7、找出其中的动词作为候选方法(即后面要介绍的服务),然后产生一个由对象(名词)和方法(动词)构成的表格,作为词汇分析的初步结果,最后从中选出确定的真正的对象类。如图7-5所示。,7.2.1 确定对象和类,7.2 建立对象模型,第7章,采用系统词汇法确定对象类,并进行建模的具体做法如下: (1)确定对象类 (2)准备数据词典 (3)确定关联 (4)确定属性 (5)使用继承来细化对象类 (6)完善对象模型,7.2.1 确定对象和类,7.2 建立对象模型,第7章,主题是一种关于模型的抽象机制,起一种控制作用。引入主题有助于分解大型项目以便成立工作小组来承担不同的主题任务。主题有两种表示形式,如图7-7
8、所示。,7.2.3 确定主题,7.2 建立对象模型,第7章,所谓服务是在接收到一条消息后所要进行的加工。定义服务时,首先定义行为,然后定义实例的通信。值得说明的是,确定服务和消息,只有在建立了动态模型和功能模型之后,才可能最后确定对象类的服务。本教材为保持案例的连续性,故将服务和消息在此介绍。 确定一个类中的服务,主要取决于该类在问题中的实际作用以及求解过程中承担的处理责任,确定的原则如下: (1)基本的属性操作服务。即类中应提供的访问、修改自身属性值的基本操作。这类操作属于类的内部操作,可不必在对象模型中显式表示。 (2)事件的处理操作。动态模型中状态图描述了对象应接收的事件(消息),类和对
9、象中必须提供处理相应消息的服务,这些服务用于修改对象的状态(属性值)并启动相应的服务。,7.2.4 确定服务和消息,7.2 建立对象模型,第7章,(3)数据流图中处理框对应的操作。功能模型中的每个处理框代表了系统应实现的部分功能,而这些功能都与一个或几个对象中提供的服务相对应。因此,要仔细分析状态图和数据流图,以便正确地确定对象应提供的服务。 (4)利用继承机制优化服务集合,减少冗余服务。应尽量抽取相似的公共属性和服务,以建立这些相似类的新父类,并在类的不同层次中正确定义各个服务。,7.2.4 确定服务和消息,7.3 建立动态模型,第7章,动态模型描述系统的动态行为,表现对象在系统运行期间不同
10、时刻的动态交互。 下列三个因素有关: (1)状态。状态是对象在其生存周期中的某个特定阶段所具有的行为模式,它是对影响对象行为的属性值的一种抽象。状态规定了对象对输入事件的响应方式。对象对输入事件的响应,既可以执行一个或一系列动作,也可以是仅仅改变对象本身的状态。状态有持续性,占用一段时间间隔。 (2)事件。事件是一个触发行为,是引起对象状态转换的控制信息,是引起对象从一种状态转换到另一种状态的事情的抽象。事件没有持续的时间,是瞬间完成的。 (3)行为。行为也称服务,是指对象在某种状态下所做的一系列处理操作,行为是需要消耗时间的,7.3 建立动态模型,第7章,1.构建事件追踪图 要建立一个事件追
11、踪图,通常首先要编写脚本。脚本是系统执行某个功能的一系列事件。脚本通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以包括发生在此期间内系统所有的内部事件。,7.3 建立动态模型,第7章,7.4 建立功能模型,第7章,功能模型主要用来说明系统内部数据是如何传送和处理的,表示变化的系统的“功能”性质。功能模型描述了系统“做什么”,它更直接、明确地反映了用户对目标系统的需求。建立功能模型有助于软件开发人员更深入地理解整个问题域,改进和完善自己的设计。通常在建立对象模型和动态模型之后再建立功能模型。 在UML中,用用例图描述用例模型,用例图包含系统、行为者、用例、用例之间的关系等元
12、素。其中:系统是一个提供用例的黑盒子,可用方框表示;行为者是与系统交互的角色或其他外部系统;用例是一个完整的功能,完成系统内部的计算及与行为者的交互,它对应于对象模型中的类所提供的服务;行为者与用例之间的关系用直线连接,表示两者之间有交换信息,称为通信联系。,7.4 建立功能模型,第7章,用数据流图建立功能模型的主要步骤如下: (1)确定输入和输出值; (2)用数据流图表示功能的依赖性; (3)具体描述每个功能; (4)确定对象的约束; (5)确定功能优化的准则。 功能模型中的数据流图往往形成一个层次结构。在这个层次结构中,一个数据流图中的过程(即处理)可以由下一层的数据流图作进一步说明。,7
13、.4 建立功能模型,第7章,7.5 面向对象设计,第7章,1.面向对象分析与面向对象设计的关系 面向对象设计(Object Oriented Design,OOD)是根据面向对象分析中确定的类和对象设计软件系统。从OOA到OOD是一个逐步建立和扩充对象模型的过程。 OOA是分析用户需求并建立问题域模型的过程,是解决系统“做什么”问题的;OOD则是根据OOA得到的需求模型,建立求解域模型的过程,是解决系统“怎么做”问题的。 OOA主要是模拟问题域和系统任务,而OOD则是对OOA的扩充,主要是增加各种组成部分。具体来说,OOA识别和定义类和对象。这些类和对象直接反映问题域和系统任务。而OOD识别和
14、定义其他附加类和对象,它们反映需求的一种实现,当然,也可以交替进行这两个阶段的工作。从OOA到OOD是一个逐渐扩充模型的过程,分析和设计活动是一个多次反复迭代的过程。,7.5.1 面向对象设计概述,7.5 面向对象设计,第7章,2.面向对象设计的基本模型 OOD是在OOA模型的基础上建立对象模型的过程,两个阶段同样是建立对象模型,但侧重点不同,OOA建立问题域对象模型,而OOD建立求解域的对象模型。因此OOD模型同样也由主题、类|&|对象、结构、属性和服务等五个层次组成,并且每个透明层在逻辑上都划分为四个子系统: 问题域子系统(PDC)、人机交互子 系统(HIC)、任务管理子系统(TMC)和数
15、据 管理子系统(DMC),具体面向对象设计的 五个层次、四个组成部分构成的典型的面 向对象设计模型如图7-12所示。,7.5.1 面向对象设计概述,7.5 面向对象设计,第7章,3.面向对象设计的主要工作 面向对象设计技术进行问题解决方案的设计工作的大致做法是,它将问题的解决方案表述为:“类关联”的形式,其中,类包括问题空间(域)类、用户界面类(即人机交互类)、任务管理类和数据管理类,是从设计的角度出发对问题解决方案中的对象的抽象和描述,关联则用于描述这些类和类之间的关系。,7.5.1 面向对象设计概述,7.5 面向对象设计,第7章,1面向对象设计的准则 在进行面向对象设计的过程中,应该遵循软
16、件设计的基本原理,此外,还要考虑面向对象的特点。面向对象设计准则主要包括模块化、抽象、信息隐藏、低耦合、高内聚和复用性几点。具体内容如下: (1)模块化 (2)抽象 (3)信息隐藏 (4)低耦合 (5)高内聚 (6)复用性,7.5.2 面向对象设计的准则和启发式规则,7.5 面向对象设计,第7章,2面向对象设计的启发式规则 (1)设计结果应该清晰易懂 (2)一般/特殊结构的深度应适当 (3)设计简单的类 (4)使用简单的协议 (5)设计简单的服务 (6)最小设计变动,7.5.2 面向对象设计的准则和启发式规则,7.6 系统设计,第7章,系统设计确定实现系统的策略和目标系统的高层结构设计。系统设计是要将系统分解为若干个子系统,子系统和子系统之间通过接口进行联系。系统设计的一般步骤如图7-14所示:,7.5.2 面向对象设计的准则和启发式规则,7.6 系统设计,第7章,1将系统分解为子系统 (1)子系统之间的交互方式 在应用系统中,子系统之间的关系可分为客户/服务器(供应商)关系和同等伙伴(端对端)关系。 在客户/服务器关系中,“客户”的子系