- 1、本文档共154页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4章软件结构化设计_
第四章 软件结构化设计 1.结构化设计与结构化分析的关系 2. 结构化设计的概念和原则 3.模块独立性 4.启发规则 5.表示软件结构的图形工具 6.面向数据流的设计方法 7.人机界面设计 8. 过程设计 9.过程设计的工具 10.面向数据结构的设计方法 1.结构化设计与结构化分析的关系 Void check(订货单,不合格订货单,合格订货单) { ……..//检查过程 } 问题: 1.检查过程? 2.从配件库存中读取那些数据? 3.check函数被哪个函数调用 4.check调用那些函数? 5.输入数据与输出数据之间关系? 6.模块1.1与1.2之间是调用与被调用关系,还是同级关系? 软件设计的目标和目的 软件需求:解决“做什么” 软件设计:解决“怎么做” 4.1.1.1 软件设计的任务 问题结构(软件需求) 软件结构 从软件需求规格说明书出发,形成软件的具体设计方案。 1.软件的总体结构主要回答的问题 软件的组成部分 软件的层次关系 模块的内部处理逻辑 模块之间的界面 2. 软件设计的问题 4. 软件设计分为两个阶段: (1)概要设计(总体设计) 确定软件的结构以及各组成成分 (子系统或模块)之间的相互关系。 (2)详细设计 确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。 4.2.1 软件体系结构 软件体系结构包括两部分: (1)过程构件(模块)的层次结构 (2)数据构件 控制结构(程序结构) 控制结构是软件模块间关系的表示 控制结构图示: 1. 控制结构的层次规则 只有一个顶层(0层)模块 0层外任一模块都会在它的邻层存在一模块与它有关 同层模块间不发生联系 2. 软件结构度量术语 4.2.2 软件过程 软件过程用以描述各模块的处理细节(算法的详细描述),包括对下层模块控制的操作细节。 4.2.3 模块化(Modularity) 模块化是好的软件设计的一个基本准则 高层模块 从整体上把握问题, 隐蔽细节 复杂问题 较小问题 分解 可减小解题所需的总的工作 模块化和软件成本 4.2.4 抽象(Abstraction) 4.2.5 信息隐蔽(Information Hiding) 信息隐蔽原则指出,应该这样设计和确定模块: 模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。 软件质量因素: 可维护性 可靠性 可理解性 效率 信息隐蔽的目的: 提高模块的独立性,减少修改或维护时的影响面。 4.2.6 信息局部化 把关系密切的软件元素物理地放得彼此靠近。 优点:可维护性好 可靠性好 可理解性好 §4.2.7 模块的独立性 4.2.7.1 模块独立性的概念 模块独立的含义: 模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小 4.2.7.2 模块独立性的度量 模块独立性取决于模块的 内部和外部特征。 SD方法提出的定性的度量标准: 模块之间的耦合性 模块自身的内聚性 用三个封装级别表示的软件结构 结构设计(或1级)标准,用以管理每一对封装级别的元素之间的相互关系 上表的扩展:包括2级封装(所有的类) 1.模块独立性的度量之一:耦合性 模块间相对独立性(相互依赖程度)的度量 耦合性越高,模块独立性越弱 耦合强度依赖的因素: 一模块对另一模块的引用 一模块向另一模块传递的数据量 一模块施加到另一模块的控制的数量 模块间接口的复杂程度 模块间耦合的类型 低 无直接耦合 耦 数据耦合 合 标记耦合 性 控制耦合 外部耦合 公共耦合 高 内容耦合 (1) 无直接耦合 两个模块没有直接关系(模块1和模块2),模块独立性最强。 (2) 数据耦合 一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。 属松散耦合。 数据耦合举例 (3) 标记耦合(特征耦合) 如两个模块通过传递数据结构 (不是简单数据,而是记录、数组 等)加以联系,或都与一个数据结 构有关系, 则称这两个模块间存 在标记偶合。 标记耦合举例 将标记耦合修改为数据耦合举例 class SJJ_point {public: double SJJS ;//井深m double SJCS ;//垂深m
文档评论(0)