1. 软件的总体结构主要要回答的问题
- 软件的组成部分
- 软件的层次关系
- 模块的内部处理逻辑
- 模块之间的界面
2. 软件设计方法
- 结构化设计方法(SD)
- 面向数据结构的设计方法(JSD)
- 面向对象的设计方法(OOD)
3. 软件设计分为两个阶段
- 概要设计(总体设计)
确定软件的结构以及各组成成分(子系统或模块) - 详细设计
确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档
软件设计的基本概念
- 模块化
- 抽象与细化
- 信息隐蔽
- 软件复用
1. 模块化 模块化: 把程序划分成若干个模块, 每个模块完成一个子功能, 把这些模块集总起来组成一个整体,可以完成指定的功能,满足问题的功能. 模块: 一个拥有明确定义的输入、输出和特性的程序实体。
- 将系统划分成模块
- 决定每个模块的功能
- 决定模块的调用关系
- 决定模块的界面, 即模块间传递的数据
2. 抽象(Abstraction)与细化 抽象:解决问题时只考虑与问题有关的方面,不考虑与问题无关的方法。即抽出事物的本质特性而不考虑细节。 细化:即分解。在逐步细化中,特别强调这种分解的“逐步”性质,即每一部分仅较其前一步增加“少量”的细节。这样,在相信的两步之间就只有变化, 不难验证它们的内容是否等效。
3. 信息隐蔽 信息隐蔽的含义: 有效的模块化可以通过定义一级独立的模块来实现,这些模块相互之间只交流软件功能必需的信息。 换句话说:模块所包含的信息,不允许 其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。 信息隐蔽的基本原则:功能独立,高内聚且低耦合
模块化设计
模块化是好的软件设计的一个基本准则,可减小钥匙所需要的总工作 view source print /span>
分解 分解
|
高层模块 =======> 分解复杂问题 ========> 较小问题 |
1. 分解
view source print /span>
若C(p1) > C(p2), 则E(p1) > E(p2) |
其中p1和p2是两个问题,C(x)是由X问题决定的复杂性, E(X)是解决X问题所需要的工作量。 试验发现: view source print /span>
C(p1 + p2) > C(p1) + C(p2) |
E(p1 + p2) > E(p1) + E(p2) |
越小成本越低,但是集成成本却随着越小成功越高。如何确定模块划分的最小成本区,并保证模块的最佳性能,量设计活动中的主要任务之一。
2. 模块独立 性
1)模块独立性的概念:
- 模块完成独立的功能
- 符合信息隐蔽和信息局部化原则
- 模块间卷边和依赖程度尽量小
2)模块独立性的度量 模块独立性取决于模块的内部和外部特征。 SD方法提出的定性的度量标准:
- 模块自身的内聚性
- 模块之间的耦合性
模块独立性的度量之一:内聚性 一个模块内部各成分之间相互关联的强度。 设计目标:高内聚(一个模块的所有成分都直接参与 并县城对于完成同一功能来说都是最基本的) 内聚性越高,模块独立性越强,由低向高的内聚方式为:
- 巧合内聚
- 逻辑内聚
- 时间内聚
- 过程内聚
- 通信内聚
- 信息内聚
- 功能内聚
(1)巧合内聚 模块内各分部间无联系, 例: view source print /span>
MOVE O TO R
|
READ FILE F
|
MOVE S TO T
|
模块中的三个语句没有任何联系, 缺点:可理解性差, 可修改性差。
(2)逻辑内聚 把几种相关功能(逻辑上相似的功能)组合在一模块内, 每次调用由传给模块的参数确定执行哪种功能。
- 初始化系统模块
- 系统结束模块
- 紧急故障处理模块
(4)过程内聚 模块内各处理成分相关,且必须以特定次序执行
(5)通信内聚 模块内各部分使用相同的输入数据,或产生相同的输出结果
(6)信息内聚
信息内聚指模块写成多个功能,各个功能都在同一数据结构上操作,每个功能有唯一入口。如对同一个数据库的查找-添加-删除-修改模块
(7)功能内聚 模块仅包括为完成某个功能所必须的所有成分(模块所有成分共同完成一个功能,缺一不可)
模块独立性的度量之二 耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据 耦合性越高,模块独立性越弱, 耦合强度依赖的因素:
- 一模块对另一模块的引用
- 一模块向另一模块传递的数据量
- 一模块施加到另一模块的控制数量
- 模块间接口的复杂度
(1)非直接耦合 两个模块没有直接关系,模块独立性最强。 (2)数据耦合 一个模块调用另一模块时,被调用模块的输入输出都是简单的数据,性松散耦合
- 全局数据结构
- 共享通讯区
- 内存公共覆盖区等
- 软件可理解性降低: 模块间存在错综复杂的联系
- 软件可维护性差: 修改变量名或属性困难
- 软件可靠性差: 公共数据区及全程变量无保护措施
慎用公共数据区和全程变量
(7)内容耦合 一模块直接访问另一模块的内部信息(程序代码或数据),最不好的内容耦合形式
发生内容耦合的情形:
- 一模块直接访问另一模块的内部数据
- 一模块不通过正常入口转到另一模块内
- 两模块有一部分代码重叠
- 一模块有多个入口
如何降低耦合度 1)如模块必须存在耦合,选择适当的耦合类型 原则: 尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合
2)降低模块间接口的复杂性
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!