1
面向对象软件工程实践指南
1.2.7.1 7.1 设计阶段的主要内容
7.1 设计阶段的主要内容

设计阶段需要在不同层次上进行决策。一般把这种决策分为两个层次:系统设计层和对象设计层。主要内容包括如下设计。

1)系统设计

系统设计是有关系统总体构成的决定。对于一个具有一定复杂度的系统,一般而言需要把它分解为子系统,以此来增加各个子系统的可重用性,降低开发难度,也使得各个团队可以并行开发。

随着技术的发展,出现了具有不同结构特征的系统框架范型,包括web系统、客户/服务器系统、对等系统等。可以按照这些系统架构去进行系统设计,划分子系统的构成,确定各个子系统的接口。同时,目前也出现了许多中间件与软件框架,开发系统时可以利用这些中间件、软件框架从而降低开发难度,提高开发效率。使用成熟的中间件、软件框架进行开发也有助于提高系统的质量。

在系统设计时,要考虑系统的各种设计目标、与其他系统的集成、将来的维护需求、技术风险等因素。这些设计目标有时候可能会相互冲突,需要在设计中对这些设计目标进行权衡,做出合理的决策。

2)对象设计

在系统设计的基础上,需要进一步确定涉及的软件对象,每个软件类(此处也称为设计类)的属性、方法的详细定义,软件对象之间的具体交互形式。我们从分析阶段的对象模型中获得启发,从中把软件要实现的对应类抽取出来,再参考分析阶段的动态模型,构造设计阶段的动态模型,并添加必要的类。由于软件自有其独特之处,考虑到软件的可理解性、性能、未来的可重用性、重用已有类或者子系统等因素,得到细化后的对象模型、动态模型,给软件实现以直接的指导。在设计时,要灵活运用设计原则,一方面要考虑未来可能的变化,强调架构的灵活性,另一方面,也要避免过于复杂的设计。

3)运行设计

随着软件系统的功能越来越复杂,性能要求越来越高,现代软件涉及多进程、多线程的越来越多。运行设计就是设计进程、线程和它们的运行关系,并把设计元素分配到进程、线程中去。

4)实现设计

软件需要通过开发工具,编写代码,并经过编译形成可执行文件。我们需要定义开发过程中采用的工具、编写的文件以及它们的依赖关系。同时,也需要定义编译以后生成的组件以及它们的依赖关系。

5)软硬件部署设计

软件最终需要部署到硬件上才能得到运行。因此,硬件平台配置(包括计算机的配置、网络的配置、各种专门硬件如存储系统、各种外设如打印机等)、软件各个部分以什么样的形式分布在硬件系统上也是需要在设计阶段确定的。

6)数据管理设计

软件系统中都会涉及数据的管理问题。尽管面向对象系统中已经把数据和操作封装在一起,我们依然需要考虑数据持久化的问题。数据持久化是指数据的保存。究竟采用何种数据保存的方式,以及具体的数据保存格式会对数据的访问效率产生根本性的影响。

7)其他设计问题

软件设计中还要针对设计目标进行针对性的考虑。例如针对安全性,就有许多方面需要考虑,包括访问控制、数据安全、防攻击等;针对可靠性,包括防错、容错等。

我们将在本章中对这些设计步骤进行逐一介绍。需要指出的是软件设计是一个迭代的过程,也就是说,它并非是沿着系统设计、对象设计、运行设计、实现设计、软硬件部署设计、数据管理设计、其他设计这样一个线性过程,而是这些步骤的交错迭代过程。

设计阶段的主要交付物包括:

(1)软件设计模型。

(2)软件架构文档。