1
面向对象软件工程实践指南
1.2.7.6 7.6 运 行 设 计
7.6 运 行 设 计

除了获得类的构成以及它们的关系外,还需要对软件的运行机制做设计。在运行设计中,需要分析并发需求,确定程序中有哪些进程,确定进程之间的通信机制和协调机制,确定进程的生命周期,并把模型元素分配到各个进程中去。以下为典型的步骤:

(1)分析并发需求。

(2)确定进程和线程。

(3)确定进程的生命周期。

(4)确定进程之间的通信机制。

(5)确定进程之间的协调机制。

(6)将进程映射到运行环境中。

(7)将模型元素分配到各个进程中。

在UML中,每一个独立的控制流可以建模为主动对象(active object),换言之,每一个主动对象拥有自己的进程或者线程,它能够独立发起一个执行活动。主动对象是主动类(active class)的实例。而普通的对象,我们称为被动对象(passive object)的是那些拥有数据,但是不能主动发起一个控制流的对象。不同主动类的对象可以并行运行。

进程可以采用以下两种表示方法,即类或者组件上带上范型“≪process≫”(见图7-2)。

图7-2 进程的表示

类似的,线程可以用以下两种表示方法(见图7-3)。

图7-3 线程的表示

进程之间的关系可以表示成依赖关系,如图7-4所示。

图7-4 进程之间的依赖关系

线程与其所属的进程属于一种组合关系,如图7-5所示。

图7-5 线程与进程的关系

我们也需要把设计元素分配到进程中,图7-6是线程中包含的类。

图7-6 线程包含的类

通过把系统中所有的进程、线程及类的关系表达出来就形成了进程视图,如图7-7所示。

图7-7 进程视图