7.2系统分析方法 7.2.1OOA过程模型 面向对象分析需要将真实世界进行抽象,并加以描述。分析的目的是为了构造一个系统 属性和系统行为的模型,该模型是根据对象和对象之间的关系、动态控制和功能转移来确定 的。为此,OOA过程应该包含以下步骤: (1)得到问题论域的初始化描述(问题叙述)。 (2)识别对象,定义它们的类。 (3)识别对象的内部特征,创建数据字典(包括类、属性和关系的描述)。 ①定义属性 ②定义服务 (4)识别对象的外部特征 ①建立一般一一特殊结构 ②建立整体一一部分结构 ③建立实例连接 ④建立消息连接 (5)划分主题,建立主题图。 (6)定义 use case,建立交互图 ①发现活动者、系统边界 ②定义 use case,反映怎样使用系统及系统向用户提供的功能, ③建立交互图 (7)建立详细说明 (8)原型开发 注意:以上所列的OOA过程的各个步骤,并没有特定的次序要求,即允许各种活动交 替进行(OOA方法的一个特点) 考虑到各个步骤的特点及相互的衔接,对OOA过程的各活动安排给出一种建议,如图
7.2 系统分析方法 7.2.1 OOA 过程模型 面向对象分析需要将真实世界进行抽象,并加以描述。分析的目的是为了构造一个系统 属性和系统行为的模型,该模型是根据对象和对象之间的关系、动态控制和功能转移来确定 的。为此,OOA 过程应该包含以下步骤: (1)得到问题论域的初始化描述(问题叙述)。 (2)识别对象,定义它们的类。 (3)识别对象的内部特征,创建数据字典(包括类、属性和关系的描述)。 ①定义属性 ②定义服务 (4)识别对象的外部特征 ①建立一般——特殊结构 ②建立整体——部分结构 ③建立实例连接 ④建立消息连接 (5)划分主题,建立主题图。 (6)定义 use case,建立交互图。 ①发现活动者、系统边界。 ②定义 use case,反映怎样使用系统及系统向用户提供的功能。 ③建立交互图。 (7)建立详细说明。 (8)原型开发。 注意:以上所列的 OOA 过程的各个步骤,并没有特定的次序要求,即允许各种活动交 替进行(OOA 方法的一个特点)。 考虑到各个步骤的特点及相互的衔接,对 OOA 过程的各活动安排给出一种建议,如图 7.3
以下将结合典型例子对面向对象分析过程的各个步骤的主要内容及主要方法进行讨论 7.2.2研究问题论域及用户需求 系统分析的基本出发点是问题论域及用户要求。在面向对象系统分析中,研究问题论域 及用户需求的主要目的是通过对问题论域的深入研究,建立一个能够满足用户需求的系统模 面向对象分析的主要活动—一发现对象、定义对象类等工作都要通过对问题论域的研究 完成。对问题论域的研究一般可通过以下工作来完成 (1)亲临现场,通过观察掌握第一手材料 (2)认真听取问题论域专家的见解。 (3)阅读与问题论域有关的材料,学习相关领域的基本知识 (4)借鉴相关或相似问题论域已有系统的OOA文档。 用户需求指的是用户对所要的开发的系统提出的各种要求和期望,包括系统的功能(着 重考虑的)、性能、可靠性、保密要求、交互方式等技术要求和资金强度、交付时间、资源 使用限制等非技术性要求。(系统分析员解决的问题) 在进行面向对象分析之前,系统分析员应该获得一份正确地表达用户需求对系统功能的 要求、符合国家标准、行业标准及企业内部规范的需求文档。如果不能,应协商制定。 7.2.3对象识别的客观性方法 对于一个给定的应用论域,一个合适的对象集合能够确保软件的可重用性、提高可扩 并能借助于面向对象的开发模式,提高软件开发的质量和生产效率。因此,必须在科学、 确识别了对象集合的基础上才能发挥面向对象程序设计方法的优势 在对象识别中最为关键的是正确地运用抽象原则。系统分析员应紧密围绕系统责任这个
以下将结合典型例子对面向对象分析过程的各个步骤的主要内容及主要方法进行讨论。 7.2.2 研究问题论域及用户需求 系统分析的基本出发点是问题论域及用户要求。在面向对象系统分析中,研究问题论域 及用户需求的主要目的是通过对问题论域的深入研究,建立一个能够满足用户需求的系统模 型。 面向对象分析的主要活动——发现对象、定义对象类等工作都要通过对问题论域的研究 完成。对问题论域的研究一般可通过以下工作来完成: (1)亲临现场,通过观察掌握第一手材料。 (2)认真听取问题论域专家的见解。 (3)阅读与问题论域有关的材料,学习相关领域的基本知识。 (4)借鉴相关或相似问题论域已有系统的 OOA 文档。 用户需求指的是用户对所要的开发的系统提出的各种要求和期望,包括系统的功能(着 重考虑的)、性能、可靠性、保密要求、交互方式等技术要求和资金强度、交付时间、资源 使用限制等非技术性要求。(系统分析员解决的问题) 在进行面向对象分析之前,系统分析员应该获得一份正确地表达用户需求对系统功能的 要求、符合国家标准、行业标准及企业内部规范的需求文档。如果不能,应协商制定。 7.2.3 对象识别的客观性方法 对于一个给定的应用论域,一个合适的对象集合能够确保软件的可重用性、提高可扩性, 并能借助于面向对象的开发模式,提高软件开发的质量和生产效率。因此,必须在科学、正 确识别了对象集合的基础上才能发挥面向对象程序设计方法的优势。 在对象识别中最为关键的是正确地运用抽象原则。系统分析员应紧密围绕系统责任这个
目标去对问题论域中的事物进行抽象和取舍,识别出反映系统特征的对象。用对象来映射问 题论域中的事物。取舍的准则是问题论域中的事物及其特征是否与当前的目标有关。 具体讲,要做两方面的工作。①要舍去与系统责任无关的事物,②舍去与系统责任有关 的事物中与系统责任无关的特征。判断事物及其特征是否与系统责任有关的准则是:该 事物是否为系统提供了一些有用的信息或需要系统为其保存和管理某些信息:该事物是否向 系统提供了某些服务或需要系统描述它的某些行为。 为了尽可能识别出系统所需要的对象,在系统分析的过程中应采用“先松后紧”的原则。 即首先找出各种可能有用的候选对象,尽量避免遗漏;然后对所发现的候选对象逐个进行严 格的审査,进行取舍、调整与合并等工作,使系统中的对象和类尽可能地紧凑。 寻找各种可能有用的候选对象的主要策略是:从问题论域、系统边界和系统责任三个方 面出发,考虑各种能启发自己发现对象的因素,找到可能有用的候选对象。具体来讲,在问 题论域去发现对象的因素包括人员、组织、物品、设备、事件、表格、结构等。在系统边界 方面,应该考虑的因素包括人员、设备和外部系统一一交互方式所涉及的因素。对责任的分 析是基于发现对象识别的遗漏的考虑,如发现所找的对象不能满足要求时需要增加对象。 在找到许多可能有用的候选对象之后,需要进行的工作是对它们进行逐个审查,分析它 们是否是OOA模型真正需要的,从而筛选或精简及合并一些对象,甚至于将有一些对象推 迟到OOD阶段再进行考虑。在进行判断同时,也可以使系统分析人员认识对象的一些属性 和服务,并将这些属性和服务填写相应的对象的类符号中。 精简对象的一些方法是 ①对于只有一个或少数几个属性的对象,应考虑是否可以将它们合并到引用它们的 对象之中 ②而对于只有一个或少数几个服务的对象,则可以考虑将该对象合并到请求者对象 中去 ③对于类类的属性或服务不适合该类的全部对象时,应该重新进行分类 ④对于属性及服务相同的类,则可进行合并 ⑤对于属性和服务相似的类,则可以考虑建立一般—一特殊结构或整体一一部分结 构,利用类的继承及派生对这些类进行简化 ⑥在遇到对同一事物进行重复描述的类,应对某一类进行适当的改造而去除冗余的 对于候选对象中那些与具体的实现条件密切相关的对象,应推迟到OOD阶段进行考虑, 以确保OOA模型可以独立于具体的实现环境而只与问题论域有关。 从识别对象到定义它们的类是一个从特殊个体上升到一般概念的抽象过程,需要为每 种对象定义一个类,并用一个符号进行表示,同时还应把类属性和服务填写到类符号中,以 得到这些对象的类 在面向对象软件设计中,发现对象的一个简单而有效的方法是利用语言信息分析 linguistic based diagrams, LIA)和三视图模型(3- view modeling3M)的结合进行对 象的识别,发现应用论域的初始空间。图7.4说明了将3VM和LIA应用于对象识别的过 程 三视图(3VM)利用了三种非常有效的传统系统分析工具:数据流图、实体一一关系 图以及状态—一迁移图 实体关系图( entity relationship diagrams,ERD)是OOA的一个有力的工具。在实体 一关系图中:实体很有可能就是以后要构造的对象,而实体的属性则可以表示成最终要由对 象进行存储的数据:实体之间的关系有可能将建立“关联对象”,而所谓关系的“基数”(值
目标去对问题论域中的事物进行抽象和取舍,识别出反映系统特征的对象。用对象来映射问 题论域中的事物。取舍的准则是问题论域中的事物及其特征是否与当前的目标有关。 具体讲,要做两方面的工作。①要舍去与系统责任无关的事物,②舍去与系统责任有关 的事物中与系统责任无关的特征。 判断事物及其特征是否与系统责任有关的准则是:该 事物是否为系统提供了一些有用的信息或需要系统为其保存和管理某些信息;该事物是否向 系统提供了某些服务或需要系统描述它的某些行为。 为了尽可能识别出系统所需要的对象,在系统分析的过程中应采用“先松后紧”的原则。 即首先找出各种可能有用的候选对象,尽量避免遗漏;然后对所发现的候选对象逐个进行严 格的审查,进行取舍、调整与合并等工作,使系统中的对象和类尽可能地紧凑。 寻找各种可能有用的候选对象的主要策略是:从问题论域、系统边界和系统责任三个方 面出发,考虑各种能启发自己发现对象的因素,找到可能有用的候选对象。具体来讲,在问 题论域去发现对象的因素包括人员、组织、物品、设备、事件、表格、结构等。在系统边界 方面,应该考虑的因素包括人员、设备和外部系统——交互方式所涉及的因素。对责任的分 析是基于发现对象识别的遗漏的考虑,如发现所找的对象不能满足要求时需要增加对象。 在找到许多可能有用的候选对象之后,需要进行的工作是对它们进行逐个审查,分析它 们是否是 OOA 模型真正需要的,从而筛选或精简及合并一些对象,甚至于将有一些对象推 迟到 OOD 阶段再进行考虑。在进行判断同时,也可以使系统分析人员认识对象的一些属性 和服务,并将这些属性和服务填写相应的对象的类符号中。 精简对象的一些方法是: ①对于只有一个或少数几个属性的对象,应考虑是否可以将它们合并到引用它们的 对象之中; ②而对于只有一个或少数几个服务的对象,则可以考虑将该对象合并到请求者对象 中去。 ③对于类类的属性或服务不适合该类的全部对象时,应该重新进行分类; ④对于属性及服务相同的类,则可进行合并; ⑤对于属性和服务相似的类,则可以考虑建立一般——特殊结构或整体——部分结 构,利用类的继承及派生对这些类进行简化; ⑥在遇到对同一事物进行重复描述的类,应对某一类进行适当的改造而去除冗余的 类。 对于候选对象中那些与具体的实现条件密切相关的对象,应推迟到 OOD 阶段进行考虑, 以确保 OOA 模型可以独立于具体的实现环境而只与问题论域有关。 从识别对象到定义它们的类是一个从特殊个体上升到一般概念的抽象过程,需要为每一 种对象定义一个类,并用一个符号进行表示,同时还应把类属性和服务填写到类符号中,以 得到这些对象的类。 在面向对象软件设计中,发现对象的一个简单而有效的方法是利用语言信息分析 (linguistic_based diagrams,LIA) 和三视图模型(3—view modeling,3VM) 的结合进行对 象的识别,发现应用论域的初始空间。图 7.4 说明了将 3VM 和 LIA 应用于对象识别的过 程。 三视图(3VM)利用了三种非常有效的传统系统分析工具:数据流图、实体——关系 图以及状态——迁移图。 实体关系图(entity_relationship diagrams,ERD)是 OOA 的一个有力的工具。在实体— —关系图中:实体很有可能就是以后要构造的对象,而实体的属性则可以表示成最终要由对 象进行存储的数据;实体之间的关系有可能将建立“关联对象”,而所谓关系的“基数”(值
的对应和“条件性”则有可能称为维持这些关系的服务。但其在应用时也存在问题:识别的 实体可能与应用论域概念无关,且ERD对于那些不存储数据的对象显得无能为力 常用的数据流模型有两种:上下文图和分层的数据流图,是识别对象的有力工具。上下 文图可以确定一个全局的系统边界,它所识别的外部实体表示数据流的源端或目的端(候选 对象):而上下文图中的数据流代表了该系统的输入和输出。因此任何一种对象集合都必须 阐明这些上下文图中的数据流是如何被接收、处理及生成的。在适当的情况下,会产生分层 的数据流图集合,即将待开发系统的功能分解成为一些基本单元,它们可被看作是一些详细 说明或基本处理规格说明( primitive process specificationS,PSs,而这些PSs最后必须对 应于对象的方法或服务。 常用的有两种形式的状态——迁移模型:事件—一响应模型和状态—一适移模型,它们 也用于对象识别的工具。事件一一响应模型识别出系统必须进行识别的所发生的每一个事件 以及系统必须做出的预期的响应事件。该模型的事件成分有助于识别一系列的识别事件的对 象,而响应成分则有助于识别一系列发生事件的对象。在某些特殊的情况下,为系统建立 个或多个状态一一迁移图将有助于识别对象,它除了能识别事件、识别对象和事件产生对象 之外,还有助于识别保存状态信息的属性 书P198~P199中的图7.5~图7.8是中英文双向电子字典系统(EDS)用于事例分析 系统的3VM图 1. Word Input A.修改词汇输入框内容 单词输入) B.向搜索引擎发送搜索指令 2. Mouse Pick up A.在鼠标位置生成显示区域 (鼠标拾取) B.向搜索引擎发送搜索指令 3. Search Successfully A.向中英文词库发送调记录指令 (搜索成功) B.向语音词库发送调记录指令 C.修改列表框内容 4. Search failure A.按词库中与被检索词最近的下 (搜索失败 个单词重新进行搜索 5. Word library retrieve A.更新结果输出框内容或在取词
的对应和“条件性”则有可能称为维持这些关系的服务。但其在应用时也存在问题:识别的 实体可能与应用论域概念无关,且 ERD 对于那些不存储数据的对象显得无能为力。 常用的数据流模型有两种:上下文图和分层的数据流图,是识别对象的有力工具。上下 文图可以确定一个全局的系统边界,它所识别的外部实体表示数据流的源端或目的端(候选 对象);而上下文图中的数据流代表了该系统的输入和输出。因此任何一种对象集合都必须 阐明这些上下文图中的数据流是如何被接收、处理及生成的。在适当的情况下,会产生分层 的数据流图集合,即将待开发系统的功能分解成为一些基本单元,它们可被看作是一些详细 说明或基本处理规格说明(primitive_process specificationS,PPSs),而这些 PPSs 最后必须对 应于对象的方法或服务。 常用的有两种形式的状态——迁移模型:事件——响应模型和状态——适移模型,它们 也用于对象识别的工具。事件——响应模型识别出系统必须进行识别的所发生的每一个事件 以及系统必须做出的预期的响应事件。该模型的事件成分有助于识别一系列的识别事件的对 象,而响应成分则有助于识别一系列发生事件的对象。在某些特殊的情况下,为系统建立一 个或多个状态——迁移图将有助于识别对象,它除了能识别事件、识别对象和事件产生对象 之外,还有助于识别保存状态信息的属性。 书 P198~P199 中的图 7.5~图 7.8 是中英文双向电子字典系统(EDS)用于事例分析 系统的 3VM 图。 1.Word Input (单词输入) A.修改词汇输入框内容 B.向搜索引擎发送搜索指令 2.Mouse Pick_up (鼠标拾取) A.在鼠标位置生成显示区域 B.向搜索引擎发送搜索指令 3.Search Successfully (搜索成功) A.向中英文词库发送调记录指令 B.向语音词库发送调记录指令 C.修改列表框内容 4.Search Failure (搜索失败) A.按词库中与被检索词最近的下 一个单词重新进行搜索 5.Word Library Retrieve A.更新结果输出框内容或在取词
中英文词库记录取得)显示区域显示结果 6. Sound Library retrieve A.发送语音播放指令 (语音词库记录取得) use A.若存在显示区域,则清除显示 (鼠标移动) 8. Pick up in List Box A.向搜索引擎发送搜索指令 在列表框中进行选择 图7.7EDS的事件一响应模型 语言信息分析(LIA)是将某些语言规则应用到软件系统分析中的处理方法,它可以为 识别对象提供大量的指导。LIA的目的是识别出应用论域的概念空间以及这些概念之间的关 系。常用的LA方法是短语频率分析( phrase frequency analysis,PFA)和矩阵分析( matrix analysis,MA)。这两种方法都需要建立一个资源库,该资源库中包括相关文档、模型、软 件、人员以及包含应用论域或系统知识的其他资源。所有这些资源都包含一个文本库,而 IA技术可应用于该文本库。LIA技术通常只应用于资源库的某个子集,这取决于分析员想 把什么样的视图用于应用论域或应用系统。 短语频率分析搜索选定的资源文本,以识别可以表示应用论域概念的术语。PFA清单的 建立基本上是一个客观的过程,其中大多数表示出来的概念与待开发出来的应用系统无关。 PFA的优点在于能广泛地识别应用论域的概念集合,并对它们进行评估,判定它们中哪些与 待开发软件无关,并将其丢弃。将PFA清单转换为 OOA/OOD工作表格将非常有用,它提 供了一种系统的方法,可用于评审相当长的PFA清单并识别出OOA成分的初始集合 矩阵分析(MA)是一种比PFA更复杂、实现起来更困难的技术。通常是在初始化对象 识别出来以后再使用MA技术。MA分析的成果是一个二维MA表,该表的行和列是应用 论域的概念,而这些概念通常可以产生所识别对象的初始集合。初始MA可以从资源中机 械地构造出来,但分析员逐个元素地评审和讨论MA表,识别出应用论域的关系,还可能 会发现新的,在初始的PFA中没有产生的对象。MA方法的主要优点是其系统性和条理性。 7.2.4识别对象的内部特征 识别对象的内部特征包括定义对象的属性与服务这两个部分的工作 问题论域中的事物的特征可以分为静态特征和动态特征。静态特征可以通过一组数据来 表示,而动态特征则可以通过一系列操作来表达 对象的属性是描述对象静态特征的数据项,而对象的服务则是描述对象动态特征(行为) 的操作序列。对象的属性和服务描述了对象的内部细节,只有给出了对象的属性和服务,才 能说对于该对象有了确切的认识和定义。 按照面向对象方法的封装原则,一个对象的属性和服务是紧密结合的,对象的属性只能 由该对象的服务来进行访问,即确定对象状态的属性数据应该是 private型或 protected型的。 而对象的服务可以分为内部服务和外部服务,与之相对应的是 private型、 protected型和 public 型。内部服务只供对象内部的其他服务使用,不能在外部进行调用:而外部服务则对外提供 个消息接口,通过这个接口接收对象外部的消息并为之提供服务 对于对象的属性和服务,面向对象方法提供了专门的表示方法:对象的属性用在类符号 中部填写的各属性的名字;而对象的服务则用在类符号的下部填写的各服务的名称表示
(中英文词库记录取得) 显示区域显示结果 6.Sound Library Retrieve (语音词库记录取得) A.发送语音播放指令 7.Mouse Move (鼠标移动) A.若存在显示区域,则清除显示 区域 8.Pick_up in ListBox (在列表框中进行选择) A.向搜索引擎发送搜索指令 图 7.7 EDS 的事件—响应模型 语言信息分析(LIA)是将某些语言规则应用到软件系统分析中的处理方法,它可以为 识别对象提供大量的指导。LIA 的目的是识别出应用论域的概念空间以及这些概念之间的关 系。常用的 LIA 方法是短语频率分析(phrase frequency analysis,PFA)和矩阵分析(matrix analysis,MA)。这两种方法都需要建立一个资源库,该资源库中包括相关文档、模型、软 件、人员以及包含应用论域或系统知识的其他资源。所有这些资源都包含一个文本库,而 LIA 技术可应用于该文本库。LIA 技术通常只应用于资源库的某个子集,这取决于分析员想 把什么样的视图用于应用论域或应用系统。 短语频率分析搜索选定的资源文本,以识别可以表示应用论域概念的术语。PFA 清单的 建立基本上是一个客观的过程,其中大多数表示出来的概念与待开发出来的应用系统无关。 PFA 的优点在于能广泛地识别应用论域的概念集合,并对它们进行评估,判定它们中哪些与 待开发软件无关,并将其丢弃。将 PFA 清单转换为 OOA/OOD 工作表格将非常有用,它提 供了一种系统的方法,可用于评审相当长的 PFA 清单并识别出 OOA 成分的初始集合。 矩阵分析(MA)是一种比 PFA 更复杂、实现起来更困难的技术。通常是在初始化对象 识别出来以后再使用 MA 技术。MA 分析的成果是一个二维 MA 表,该表的行和列是应用 论域的概念,而这些概念通常可以产生所识别对象的初始集合。初始 MA 可以从资源中机 械地构造出来,但分析员逐个元素地评审和讨论 MA 表,识别出应用论域的关系,还可能 会发现新的,在初始的 PFA 中没有产生的对象。MA 方法的主要优点是其系统性和条理性。 7.2.4 识别对象的内部特征 识别对象的内部特征包括定义对象的属性与服务这两个部分的工作。 问题论域中的事物的特征可以分为静态特征和动态特征。静态特征可以通过一组数据来 表示,而动态特征则可以通过一系列操作来表达。 对象的属性是描述对象静态特征的数据项,而对象的服务则是描述对象动态特征(行为) 的操作序列。对象的属性和服务描述了对象的内部细节,只有给出了对象的属性和服务,才 能说对于该对象有了确切的认识和定义。 按照面向对象方法的封装原则,一个对象的属性和服务是紧密结合的,对象的属性只能 由该对象的服务来进行访问,即确定对象状态的属性数据应该是 private 型或 protected 型的。 而对象的服务可以分为内部服务和外部服务,与之相对应的是private型、protected型和public 型。内部服务只供对象内部的其他服务使用,不能在外部进行调用;而外部服务则对外提供 一个消息接口,通过这个接口接收对象外部的消息并为之提供服务。 对于对象的属性和服务,面向对象方法提供了专门的表示方法:对象的属性用在类符号 中部填写的各属性的名字;而对象的服务则用在类符号的下部填写的各服务的名称表示