软件工程第七讲教案 下载本文

在 OOA中运用粒度控制原则就是引入主题的概念,把OOA模型中的类按一定的规则进行组合,形成一些主题,如果主题数量仍较多,则进一步组合为更大的主题。这样使OOA模型具有大小不同的粒度层次,从而有利于分析员和读者对复杂性的控制。 7)行为分析

现实世界中事物的行为是复杂的。由大量的事物所构成的问题域中各种行为往往相互依赖、相互交织。控制行为复杂性的原则有以下几点: ·确定行为的归属和作用范围 ·认识事物之间行为的依赖关系

·认识行为的起因,区分主动行为和被动行为 ·认识系统的并发行为 ·认识对象状态对行为的影响 3 . OOA 过程

OOA过程包括以下主要活动: 1)发现对象、定义它们的类; 2)识别对象的内部特征: ·定义属性 ·定义服务;

3)识别对象的外部关系: ·建立一般 /特殊结构 ·建立整体 /部分结构 ·建立实例连接 ·建立消息连接

(以上活动的总目标是建立 OOA基本模型——类图); 4)划分主题,建立主题图; 5)定义use case,建立交互图: ·发现活动者 ·定义 use case ·建立交互图

( (4)、(5)两个活动建立OOA补充模型,在有些情况下可以省略);

21

7)建立详细说明

这是对模型的详细定义与解释,可以作为一个独立的活动,更自然的做法是分散在其它活动之中; 7)原型开发

这项可在 OOA过程中反复进行。

以上从( 1)到(7)各个活动以及它们的子活动,没有特定的次序要求,并且可以交互的进行,分析员可以按照自己的工作习惯决定采用什么次序以及如何交替。几点考虑如下:

·把建立基本模型的三个活动安排得比较接近。根据需要随时从一个活动切换到另一个活动。

·划分主题的活动在分析很小的系统时可以省略;在分析中小规模的系统时放在基本模型建立之后;在分析大型系统时可在基本模型建立之前进行,即在简单地认识系统中一些主要对象的基础上先划分主题,并根据主题进行分工,然后开始正规的分析。

·发现活动者和定义 use case两个子活动(如果需要)放在分析工作的开始,建立交互图的子活动(如果需要)安排在基本模型建立之后。 ·建立详细说明的活动分散地进行,结合在其它活动之中。最后作一次集中的审查与补充。

·原型开发需要反复的进行,在认识了基本模型中一些主要的对象之后就可以做一个最初的原型。随着分析工作的深入不断地进行增量式原型开发。 不强调活动的顺序,允许各种活动交替进行,是这种 OOA方法体现在过程上的特点。例如,在发现了一些对象之后,就可以开始定义它们的属性与服务;此时若认识到某些结构,可以及时建立这些结构;在建立结构时得到某种启发,联想到其它对象,又可及时转到发现对象的活动。在CASE工具的支持下,各种活动之间的切换可以相当灵活。有些开发单位习惯于规定一个基本的活动次序,使OOA过程按这种次序一步一步地执行。

图 7-11所示的是按照以上建议给出的一种OOA过程模型示意图,图中只画出了过程中的活动而没有表示角色、资源等因素。主干线上的活动体现了一种可供参考的次序。其拓扑结构表明这些活动可以回溯,也可以交替进行。

22

图 7-11 OOA 过程模型

7.2.2 确定对象、类 1.确定对象

( 1)问题域和系统责任

问题域和系统责任是发现对象的根本出发点。两者从不同的角度告诉分析员应该设立哪些对象。前者侧重于客观存在的事物与系统中对象的映射;后者侧重于系统责任范围内的每一项职责都应落实到某些对象来完成。二者的范畴有很大一部分是重合的,但又不完全一致。分析员需要时时考虑这两个方面。如果只考虑问题域,不考虑系统责任,则不容易正确地进行抽象(不知道哪些事物以及它们的哪些特征是该舍弃的,哪些是该提取的),还可能使某些功能需求得不到落实。反之,如果只考虑系统责任,则容易使分析的思路受某些面向功能的分析方法影响,使系统中的对象不能真正地映射问题域,失去面向对象方法的根本特色与优势。 ( 2)正确地运用抽象原则

OOA用对象映射问题域中的事物,并不意味着对分析员见到的任何东西都在系统中设立相应的对象。OOA需要正确地运用抽象原则。即:紧紧围绕系统责任这个目标去进行抽象。在OOA中正确地运用抽象原则,首先要舍弃那些与系统责任无关的事物,只注意与系统责任有关的事物。其次,对于与系统责任有关的事物,也不是把它们的任何特征都在相应的对象中表达出来,而要舍弃那些与系统责任无关的特征。判断事物是否与系统责任有关的关键问题,一是该事物是否为系统提供了一些有用的信息,或者,它是否需要系统为它保存和管理某些信息;二是它是否向系统提供了某些服务,或者说,它是否需要系统描述它的某些行为。

例如:当开发一个图书馆管理系统时,设立了“书”这个类,同时把每一本书作为该类的一个对象。这样做是正确的,因为系统需要记住每一本书借给了哪个读者。但是在开发一个书店的业务管理系统时,是否要把每一本书作为一个对象呢?实际上,在这个系统中把同一版本的一种书从总体上看作一

23

个对象更合理些。因为该系统只要把每一种书看作一项货物,记住它的货源、单价、库存量等信息就够了,不需记录每一本书的信息。 ( 3)策略与启发

如何发现各种可能有用的候选对象。主要策略是从问题域、系统边界和系统责任三个方面,考虑各种能启发自己发现对象的因素,找出可能有用的候选对象。 1)考虑问题域

启发分析员发现对象的因素包括:人员、组织、物品、设备、事件、表格、结构等。

2) 考虑系统边界

考虑系统边界,启发分析员发现一些与系统边界以外的活动者进行交互,并处理系统对外接口的对象。考虑的因素包括:人员、设备和外系统。 3)考虑系统责任

对照系统责任所要求的每一项功能,查看是否可以由现有的对象完成这些功能。如果发现某些功能在现有的任何对象中都不能提供,则可启发发现问题域中某些遗漏的对象。

系统责任所要求的某些功能,例如系统安装、配置、信息备份、浏览等。 4)审查和筛选

找到许多候选对象之后,要对它们逐个进行审查,看它们是不是 OOA模型真正需要的,从而筛选掉一些对象。首先要丢弃那些无用的对象,然后要想办法精简、合并一些对象,并区分哪些对象是应该推迟到OOD阶段考虑的。 5)识别主动对象

在基本上明确系统中对象后,找出其中的主动对象。可从以下几方面考虑: ·从问题域和系统责任考虑:哪些对象将在系统中呈现一种主动行为,即,哪些对象具有某种不需要其它对象请求就主动表现的行为。凡是在系统中呈现主动行为的对象都应该是主动对象。

·从系统执行情况考虑:设想系统是怎样执行的。如果它的一切对象服务都是顺序执行的,那么,首先执行的服务在哪个对象,则这个对象应该是系统中唯一的主动对象。如果它是并发执行的,那么,每条并发执行的控制线程起点在哪个对象,那么这些对象应该是主动对象。

·从系统边界考虑:系统边界以外的活动者与系统中哪些对象直接进行交互,处理这些交互的对象服务如果需要与其它系统活动并发地执行,那么这些对象很可能是主动对象。认识主动对象和认识对象的主动服务是一致的。 2. 对象分类、建立类图的对象层

24