10.4 系统设计
面向对象的设计可以划分为系统设计和对象设计两个阶段。系统设计关注于确定实现系统的策略和目标系统的高层结构。开发人员将问题分解为若干个子系统,子系统和子系统之间通过接口进行联系。
一般来说,常用的系统设计的步骤为:将系统分解为子系统—>设计问题域子系统—>设计人机交互子系统—>设计任务管理子系统—>设计数据管理子系统。
将系统分解为若干子系统要按照一定的拓扑关系,比如树形、星形等。问题域是指应用问题直接相关的类或对象。对问题域子系统的设计,即定义这些类或对象的细节。虽然在面向对象的需求分析过程中已经标识和定义了系统的类与对象,以及他们之间的各种关系,但是,随着对需求理解的加深和对系统认识程度的逐步提高,开发人员还应该在面向对象的设计阶段对需求分析阶段得到的目标系统的分析模型进行修正和完善。
系统设计的步骤如下。
(1)将分析模型划分成子系统。在OO系统设计中,我们把分析模型中紧密相关的类、关系等设计元素包装成子系统。
通常,子系统的所有元素共享某些公共的性质。
①它们可能都涉及完成相同的功能;
②它们可能驻留在相同的产品硬件中;
③它们可能管理相同的类和资源。
子系统由它们的责任所刻画,即一个子系统可以通过它提供的服务来标识。在OOD中,这种服务是完成特定功能的一组操作。
子系统的设计通常具有如下四个准则:
①子系统应具有定义良好的接口,通过接口和系统的其他部分通信;
②除了少数的“通信类”外,子系统中的类应只和该子系统中的其他类协作;
③子系统的数量不宜太多;
④可以在子系统内部再次划分,以降低复杂性。
(2)标识问题本身的并发性,并为子系统分配处理器。通过对对象行为模型的分析,可发现系统的并发性。如果对象(或子系统)不是同时活动的,则它们不需并发处理,此时这些对象(或子系统)可以在同一个处理器上实现。反之,如果对象(或子系统)必须对一些事件同时异步地动作,则它们被视为并发的,此时,可以将并发的子系统分别分配到不同的处理器,或者分配在同一个处理器,而由操作系统提供并发支持。
(3)任务管理设计。Coad和Yourdon提出如下管理并发任务对象的设计策略。
①确定任务的类型;
②必要时,定义协调者任务和关联的对象;
③将协调者任务和其他任务集成。
通常可通过了解任务是如何被启动的来确定任务的类型,如事件驱动任务,时钟驱动任务。每个任务应该定义其优先级,并识别关键任务。当有多个任务时还可以考虑增加一个协调者任务,以控制这些任务协同工作。
(4)数据管理设计。数据管理的设计包括设计系统中各种数据对象的存储方式(如内部数据结构、文件、数据库),以及设计相应的服务,即为要储存的对象增加所需的属性和操作。
(5)资源管理设计。OO系统可利用一系列不同的资源(如磁盘驱动器、处理器、通信线路等外部实体或数据库、对象等抽象资源),很多情况下,子系统同时竞争这些资源,因此要设计一套控制机制和安全机制,以控制对资源的访问,避免对资源使用的冲突。(https://www.daowen.com)
(6)人机界面设计。对大多数应用系统而言,人机界面本身是一个非常重要的子系统。人机界面主要强调人如何命令系统,以及系统如何向人提交信息。它包括窗口、菜单、报告的设计。
(7)子系统间的通信。子系统之间可以通过建立客户/服务器连接进行通信,也可以通过端对端(peer to peer)连接进行通信。我们必须确定子系统间通信的合约(contract),合约提供了一个子系统和另一个子系统交互的方式。
例10.1 结合9.4节案例,完成系统设计。
患者监护系统是一个全面监控病人和对病人病历查询的系统,所以根据其功能需要窗口录入病人的基本信息,还要方便查询的多窗口设计,并且要能绘制出病人的日常生理日志的变化曲线图。由于本系统要自动发出警告,在录入病人生理正常信息需要设计数据窗口,还要随时能从数据库中调用,以便和监控设备传回的数据进行比较,要设定最大变化和最小变化,发出警告的信息中要有房间号码和床位号码,以便知道哪个病人出现了异常,对监控设备传回的信息备份,设置定时起(每隔多长时间对传回的数据进行备份),还要分开设置重病和较轻的病人,以便监控,能对传回的数据画出曲线图,并对每个病人的生理指数能够清楚的查询,同时允许医生修改病人的正常生理数。
(1)基本设计概念和处理流程如图10.1所示。

图10.1 处理流程
(2)系统结构设计如图10.2所示。

图10.2 系统结构
(3)系统功能模块设计如图10.3所示。

图10.3 系统功能
(4)数据库设计。本系统一个是能够保存病人的资料,其中包括字段姓名、性别、年龄、联系方式、正常的生理指数、病人所在的病房及床位号码。该表主要保存病人的一些基本治疗生理指数,以便能与传回的数字相比较,得出该病人生理指数是否正常。
另一个是能够保存仪器随时传回的数据,其中包括有房间号和病床号,以及仪器所传回的生理数字段(如脉搏、体温、血压、心电图等,根据具体的情况来填写)。
两个实体之间用病房号和病床号连接。
具体表设计如表10.1至表10.3所示。
表10.1 “生理信号”表

表10.2 “患者”表

表10.3 “患者生理信号安全范围”表
