7.3 系统设计阶段和步骤
系统设计是对问题的解和建立解法的高层决策。它包括解决将整个系统划分为子系统、确定子系统的软件和硬件部分的分配、为详细设计指定框架等问题。
7.3.1 系统划分
在系统设计的开始阶段,需要将整个系统划分为一系统列易于驾驭的子系统。各个子系统共享某些公共特征,并完成系统某一方面的功能。
子系统是类、关联、操作、事件和约束的结合体。其划分通常是其所提供的服务来确定的。一般情况下,每个子系统提供一种服务,并且在其他子系统中是相对独立的,但单个子系统并不完整,只有将各个子系统按照某种方式进行组合形成总系统后,才能完整地完成系统预定的功能。
将一个系统分割为一系列子系统的主要方法是利用水平分层和垂直分割。层还可以被分割,而分割也可以进一步分层。利用分层和分割的混合,最终可以形成一个个相互独立的子系统。图7.14是一个涉及到应用和图形交互的典型应用的分层分割块图,最终得到的每个块都可以作为子系统。
应用程序包
用户对话控制
窗口图形
模拟程序包
屏幕图形
点阵图形
操作系统
计算机硬件
图7.14 一个典型应用的分层分割块图当顶层的子系统被确定后,接下来的工作便是表示在具有数据流图的各个子系统之间的信息流。通常将一个子系统设置为主控系统,通过信息流控制与其他子系统的所有相互作用。为了减少子系统之间的相互影响,可以使用简单的拓扑技术。
在进行系统划分时需要综合使用水平分层和垂直分割,大部分系统的划分都是分层和分割的混合。在水平分层中,各层所使用的抽象等级可以是不同的。但在同一层中的类、关联、操作、事件和约束应该是协调的,每个层次的组成部分都有应该是该层服务的客户,并为该层所完成的服务提供相应的支持。根据这一原则,总可以将系统分割为相对独立的若干部分,其中的每一部分执行一个特定的一般服务种类。另外,还需要考虑如何将这些划分出来的子系统有效在组织起来,协调地完成系统预定的功能。
7.3.2 设计阶段
在系统设计阶段,必须确定解决问题的基本方法以及系统的高层结构组成。系统设计阶段最重要的工作是确定系统结构,包括将系统划分成子系统、确定子系统的本质特征、确定数据管理策略、协调子系统软硬件和全局资源分配、确定软件控制的实现方法、考虑系统的边界条件和交替使用优先权等问题。
数据管理策略是保证系统对数据的有效管理,它可能制约系统运行的效率和可靠性,因此数据管理策略便显得更为重要。在系统结构中,可以为数据存储划分独立的子系统,并由该子系统与其他子系统的交互完成系统数据的管理。在数据管理中,分为内存数据管理和外部数据管理。内存数据管理的关键在于合理组织内存数据结构,根据数据使用的实际特点合理设置数据属性。在外部数据管理中,可以利用文件和数据库。前者实现简单,层次低,程序代码多,而数据库的系统开销较大,对系统的运行效率有影响。在确定数据管理策略时应根据实际情况的需要,在复杂性和系统开销等方面进行合理的协调。
合理地分配硬件资源。设计人员必须正确地估计系统运行平台的计算能力和硬件结构的影响,必要时可以进行硬件网络的分割。分割的基本原则是在物理区域模块中取得最小的通信花费。一个常用的公共机制是建立一个“公园”对象,由该对象管理全局资源。
软件控制能有效地协调过程驱动、事件驱动和同时发生。软件控制对过程驱动系统的控制是通过在程序代码内驻留、利用执行程序数目和位置、过程调用堆栈以及局部变量定义来确定系统的状态,并决定相应的响应动作。在事件驱动中,软件控制在调度者或监控中驻留,了解应用过程所涉及的事件,并在相应的事件发生时进行调度控制。事件驱动比过程驱动更加柔性化。
系统设计者还必须考虑系统的边界条件:初始化、终结和异常及错误处理。否则会发生系统崩溃。
值得注意的是,系统结构的基本方面是在时间和空间的交替使用过程中体现的,对这些交替变化的控制策略应根据系统应用的目的来做出正确的决策。
7.3.3 设计步骤
在面向对象系统设计中,一般需要进行如下几个步骤:
(1) 将系统分层分割,细分成一系统子系统。
(2) 标识问题的一致性特性。
(3) 给子系统分配处理程序和任务。
(4) 根据数据结构、文件和数据库,为实现数据存储选择基本策略。
(5) 标识全局资源和确定控制访问这些资源的机制。
(6) 选择实现软件控制方法:
①保持状态的程序内使用分配方法。
②直接地实现状态机制。
③使用一致性任务。
(7) 考虑边界条件。
(8) 建立交替使用的优先权。