目录
一.详细设计概述
1.出发点
详细设计在体系结构设计之后进行,以需求开发的结果(需求规格说明和需求分析文档)和软件体系结构的结果(软件体系结构设计方案与原型)为出发点~
体系结构设计主要关注的是高层设计 ,即给予反映高层抽象的构建层次;而详细设计一般进行中层设计和底层设计,更关注组成模块的内部结构及模块和类的内部
2.上下文
软件体系结构设计方案解决了需求中关键性的要求和约束,体系结构原型代码为详细设计提供了主要的代码框架。
详细设计的目的是实现所有的功能性需求和非功能性需求,所以要以需求作为详细设计的方向指引(即需求驱动)
详细设计的结果是能够知道程序员编程的详细设计文档 和详细设计原型代码~
在详细设计文档中需要明确定义:
- 模块结构及其接口(进一步的模块分解)
- 类结构、类的协作、类接口(面向对象分析方法)
- 控制结构与函数接口(结构化分析方法)
- 重要的数据结构和算法逻辑
原型代码则是在体系结构的基础上扩展落实详细设计的实现,以及对相应的详细设计进行验证~
二.结构化设计
1.思想
分解是一种降低复杂度的方法,按算法分解是一种最自然的分解方式~
设计者每次只需要将关注放在完整复杂算法中一个相对较简单的子过程,就会觉得系统的复杂性大大降低。按过程分解就是以算法为中心,对算法部分进行相应的分解------但同时会带来模块之间的复杂联系,不利于软件的团队开发~
2.过程
在结构化分析方法中数据流图是主要的建模技术~
结构化设计中使用的主要建模技术是结构图:按照自顶向下分解法,将系统分解为一个树状结构,每个节点代表一个模块或者一个方法,逐层分解直到将系统分解为一些列可操控的小的模块~
相邻的图之间通过线连接在一起,线上会通过箭头标明三种参数:输入、输出及输入输出参数~
通过结构图,我们可以知道系统的复杂程度,以及每个方法能否可管理或者再被分解~
总的来说,结构化设计的工作重心之一就是将数据流图转换成结构图,过程如下:
- 寻找到输入的最高抽象点and输出的最高抽象点(重点关注那些输入数据停止作为输入并变成某种内部数据的点)
- 根据输入、输出的最高抽象点,对模块进行划分
- 再依次对每个模块寻找最高抽象点,再进行模块分解,从而逐步求精得到树状的结构图
三.面向对象设计
1.思想
将世界抽象为一系列具有一定职责的自由数据个体,他们相互协作,共同完成高级的行为~
每个数据个体除了自己独有的数据信息之外,还包含一些依赖这些数据信息所能够做的事情(算法)
个体只是行使自己的职责,而遇到自己无法完成的事情,则会通过互相发送信息,要求其他个体来做他们能够做的事情,从而共同组成一些复杂的行为~
2.过程
设计模型建立:
- 通过职责建立静态设计模型
- 通过协作建立动态设计模型
设计模型重构:
- 根据模块化的思想进行重构,目标为高内聚、低耦合
- 根据信息隐藏的思想重构,目标为隐藏职责与变更
3.通过职责建立静态模型
- 抽象对象的职责:类是对对象的抽象,是对所有具有相同属性和相同行为的对象族的一种抽象;一个对象就是类的一个实例:类的职责主要由两部分组成:属性职责和方法职责,属性主要表示对象的状态,方法主要表示对象的行为
- 抽象类之间的关系:类和类之间也不是孤立存在的,他们之间关系的强弱是没有异议的:依赖<关联<聚合<组合<继承
- 添加辅助类:在需求分析阶段,我们分析用例表述,得到许多概念类------这些类也是我们设计模型中间的候选类;但是候选类往往不可能实现所有的功能,所以可能需要添加一些辅助类,例如接口类、记录类、启动类、控制器类等
4.通过协作建立动态模型
抽象对象之间的协作设计方法:
- 从小到大,将对象的小职责聚合形成大职责
- 从大到小,将大职责分配给各个小对象
顺序图可以用来表示对象之间的协作:
明确对象的创建:某种意义上,对象也是对象创建出来的
选择合适的控制风格:一般可以分为集中式、委托式、分散式~
四.为类间协作开发集成测试用例
软件体系结构的多个模块因为被独立开发而需要进行集成测试,同样的道理,每个类也是被独立开发的,也可能会产生集成的问题,也需要进行集成测试~
五.详细设计文档描述
为了团队协作与交流,软件详细设计方案也需要进行文档描述------软件详细设计文档更加强调模块内部的结构和行为,例如类图、类接口定义、类协作、复杂数据结构定义等
六.详细设计的评审
评审的过程与体系结构评审时基本相同,只是关注点有所不同~