OOA方法共分为五大步骤:标识对象,标识结构,标识主题,定义属性及定义服务。下面分别作一简要介绍。
1.标识对象
OOA中的对象实质上是类,它可定义为对数据和在其上执行操作的抽象,反映出一个系统为现实世界的事物保存信息及与其发生相互作用的能力;同时它也是属性的值以及这些属性上专有操作的封装。
可以用单个名词或形容词名词作为对象名,当然采用问题空间的标准名称作为对象名更好。如何定义对象来自于该领域的实践和经验。首先应仔细观察问题空间,研究用户世界,然后主动和用户交谈;可以参考一下以前OOA的成果以及别的系统的做法;手头的些文字和图片资料也需仔细阅读;最后给出一个原型。
为寻找可能的对象,可以从以下几个方面寻找:结构,与正在考虑的系统发生相互作用的其它系统和设备,问题空间中应记忆的事件,系统中的人员以及操作过程、地点、组织等。最后,还需要对这些已找出的对象进行整理,去掉那些没有必要为它保存信息和提供服务的对象,也不要把派生结果当作对象。
2.标识结构
结构是问题空间里复杂事物和复杂关系的表示。这里结构分为两种:分类结构和组装结构。分类结构用于刻划问题空间的类--成员层次,它通过搜集公共特性并把这种特性扩充到特例中来显示现实世界事件的通用性及专用性。组装结构刻划一个整体及其组成部分。
分类结构和组装结构能使分析人员和领域专家的注意力集中在具有多个类和对象的复杂问题上。而且,使用结构能使分析人员考虑到问题的边缘,并指示那些尚未发现的类和对象。除此之外,分类结构还具有继承性。认定一个分类结构时,首先认为对象具有最一般的含义,然后检查它的各种可能的专用特性是否在问题空间和系统范围内,是否是继承下列的,是否在类-对象锁考虑的范围中.同样的,在把对象看成是专用的,对于它的各种可能的通用特性作上述类似的检查。分类结构最常见的形式就是泛化-特化层次了,因此在命名时要注意,以避免由于继承而发生的冲突。
认定组装结构时,要考虑以下因素:整体 部分、容器 内容、集体 成员。然后把一个对象看成是整体,检查它的各种可能的潜在部分,是否在问题空间和系统范围内,是否仅仅有一个状态值(如果是的话,就在整体中加上一个相应的属性),是否提供的是一个有用的问题空间内的抽象。同样地,再把对象看成是一个部分,对它的各种可能的整体作上述类似的考虑。
3.标识主题
主题提供了一个引导读者(分析员,问题领域的专家,管理者或客户)在一个时间内所能考虑和理解模型的多少部分的机制,主题同时也给出了OOA 模型的概貌.
选择主题时,首先把每一个结构中最上面的类的名字作为一个主题,再把每一个不在结构中的对象的名字作为一个主题。然后以结构、属性和服务 个层为指导,考虑问题的子领域,最小相互依赖性和相互作用性,以提炼主题。在主题层,画一个简单的方框,里面写上主题的名字和编号以表示一个主题。在别的层,则通过这些编了号的主题引导读者从一个主题到另一个主题。对于大型模型,为了便于通讯,每一层都可组织成按主题划分的图。只要对指导读者有利,一个类 对象可以不只在一个主题中出现,而主题也可以嵌套。
4.定义属性
属性是描述对象或分类结构实例的数据单元。通过对抽象模型增加更多的细节,属性明确了一个对象的名字意味着什么。在OOA中,对属性的定义分为以下步骤:认定属性,确定属性的位置;识别实例的关联;检查特例;说明属性。
认定属性有个基本原则:首先,要确认它对相应的对象或分类结构的每一个实例都是适用的。其次,一个属性即使对某种对象的实例都是适用的,也还要考虑在现实世界中它与这种事物的关系是不是最密切的。第三,认定的属性应当是一种相对的原子概念,也就是说,不依赖于并列的其它属性就可以被理解。
确定属性的位置主要是针对分类结构而言,采用的是继承的观点,低层对象的共有属性应在上层对象中定义,而自己只定义特有的属性。
实例的关联指的是问题空间中的一种映射,它反映了对象相互需要的关系,先对对象添加连线,再定义其是单重、多重以及是强制的还是任选的。
接下来应检查一些特殊情况,如不能适用于对象所有实例的属性,只有一个属性的对象;值的数目不定的属性;适配参数,使目标系统适应不同的运行环境或要求。最后,用名字和描述说明属性,还可以增加一定的属性约束(如允许的取值、范围、限制、计量单位和精度)
5.定义服务
一个服务就是收到一条消息之后所执行的处理。服务进一步细化了现实的抽象表示,它表明某个类的对象能提供什么处理。
定义服务,首先是要定义每一种对象和分类结构为应用所要求的行为。其次,还要定义对象的实例之间必要的通信,这里,通信的基本方式是消息传递,所以定义通信就是定义实例之间的消息关联。定义服务分为以下几步:标识对象陈述、认定需要的服务、认定消息关联、对服务进行规格说明。
首先检查属性中可能的值以及系统中是否存在相应的服务,然后用对象陈述图来描述。需要的服务分为两类:简单的和复杂的。简单的包括对象的建立和对象之间的连接,访问对象属性的值,以及删除对象及其连接。复杂的包括根据对象属性值的计算类服务以及对别的系统的输入/输出和设备的管理类服务。
消息关联是事件-响应和数据流的一种结合,每一种消息关联都表示着一条要发出的消息和收到这条消息要作出的一个响应,它也是实例之间的一种映射关系。认定消息关联,首先在已经用实例关联联系起来的那些实例之间增加消息关联。然后检查那些需要其他实例进行的加工,考虑增加其它必要的消息关联。
对服务给出规格说明,重点是那些要求使外部可观察到的行为,目的是强调可测试部分,作为将来对系统需求进行验证,对系统进行验收和测试的基准。因此,对于每一个服务首先要考虑的是,它所决定的系统行为是不是外界可见的或者可测试的。
整个分析结果的规格说明在给出服务的说明后即告完成。接着,用模板和对象陈述图,服务列表图来描述服务和附加的约束,对于那些依赖于陈述的服务,使用服务/陈述表。
最后,汇集所有文档,它包括OOA模型、对象说明书、补充的文档、关键运行路径表、附加的系统限制以及服务/陈述表。