基本概念
对象建模技术包括三种模型,即对象模型、动态模型和功能模型。对象模型是通过描述系统中的对象、对象间的关系,标识类中的对象的属性和操作表组织系统的静态结构,是三种模型中最重要的模型,它为动态模型和功能模型提供了实质性框架。动态模型描述与时间操作和次序有关的系统属性,它关心的是控制,从事件和状态的角度描述系统的数据结构。功能模型从值和功能的角度描述系统的计算结构,它不考虑系统干什么或如何干。一个典型的软件肯定包含了这三种性质: 它使用数据结构(对象模型),顺序执行操作(动态模型),并且完成值的变化(功能模型)。这三种模型描述的是系统的不同方面,但各种模型之间又互相联系,对象模型描述了动态模型和功能模型中操作的数据结构,对象模型中的操作对应于动态模型中的事件及功能模型中的功能。而功能模型描述了对象模型中的对象唤醒和动态模型中行为唤醒的功能。
OMT方法研究OMT 的三种模型OMT 方法用三种类型的模型刻画一个系统:对象模型、动态模型和功能模型。对象模型描述系统中的对象和它们之间的联系;动态模型描述系统对象间的相互作用;功能模型描述系统中数据的变化。每种模型应用于开发的不同阶段,以几种不同的观点来刻画不同的模型,一个软件系统的完全描述要求包含所有这三种模型1。
(1)对象模型。对象模型是三种模型中最重要的,通过描述系统中的对象、对象之间的联系、属性以及刻画每个对象类的属性和操作来表示系统的静态结构。系统建模围绕对象来构造系统而不是围绕功能来构造系统,对象模型更接近实际应用,而且容易修改,能快速地对变化做出反应。对象模型提供一种直观的图形表示,并且文档化系统结构有利于与用户之间进行有针对性的交流,从而有利于系统模型的修改和完善。
(2)动态模型。动态模型描述了系统时间空间内对象的变化和对象之间关系的变迁,即系统所关注的时序关系。动态模型的主要概念是表示外部触发的事件和表示对象值的状态,它采用状态图来描述一个特定类的事件、状态和状态变迁的模式。状态图就是状态和事件的网络,动态模型由多个状态图组成,从而显示了整个系统活动的模式。
(3)功能模型。功能模型描述系统内的计算。功能模型由多个数据流图组成,这些数据流图描述数据流从外部输入值,经过计算和内部数据存储,再向外部输出的全过程。功能模型也包含了对象模型中值之间的约束。三种模型的关系如图所示。
OMT模型中对象之间的关系(1)链接和关联。
链接(Link)和关联(Association)是建立对象之间、类之间以及对象和类之间的联系。链接是在对象实例之间的一种物理或概念连接。在数学上,一个链接是一个元组,即一个对象实例的有序列表。一个链接是一个关联的实例。关联描述了具有公共结构和共同语义的链接的组合。所有在关联中的链接都与相同类的对象组连接。关联和链接经常在问题叙述中以动词身份出现,一个关联描述了用相同方式的可能的链接的集合,这种方式就是一个类描述所有可能的对象的一个集合。在类图中每个关联相对应于实例图的链接集合,就好像每个类相对应于对象集合一样。一个关联的OMT表示是在类与类之间画一条线,连接是在对象与对象之间画一条线,关联名用斜体字。如果类与类之间只有一种关联(单一关联),则关联名可以省略。
(2)概括和继承。
概括(Generalization)和继承(Inheritance)是在类与类之间相似与共享的强有力的抽象,并保留它们自己的不同之处。概括是描述在一个类和提取该类的一个或更多版本之间的关系。这个被提取的类称为“超类”(SuperClass),而每个被提取的版本称为子类(Sub Class)。把子类的公共属性和操作放在超类,可以被每个子类共享;每个子类则继承它所属超类的特征。因为子类的一个实例同时也是超类的一个实例,因此概括也称为“is-a”关系。
概括和继承可以蕴含在任意层次之中,术语祖先和子孙涉及多层次的一类概括,子类的一个实例同时也是所有它的祖先类的一个实例,一个实例的状态包含了每个祖先类的每个属性的一个值。在任一祖先类上的任一操作可用于一个实例,每个子类不仅继承所有祖先的特征,而且还可以加入它自己本身的属性和操作。
基于OMT 的系统模型设计系统分析一个现实问题可以更自然更实际地被看成一组对象及其相关方法的集合。面向对象设计的初始元素是对象。以后,随着对通用性的标识,对象聚集成类,然后又进一步子类化成更抽象的类,最高层的抽象称为一个框架。一个框架就是一个类集,这些类表达了对一组相关应用程序的设计。从实质上讲面向对象的问题求解是从已有的类库开始并重用它们,根据系统要求剪裁这些通用类。这种方法就需要提供标识定义和组织类及其方法和消息的规则,还需要能提供组织类库的策略和从已有的框架或类库建造应用程序的准则。
(1)构造对象模型
分析需求的第一步是构造对象模型,对象模型表示了客观系统的静态数据结构,它描述了现实世界的对象、类及它们之间的关系屯其信息来源于问题陈述,应用领域的专业知识和客观世界的一般性知识,初始的分析模型很中能包含错误,这些错误必须在以后的反复分析中加以更正。在构造对象模型时,首先确定对象、类; 然后确定对象之间的关联,包括聚集。也要确定对象属性和链。使用继承来组织和细化对象、类。将紧耦合的类和关联的构造成模块,可以用简洁的文字,对对象模型中的信息加以补充。
(2)开发动态模型
动态模型表示了系统的行为及其对象。在分析阶段不考虑算法的执行,算法是实现模型中的一部分,对于静态数据存储来说(如数据库),动态模型毫无意义。动态模型对相互作用的系统具有很重要的意义。构造动态模型时先准备典型情况的脚本,然后确定系统和外部事物之间的外部文件,为各个主对象建立状
态图,以表示对象接收和发送的文件模式及其文件执行的动作,状态图的结果集合构成了动态模刑。
(3)构造功能模型
功能模型是用来说明位是如何计算的,而不考虑动作顺序。它表明了值之间的依赖关系及其相关的功能,功能模型的构造按如下步骤进行:
a.确定输入、输出值;
b.建立数据流图(DFD);
c.描述函数;
d.确定约束条件;
e.确定优化标准。
分析的最后阶段,还要验证、重复并完善,细化上述三种模型。
系统设计系统分析完毕就进入系统设计。系统设计是问题求解及建立解答的高级策略。它包括将系统分解成子系统的策略,子系统的硬、软件配置,详细设计框架的构造等方法策略。系统设计要制定解决问题的基本方法。将系统分解成子系统的全面组织结构。目的是使多个设计者能各自独立地进一步设计各个子系统,应当制定以下策略:
(1)系统分解。可将系统分成水平层次和垂直块。系统自身也就是层次和块的混合物。
(2)确定固有的并发性;
(3)处理器任务的分配;
(4)数据存储的管理。可以用内存数据结构、文件、数据库来实现。
(5)全局资源的处理
(6)选择软件控制机制
(7)边界条件的处理
(8)设置折衷优先级
对象设计对象设计时对分析模型进行详细分析和阐述,并几奠定实现的基础。它要制定出实现系统所必须的策略但不涉及语言的具体细节。分析阶段确定所实现的内容,系统设计阶段确定实现策略,而对象设计则确定对实现要用到的类,关联的完整定义,实现操作的算法。对象设计与传统结构的初步阶段相似。实现对象设计的步骤如一下:
(1)将三种模型结合起来。。在分析阶段我们得到了对象、动态和功能模型。其中对象模型是组织对象设计的主要框架,将动态模型中的动作及活动以及功能模型中的处理转换成操作,加人到对象的类中。
(2)实现算法的设计。功能模型中的各个操作都要用算法来表示。算法是用来说明如何执行操作的。算法
设计首光要选择最小开销的算法,要考虑到计算复杂度,易理解,易实现这些因素。在选择算法时,涉及到选择算法使用的数据结构的问题。在对象设计阶段,必须为有效的算法选择其数据结构形式。常见的数据结构都是包容类的实例。如数组、表、队列、栈、集合、字典,关联等,定义新的内部类和操作,在展开算法时,可能需要引人一些新的对象、类,用来存放中间结果。在分解高层操作时,也可能引人一些新的底层操作。
(3)优化设计。分析模型概括了系统的逻辑信息,但设计模则必须加人详细内容以支持有效的信息访问。效率低但语法正确的分析模型应当进行优化,日的是实现更为有效。优化时要考虑增加冗余关联,以减少访问开销,重新调整执行次序以提高效率。定义新的对象或新类来隐藏或存储在计算形式中,避免重复计算的开销。
(4)实现系统设计中的软件控制。
(5)调整继承。随着对象设计过程的深八,经常调整类及操作的定义以提高继承的数目。
(6)设计关联的实现。关联是对象模型的纽带,它提供了对一象之间的访问路径。
(7)确定对象表示。对象大多数是直接实现的,但设计者必须决定何时使用基本类型来表示对象,何时将相关对象组合起来。
(8)物理组装。程序必须组装成物理模块,将类、关联封装起来2。