面向对象的控制驱动部分--总结

来源:互联网 发布:天网 软件 编辑:程序博客网 时间:2024/05/16 06:07
为了描述问题域固有的并发行为,表达实现所需的设计决策,需要在OOD部分对控制驱动部分进行建模。

控制流驱动部分,用于定义和表示并发系统中的每个控制流。
——用主动对象表示每个控制流(进程、线程)

——所有的主动类构成控制流驱动部分


在面向对象中,用一个主动对象表示一个独立的控制流,该对象驱动进程或线程,也即每个控制流都以一个表示独立的进程或线程的主动对象为根。

既然每个控制流都以一个表示进程或线程的主动对象为根,这意味着:控制流的创建与撤消的时机分别为:
a、创建一个主动对象,就启动了相关的控制流,从此按照程序的操作逻辑,就开始了层层调用,形成了一个控制流。
b、撤消主动对象,就终止了相关的控制流;也即在主动对象被撤消后,它所代表的线程或进程就终止了。

对控制驱动部分建模,通常:
用包括主动类的类图捕捉控制流的静态结构
用包括主动对象的顺序图或通信图捕捉控制流的动态行为


如何进行控制驱动部分的设计?
a、 
识别控制流
1)OOA定义的主动对象:这是由业务逻辑所决定的
2)系统的并发需求所要求的多控制流:若要求多项工作同时进行,则每一项工作就是一个控制流。例如,销售与统计。
3)系统分布方案所要求的多控制流:每一个分布站点至少有一个控制流
4)根据任务的紧急程度设置控制流
高优先控制流,低优先控制流,紧急控制流;
5)为实现方便设立的控制流 例如:负责处理机之间通讯的控制流
6)对异常事件的处理:由于异常事件的发生,不能在程序的某个可预知的控制点进行处理,应该设立一个专门的控制流进行处理异常事件。
7)实现并行计算
通常用一个进程实现一个计算任务,用线程实现各子任务。

8)设置起协调者作用的控制流
若有多个控制流需要相互交换信息,可考虑增设一个或多个控制流,对相应的控制流起协调者的作用。


b、审查与调整
过度并发性意味着执行效率的损失;
考虑控制流之间职责的均衡分布情况,它们之间协作的情况,以保证每个控制流是高内聚的,且与相关的控制流是松耦合的;
每个控制流应该有以上列举的理由之一,除非由明确的其他理由。

c、定义各控制流 
描述控制流:对控制流命名,并进行简要说明;为控制流指定操作对设计部分的每个操作指定它属于哪个控制流;要保证每个操作属于一个控制流。
定义各控制流的细节:若控制流由事件驱动,则要描述触发控制流的条件。例如,若控制流由时钟驱动,则可能要描述触发之前所经历的时间间隔;考虑描述控制流从那里取数据和往那里送数据之类的情况 


d、控制流间的通信 

操作调用
邮箱
共享存储器
远程过程调用


e、控制流间的同步
可能有多个控制流使用一个对象中的同一个操作
可能有不同的控制流使用一个对象中的不同操作
当一个对象在同一时刻有多个控制流通过时,就可能要出现问题。即可能导致对象的状态混乱。对这个问题处理不当,会导致并发系统失败。 

0 0
原创粉丝点击