1、第第1212章章 控制驱动部分的设计控制驱动部分的设计 12.1 12.1 什么是控制驱动部分什么是控制驱动部分 12.2 12.2 相关技术问题相关技术问题 12.3 12.3 如何设计控制驱动部分如何设计控制驱动部分 控制驱动部分是控制驱动部分是OODOOD模型的一个外围组成部分。模型的一个外围组成部分。该部分由系统中全部主动类构成。这些主动类该部分由系统中全部主动类构成。这些主动类描述了整个系统中所有主动对象,每个主动对描述了整个系统中所有主动对象,每个主动对象是系统中一个控制流动驱动者。象是系统中一个控制流动驱动者。12.1 12.1 什么是控制驱动部分什么是控制驱动部分 控制流(控制
2、流(control flowcontrol flow)是一个在处理机上顺)是一个在处理机上顺序执行的动作序列。在目前的实现技术中,一序执行的动作序列。在目前的实现技术中,一个控制流就是一个进程或者一个线程,在个控制流就是一个进程或者一个线程,在UMLUML的文献中称之为控制流。的文献中称之为控制流。在在OODOOD中,把系统中所有的主动对象表示清楚,中,把系统中所有的主动对象表示清楚,就抓住了系统中每个控制流的源头,就可以把就抓住了系统中每个控制流的源头,就可以把并发执行的所有的控制流梳理出清晰的脉络,并发执行的所有的控制流梳理出清晰的脉络,所有的主动对象都用主动类描述,所有的主动所有的主动对
3、象都用主动类描述,所有的主动类构成类构成OODOOD模型的控制驱动部分。模型的控制驱动部分。12.2 12.2 相关技术问题相关技术问题 本节将从系统总体方案、软件体系结构、分布本节将从系统总体方案、软件体系结构、分布式系统的体系结构风格以及系统的并发性这几式系统的体系结构风格以及系统的并发性这几方面探讨控制驱动部分的设计中的技术问题方面探讨控制驱动部分的设计中的技术问题 。12.2.1 12.2.1 系统总体方案系统总体方案 要开发一个较大的计算机应用系统,首先要制要开发一个较大的计算机应用系统,首先要制定一个系统总体方案。系统总体方案的内容包定一个系统总体方案。系统总体方案的内容包括:括:
4、(1 1)项目的背景、目标与意义。)项目的背景、目标与意义。(2 2)系统的应用范围。)系统的应用范围。(3 3)对需求的简要描述,采用的主要技术。)对需求的简要描述,采用的主要技术。(4 4)使用的硬件设备、网络设施和商品软件。)使用的硬件设备、网络设施和商品软件。(5 5)选择的软件体结构风格。)选择的软件体结构风格。(6 6)规划中的网络拓扑结构。)规划中的网络拓扑结构。(7 7)子系统划分。)子系统划分。(8 8)系统分布方案。)系统分布方案。(9 9)经费预算、工期估计、风险分析。)经费预算、工期估计、风险分析。(1010)售后服务措施,对用户的培训计划。)售后服务措施,对用户的培训
5、计划。对于对于OODOOD模型中控制驱动部分的设计而言,总模型中控制驱动部分的设计而言,总体方案中所决定的下述问题是它的基本实现条体方案中所决定的下述问题是它的基本实现条件:件:(1 1)计算机硬件。)计算机硬件。(2 2)操作系统。)操作系统。(3 3)软件体系结构。)软件体系结构。(4 4)网络方案。)网络方案。(5 5)编程语言。)编程语言。(6 6)其他商品软件。)其他商品软件。12.2.2 12.2.2 软件体系结构软件体系结构 软件体系结构是对系统的组成与组织结构较为软件体系结构是对系统的组成与组织结构较为宏观的描述,它按照功能部件和部件之间的联宏观的描述,它按照功能部件和部件之间
6、的联系与约束来定义系统,着重于软件系统自身的系与约束来定义系统,着重于软件系统自身的整体结构和部件间的交互。整体结构和部件间的交互。部件和连接器被公认为体系结构的两大类构成部件和连接器被公认为体系结构的两大类构成部分。部件是软件系统的组成单元,在系统框部分。部件是软件系统的组成单元,在系统框架中起结构块的作用,是软件功能设计和实现架中起结构块的作用,是软件功能设计和实现的承载体。连接器是建立部件和部件之间连接的承载体。连接器是建立部件和部件之间连接的部件。的部件。以下是几种典型的软件体系结构风格:以下是几种典型的软件体系结构风格:(1 1)管道与过滤器风格)管道与过滤器风格 (2 2)客户)客
7、户-服务器风格服务器风格 (3 3)面向对象风格)面向对象风格 (4 4)隐式调用风格)隐式调用风格 (5 5)仓库风格)仓库风格 (6 6)进程控制风格)进程控制风格 (7 7)解释器模型)解释器模型 (8 8)黑板风格)黑板风格 (9 9)层次风格)层次风格 (1010)数据抽象风格)数据抽象风格12.2.3 12.2.3 分布式系统的体系结构风格分布式系统的体系结构风格 主机主机+仿真终端体系结构。以一台计算机为主仿真终端体系结构。以一台计算机为主机,其他计算机只作为它的远程仿真终端。从机,其他计算机只作为它的远程仿真终端。从应用系统的角度看,其软件体系结构和集中式应用系统的角度看,其软
8、件体系结构和集中式的系统没有本质性差别,因为其功能和数据都的系统没有本质性差别,因为其功能和数据都集中在主机上,其他计算机只相当于一些终端集中在主机上,其他计算机只相当于一些终端设备而已。设备而已。文件共享体系结构。在这种体系结构中,系统文件共享体系结构。在这种体系结构中,系统功能分布到网络的各个节点上,数据存放在一功能分布到网络的各个节点上,数据存放在一个被称作文件服务器的主机上。在某些系统中个被称作文件服务器的主机上。在某些系统中也可以把数据分布到各个节点上。也可以把数据分布到各个节点上。客户客户-服务器体系结构。这种体系结构把分布服务器体系结构。这种体系结构把分布在不同节点上的系统组成部
9、分之间的关系处理在不同节点上的系统组成部分之间的关系处理为请求服务和提供服务的关系,提供服务的计为请求服务和提供服务的关系,提供服务的计算机称作服务器,请求服务的计算机称作客户算机称作服务器,请求服务的计算机称作客户机。客户机。客户-服务器体系结构衍出生了一些特点服务器体系结构衍出生了一些特点各异的变种:各异的变种:(1 1)两层客户)两层客户-服务器体系结构服务器体系结构 这是早期最典型的客户这是早期最典型的客户-服务器体系结构。其服务器体系结构。其特点是明显地区分客户机和服务器,把提供给特点是明显地区分客户机和服务器,把提供给多个节点共享的公共服务集中在一台服务器上,多个节点共享的公共服务
10、集中在一台服务器上,客户机则只配备与本地业务处理有关的功能和客户机则只配备与本地业务处理有关的功能和数据。客户机和服务器构成两个界限分明的层数据。客户机和服务器构成两个界限分明的层次,这就是两层客户次,这就是两层客户-服务器结构。服务器结构。(2 2)对等式客户)对等式客户-服务器体系结构服务器体系结构 这种体系结构观点把客户机和服务器看成是这种体系结构观点把客户机和服务器看成是相对的。根据实际需要,系统中的每一台计算相对的。根据实际需要,系统中的每一台计算机既可以作为客户机,又可以作为服务器,即机既可以作为客户机,又可以作为服务器,即每一台计算机既可以请求其他节点提供服务,每一台计算机既可以
11、请求其他节点提供服务,又可以向其他节点提供服务。实际上,这是一又可以向其他节点提供服务。实际上,这是一种更具一般性的客户种更具一般性的客户-服务器体系结构形式,服务器体系结构形式,其他形式都可以看作这种形式的受限的特例。其他形式都可以看作这种形式的受限的特例。(3 3)三层客户)三层客户-服务器体系结构服务器体系结构 这种体系结构是在两层客户这种体系结构是在两层客户-服务器体系结构服务器体系结构基础上改进和发展的结果。其中包括数据服务基础上改进和发展的结果。其中包括数据服务器、应用服务器和客户机三个层次。数据服务器、应用服务器和客户机三个层次。数据服务器存储和管理被整个系统共享的数据,提供对器
12、存储和管理被整个系统共享的数据,提供对这些数据进行查询、更新、一致性维护等操作这些数据进行查询、更新、一致性维护等操作的服务。的服务。(4 4)瘦客户)瘦客户-服务器体系结构服务器体系结构 这种体系结构的思想是把分布到客户机上的功这种体系结构的思想是把分布到客户机上的功能尽可能减少。其目的是使客户机上软件的安能尽可能减少。其目的是使客户机上软件的安装、维护和升级变得很容易。在一个分布区域装、维护和升级变得很容易。在一个分布区域较广的大型系统中,末端的客户机数量最多,较广的大型系统中,末端的客户机数量最多,分布范围也最广,往往延伸到维护力量薄弱的分布范围也最广,往往延伸到维护力量薄弱的边远地区。
13、边远地区。(5 5)浏览器)浏览器-服务器体系结构服务器体系结构 瘦客户瘦客户-服务器的思想发展到极端,应用系统分服务器的思想发展到极端,应用系统分布到客户机上的软件成分就只剩下了一个浏览布到客户机上的软件成分就只剩下了一个浏览器。用户在浏览器上进行人机交互操作,浏览器。用户在浏览器上进行人机交互操作,浏览器把用户命令转换为对服务器的请求,并把得器把用户命令转换为对服务器的请求,并把得到的处理结果向用户显示。到的处理结果向用户显示。12.2.4 12.2.4 系统的并发性系统的并发性 在本小节关于并发系统的讨论中将使用在本小节关于并发系统的讨论中将使用“任任务务”、“进程进程”、“线程线程”、
14、“控制流控制流”、“主动对象主动对象”等一系列含义相近的术语。按以等一系列含义相近的术语。按以下的约定来使用这些术语:下的约定来使用这些术语:(1 1)在)在OOAOOA和和OODOOD中用主动对象的一个主动服务中用主动对象的一个主动服务来描述一个任务,用主动类来描述一类主动对来描述一个任务,用主动类来描述一类主动对象。象。(2 2)在从用户需求的角度或者在较高的抽象层)在从用户需求的角度或者在较高的抽象层次上讨论和认识系统的并发性时,使用任务的次上讨论和认识系统的并发性时,使用任务的概念,以明确系统中客观上要求有哪些任务并概念,以明确系统中客观上要求有哪些任务并发执行。发执行。(3 3)从逻
15、辑上看问题,忽略实现细节,可以说)从逻辑上看问题,忽略实现细节,可以说OODOOD模型中的一个主动对象的主动服务描述了模型中的一个主动对象的主动服务描述了一个控制流。一个控制流。(4 4)在实现阶段,主动对象、主动类的概念仍)在实现阶段,主动对象、主动类的概念仍然存在,但是已被实现为程序代码中的对象和然存在,但是已被实现为程序代码中的对象和类,它们的每个主动服务将被具体地实现为进类,它们的每个主动服务将被具体地实现为进程或者线程。程或者线程。(5 5)把)把“任务任务”和和“控制流控制流”作为讨论问题、作为讨论问题、解释概念或陈述设计策略时使用的词汇,而把解释概念或陈述设计策略时使用的词汇,而
16、把“主动对象主动对象”、“主动类主动类”、“进程进程”作为模作为模型或程序中的元素或技术术语。型或程序中的元素或技术术语。顺序程序和并发程序:顺序程序和并发程序:(1 1)顺序程序中只有一件事在进行处理,即使)顺序程序中只有一件事在进行处理,即使程序中包括多项工作,也不会在一个时间段同程序中包括多项工作,也不会在一个时间段同时做两项(或以上)工作。程序中可以有分支、时做两项(或以上)工作。程序中可以有分支、循环、子程序调用等各种复杂情况,但是一切循环、子程序调用等各种复杂情况,但是一切都按确定的逻辑进行。都按确定的逻辑进行。(2 2)如果说系统要在同一段时间内执行多个任)如果说系统要在同一段时
17、间内执行多个任务,而这些任务之间又没有确定的时间关系,务,而这些任务之间又没有确定的时间关系,这种系统就是并发系统。描述并发系统的程序这种系统就是并发系统。描述并发系统的程序叫做并发程序。并发程序要执行的多个任务在叫做并发程序。并发程序要执行的多个任务在时间上没有确定的逻辑关系,但是又相互影响。时间上没有确定的逻辑关系,但是又相互影响。进程和线程:进程和线程:(1 1)进程是)进程是W.DijkstraW.Dijkstra、C.A.R.HoareC.A.R.Hoare和和P.B.HansenP.B.Hansen等人在等人在2020世纪世纪6060年代中期以后的一年代中期以后的一系列文章中提出并
18、逐渐完善的,它的全称是顺系列文章中提出并逐渐完善的,它的全称是顺序进程。采用进程的基本思想是:把一个并发序进程。采用进程的基本思想是:把一个并发程序分解成若干能够顺序执行的程序单位。每程序分解成若干能够顺序执行的程序单位。每一个这样的程序单位的一次执行就叫做一个顺一个这样的程序单位的一次执行就叫做一个顺序进程。序进程。(2 2)线程在进程之后出现,它可以看作是并发)线程在进程之后出现,它可以看作是并发程序设计技术的进一步发展,然而更重要的原程序设计技术的进一步发展,然而更重要的原因是由于并行计算技术的需要。进程既是处理因是由于并行计算技术的需要。进程既是处理机资源的分配单位又是其他资源的分配单
19、位;机资源的分配单位又是其他资源的分配单位;而线程只是处理机资源的分配单位。一个进程而线程只是处理机资源的分配单位。一个进程可以包含一个或者多个线程。可以包含一个或者多个线程。(3 3)从应用的角度看,进程的概念适合于解决)从应用的角度看,进程的概念适合于解决系统固有的并发性问题。系统固有的并发性问题。(4 4)从编程技术来看,线程概念的出现还有)从编程技术来看,线程概念的出现还有更重要的逻辑上的理由,那就是:一个进程的更重要的逻辑上的理由,那就是:一个进程的数据空间被该进程内的多个线程共享,使这些数据空间被该进程内的多个线程共享,使这些线程可以方便地交换信息。线程可以方便地交换信息。当前应用
20、系统的并发性。有些程序员虽然已经当前应用系统的并发性。有些程序员虽然已经成功地开发出许多并发的应用系统,但是他们成功地开发出许多并发的应用系统,但是他们并没有觉察到自己曾经面对并发程序设计的挑并没有觉察到自己曾经面对并发程序设计的挑战性问题。他们觉得,自己编写的程序和一个战性问题。他们觉得,自己编写的程序和一个顺序程序没有什么两样。原因在于当前的开发顺序程序没有什么两样。原因在于当前的开发环境和运行环境无形中已经帮助,甚至代替这环境和运行环境无形中已经帮助,甚至代替这些程序员解决了系统的并发问题。些程序员解决了系统的并发问题。12.3 12.3 如何设计控制驱动部分如何设计控制驱动部分 设计设
21、计OODOOD模型中控制驱动部分的关键,是识别模型中控制驱动部分的关键,是识别系统中所有并发执行的任务,然后用主动对象系统中所有并发执行的任务,然后用主动对象来表示这些任务。来表示这些任务。12.3.1 12.3.1 选择软件体系结构风格选择软件体系结构风格 分布式系统的设计中,除了采用面向对象风格分布式系统的设计中,除了采用面向对象风格以外,还需要在其他几种体系结构中做出选择。以外,还需要在其他几种体系结构中做出选择。主要的选择是客户主要的选择是客户-服务器体系结构的几个变服务器体系结构的几个变种,选择这些体系结构风格所考虑的因素包括:种,选择这些体系结构风格所考虑的因素包括:(1 1)被开
22、发系统的特点。)被开发系统的特点。(2 2)网络协议。)网络协议。(3 3)可用的软件产品。)可用的软件产品。(4 4)成本及其他,包括购置相应硬件及软件的)成本及其他,包括购置相应硬件及软件的成本、新开发软件的成本、系统的安装与维护成本、新开发软件的成本、系统的安装与维护成本。成本。12.3.2 12.3.2 确定系统分布方案确定系统分布方案 随着软件体系结构风格的选择,系统中的每个随着软件体系结构风格的选择,系统中的每个节点采用何种计算机以及它们之间如何连接也节点采用何种计算机以及它们之间如何连接也都将逐一明确。被开发的软件将分布到这些节都将逐一明确。被开发的软件将分布到这些节点上。面对一
23、个分散的计算环境,要考虑如何点上。面对一个分散的计算环境,要考虑如何把对象分布到通过网络相连的各台计算机上。把对象分布到通过网络相连的各台计算机上。本小节围绕这一目标,讨论对象的分布、类的本小节围绕这一目标,讨论对象的分布、类的分布以及如何在模型中表示这种分布方案。分布以及如何在模型中表示这种分布方案。对象的分布。这里首先针对一般情况讨论对象对象的分布。这里首先针对一般情况讨论对象分布策略:分布策略:1 1)由数据决定对象分布,这又包括以下几点:)由数据决定对象分布,这又包括以下几点:(1 1)当应用系统中一个类的对象实例需要在文)当应用系统中一个类的对象实例需要在文件或关系数据库中存储时,则
24、定义与这个类的件或关系数据库中存储时,则定义与这个类的数据结构一致的文件或数据库表。数据结构一致的文件或数据库表。(2 2)该类的每个对象实例用文件的一个)该类的每个对象实例用文件的一个记录或者用数据库的一个元组保存。当记录或者用数据库的一个元组保存。当一个类有大量的对象实例时,通常只把一个类有大量的对象实例时,通常只把当前正在被处理的对象读到内存,所以当前正在被处理的对象读到内存,所以一般只需要为该类定义少量的内存空间一般只需要为该类定义少量的内存空间的对象。的对象。(3 3)需要设计一个名为)需要设计一个名为“对象存取器对象存取器”的对象的对象类,其功能是负责把内存中的对象实例保存到类,其
25、功能是负责把内存中的对象实例保存到文件或数据库表中以及把文件或数据库表中的文件或数据库表中以及把文件或数据库表中的对象数据恢复成内存中的一个对象。对象数据恢复成内存中的一个对象。2 2)由功能决定对象分布)由功能决定对象分布3 3)追踪消息)追踪消息 4 4)Use CaseUse Case 类的分布。关于类的分布,具体做法如下:类的分布。关于类的分布,具体做法如下:(1 1)如果整个系统只需要在一个节点上创建某)如果整个系统只需要在一个节点上创建某个类的对象实例,那么这个类就分布在这个节个类的对象实例,那么这个类就分布在这个节点上。点上。(2 2)如果系统需要在多个节点上创建同一个类)如果系
26、统需要在多个节点上创建同一个类的对象实例,那么这个类主要分布在每个需要的对象实例,那么这个类主要分布在每个需要它的节点上。可以把其中一个节点上的这个类它的节点上。可以把其中一个节点上的这个类作为正本,而把其他节点上出现的这个类表示作为正本,而把其他节点上出现的这个类表示为副本。作为副本的类可以采用如图为副本。作为副本的类可以采用如图12-112-1所示所示的表示法。的表示法。classname副本图图12-112-1 类图的划分。为了表明对象和类在各个节点上类图的划分。为了表明对象和类在各个节点上的分布情况,需要在类图上采取相应的组织措的分布情况,需要在类图上采取相应的组织措施,把描述整个系统
27、的集中式的类图分散到各施,把描述整个系统的集中式的类图分散到各个节点上,以分别描述分布在各个节点上的对个节点上,以分别描述分布在各个节点上的对象;最后要把每个节点上的类组织成一个主题。象;最后要把每个节点上的类组织成一个主题。具体策略有以下两种:具体策略有以下两种:(1 1)把每个节点的主题看成是在整个系统的类)把每个节点的主题看成是在整个系统的类图上划分出来的一个局部。图上划分出来的一个局部。(2 2)把每个节点上的主题看成一个独立的子)把每个节点上的主题看成一个独立的子系统,用一个定义完整的类图表示。系统,用一个定义完整的类图表示。在类描述模板中的表示。下面给出类描述模板在类描述模板中的表
28、示。下面给出类描述模板的描述格式:的描述格式:对象实例:对象实例:处理机:处理机:,;内存对象:内存对象:nn元数组元数组;外存对象:外存对象:;12.3.3 12.3.3 识别控制流识别控制流 以节点为单位识别控制流。以每个节点为单以节点为单位识别控制流。以每个节点为单位考虑在每个节点上运行的程序还需要如何并位考虑在每个节点上运行的程序还需要如何并发,需要设计哪些控制流以及各个节点之间如发,需要设计哪些控制流以及各个节点之间如何相互通信。以节点为单位识别控制流是本小何相互通信。以节点为单位识别控制流是本小节讨论的前提。节讨论的前提。从用户需求出发认识控制流。现在需要考虑的从用户需求出发认识控
29、制流。现在需要考虑的是,每一个节点上的功能,还有哪些任务必须是,每一个节点上的功能,还有哪些任务必须在同一台计算机上并发地执行。在同一台计算机上并发地执行。从从Use CaseUse Case认识控制流。在以下情况下应考虑认识控制流。在以下情况下应考虑针对一个针对一个Use CaseUse Case设计相应的控制线程:设计相应的控制线程:(1 1)用户希望一个)用户希望一个Use CaseUse Case所描述的功能在必所描述的功能在必要时能够与系统的其他功能同时进行处理。要时能够与系统的其他功能同时进行处理。(2 2)一个)一个Use CaseUse Case所描述的功能是对系统中随所描述的
30、功能是对系统中随机发生的异常事件(例如某一种中断信号)进机发生的异常事件(例如某一种中断信号)进行异常处理的。行异常处理的。(3 3)对一个)对一个Use CaseUse Case所描述的功能,用户可以所描述的功能,用户可以在未经系统提示的情况下随时要求执行,这样在未经系统提示的情况下随时要求执行,这样的的Use CaseUse Case一般应由一个专门的控制流去处理。一般应由一个专门的控制流去处理。为改善性能而增设的控制流。除了满足系统固为改善性能而增设的控制流。除了满足系统固有的并发要求之外,为了改善性能,可能需要有的并发要求之外,为了改善性能,可能需要增设执行以下几类任务的控制流:增设执
31、行以下几类任务的控制流:(1 1)低优先级任务)低优先级任务 (2 2)高优先级任务)高优先级任务 (3 3)紧急任务)紧急任务 参照参照OOAOOA模型中的主动对象。主动对象的一个模型中的主动对象。主动对象的一个主动服务,是在创建之后不必接收其他对象的主动服务,是在创建之后不必接收其他对象的消息就可以主动执行的服务,从系统运行的角消息就可以主动执行的服务,从系统运行的角度看,这意味着主动对象的一个主动服务是一度看,这意味着主动对象的一个主动服务是一个控制流的源头,在个控制流的源头,在OODOOD中,通过考察中,通过考察OOAOOA模型模型中的主动对象可帮助确定这些控制流。中的主动对象可帮助确
32、定这些控制流。实现并行计算的控制流。如果被开发的系统包实现并行计算的控制流。如果被开发的系统包含并行计算问题,那么由一个任务分解成的每含并行计算问题,那么由一个任务分解成的每个可并行计算的子任务都应被设计为一个控制个可并行计算的子任务都应被设计为一个控制流。通常是用一个重量级的控制流流。通常是用一个重量级的控制流进程实进程实现一个任务,用若干轻量级的控制流现一个任务,用若干轻量级的控制流线程线程实现各个子任务。实现各个子任务。对其他控制流进行协调的控制流。当一个节点对其他控制流进行协调的控制流。当一个节点上有多个控制流存在时,往往需要设计一个对上有多个控制流存在时,往往需要设计一个对这些控制流
33、进行协调和管理的控制流。这些控制流进行协调和管理的控制流。实现节点之间通信的控制流。在有些情况下可实现节点之间通信的控制流。在有些情况下可能不需要设计专门负责节点之间通信的控制流。能不需要设计专门负责节点之间通信的控制流。但是在有些情况下,为了实现的方便,可能要但是在有些情况下,为了实现的方便,可能要设计一些专门负责与其他节点通信的控制流。设计一些专门负责与其他节点通信的控制流。12.3.4 12.3.4 用主动对象表示控制流用主动对象表示控制流 确定了系统中需要设立哪些控制流之后,面对确定了系统中需要设立哪些控制流之后,面对的问题就是如何表示这些控制流。在面向对象的问题就是如何表示这些控制流
34、。在面向对象系统模型中,系统的一切行为都是通过对象的系统模型中,系统的一切行为都是通过对象的服务以及它们之间的消息来表示的。控制流在服务以及它们之间的消息来表示的。控制流在这种由代表对象类的方块和它们之间的各种关这种由代表对象类的方块和它们之间的各种关系连接线所构成的类图中,实际上并没有被显系连接线所构成的类图中,实际上并没有被显示地表示,而是被隐含表示的。示地表示,而是被隐含表示的。以过程抽象的观点看服务之间的调用。按照这以过程抽象的观点看服务之间的调用。按照这种观点,从一个主动对象的主动服务开始,被种观点,从一个主动对象的主动服务开始,被它直接或间接调用的所有其他对象服务都是这它直接或间接
35、调用的所有其他对象服务都是这个主动服务所描述的行为的一部分。主动服务个主动服务所描述的行为的一部分。主动服务的一次执行以及被它引起的一系列被调用服务的一次执行以及被它引起的一系列被调用服务的执行就是一个控制流。根据过程抽象的原则,的执行就是一个控制流。根据过程抽象的原则,可以说:主动服务的一次执行就是一个控制流。可以说:主动服务的一次执行就是一个控制流。在主动对象的表示中区别进程和线程。在在主动对象的表示中区别进程和线程。在OODOOD中,由于要区别一个主动服务所表示的控制流中,由于要区别一个主动服务所表示的控制流究竟是进程还是线程,所以要在上述表示法基究竟是进程还是线程,所以要在上述表示法基
36、础上,通过一定的书写规则对二者加以区别,础上,通过一定的书写规则对二者加以区别,即:如果一个主动服务需要被实现为进程,则即:如果一个主动服务需要被实现为进程,则在书写时对齐服务栏的最左边,如图在书写时对齐服务栏的最左边,如图12-212-2(a a)所示;如果一个主动服务需要被实现为线程,所示;如果一个主动服务需要被实现为线程,则在服务栏中缩进一格开始书写,如图则在服务栏中缩进一格开始书写,如图12-212-2(b b)所示。)所示。主动类名主动服务主动类名主动服务(a)进程(b)线程图图12-212-2 应用规则。用主动对象表示控制流,应遵循下应用规则。用主动对象表示控制流,应遵循下列应用规
37、划:列应用规划:(1 1)在一个表示进程的主动对象中,有且仅有)在一个表示进程的主动对象中,有且仅有一个表示进程的主动服务。一个表示进程的主动服务。(2 2)如果要把一个进程和隶属于它的线程分散)如果要把一个进程和隶属于它的线程分散到不同的对象中去表示,则尽可能使每个对象到不同的对象中去表示,则尽可能使每个对象中只含有一个表示线程的服务。中只含有一个表示线程的服务。(3 3)如果要把进程和隶属于它的线程放在一个)如果要把进程和隶属于它的线程放在一个对象中表示,就应该把这个进程的全部线程都对象中表示,就应该把这个进程的全部线程都放在同一个对象中。放在同一个对象中。12.3.5 12.3.5 把控
38、制驱动部分看作一个主题把控制驱动部分看作一个主题 对分布式的应用系统而言,在对分布式的应用系统而言,在OODOOD模型中用主模型中用主题表示系统在各个节点上的分布情况是必要的,题表示系统在各个节点上的分布情况是必要的,因为它们有助于识别并发执行的控制流,也便因为它们有助于识别并发执行的控制流,也便于针对不同的节点分别进行系统实现。于针对不同的节点分别进行系统实现。小结小结 本章介绍控制驱动部分的设计。首先介绍了什本章介绍控制驱动部分的设计。首先介绍了什么是控制驱动部分以及相关技术问题。然后给么是控制驱动部分以及相关技术问题。然后给出控制驱动部分的具体设计步骤和方法。出控制驱动部分的具体设计步骤和方法。