软件模块化设计

1. 软件的总体结构主要要回答的问题

  • 软件的组成部分
  • 软件的层次关系
  • 模块的内部处理逻辑
  • 模块之间的界面

2. 软件设计方法

  • 结构化设计方法(SD)
  • 面向数据结构的设计方法(JSD)
  • 面向对象的设计方法(OOD)

3. 软件设计分为两个阶段

  1. 概要设计(总体设计)
    确定软件的结构以及各组成成分(子系统或模块)
  2. 详细设计
    确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档

软件设计的基本概念

  1. 模块化
  2. 抽象与细化
  3. 信息隐蔽
  4. 软件复用

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. 巧合内聚
  2. 逻辑内聚
  3. 时间内聚
  4. 过程内聚
  5. 通信内聚
  6. 信息内聚
  7. 功能内聚

(1)巧合内聚 模块内各分部间无联系, 例: view source print /span>

MOVE O TO R
READ FILE F
MOVE S TO T

模块中的三个语句没有任何联系, 缺点:可理解性差, 可修改性差。
(2)逻辑内聚 把几种相关功能(逻辑上相似的功能)组合在一模块内, 每次调用由传给模块的参数确定执行哪种功能。

  • 初始化系统模块
  • 系统结束模块
  • 紧急故障处理模块

(4)过程内聚 模块内各处理成分相关,且必须以特定次序执行

(5)通信内聚 模块内各部分使用相同的输入数据,或产生相同的输出结果

(6)信息内聚
信息内聚指模块写成多个功能,各个功能都在同一数据结构上操作,每个功能有唯一入口。如对同一个数据库的查找-添加-删除-修改模块
(7)功能内聚 模块仅包括为完成某个功能所必须的所有成分(模块所有成分共同完成一个功能,缺一不可)
模块独立性的度量之二 耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据 耦合性越高,模块独立性越弱, 耦合强度依赖的因素:

  • 一模块对另一模块的引用 
  • 一模块向另一模块传递的数据量
  • 一模块施加到另一模块的控制数量
  • 模块间接口的复杂度

(1)非直接耦合 两个模块没有直接关系,模块独立性最强。 (2)数据耦合 一个模块调用另一模块时,被调用模块的输入输出都是简单的数据,性松散耦合

  • 全局数据结构
  • 共享通讯区
  • 内存公共覆盖区等

  1. 软件可理解性降低: 模块间存在错综复杂的联系
  2. 软件可维护性差: 修改变量名或属性困难
  3. 软件可靠性差: 公共数据区及全程变量无保护措施

慎用公共数据区和全程变量
(7)内容耦合 一模块直接访问另一模块的内部信息(程序代码或数据),最不好的内容耦合形式
发生内容耦合的情形:

  1. 一模块直接访问另一模块的内部数据
  2. 一模块不通过正常入口转到另一模块内
  3. 两模块有一部分代码重叠
  4. 一模块有多个入口

如何降低耦合度 1)如模块必须存在耦合,选择适当的耦合类型 原则: 尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合
2)降低模块间接口的复杂性

 

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2013年9月16日
下一篇 2013年9月16日

相关推荐