- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 软件设计基础 软件设计的基本目的就是回答“系统应该如何实现?”这个问题。 软件设计的任务,就是把分析阶段产生的软件需求规格说明转换为用适当手段表示的软件设计,并形成软件设计文档。 软件设计方法学缺少那些更为经典的工程设计学科所具有的深度、灵活性和定量性。 4.1软件设计的目标和任务 1. 软件设计的目标 软件设计一般都包括 数据设计 体系结构设计 接口设计 过程设计(或称构件级设计) 软件设计过程最终目标是产生一个设计规约,该规约包括描述数据、体系结构、接口和构件的设计模型。 将分析模型转换为设计 软件设计的目标和任务 体系结构设计定义软件主要结构性元素之间的关系。体系结构设计表示可以从系统规约、分析模型以及分析模型中所定义子系统的交互导出。 数据设计将分析阶段创建的信息模型转变成实现软件所需的数据结构。 接口设计描述软件内部模块之间以及软件与人之间是如何通信的。数据和控制流图提供了接口设计所需的信息。 构件级设计将软件体系结构的结构性元素转变成对软件构件的过程性描述,即描述软件构件的详细内部设计细节。 软件设计的任务 从工程管理的角度来看,传统的软件设计任务通常分两个阶段完成 。 第一个阶段是概要设计,即总体设计。 第二阶段是详细设计阶段,即过程设计。 4.2软件设计基本概念 在过去四十年中发展起来一套基本的软件设计概念,它们有助于解决以下问题: 能用什么标准将软件划分为单个构件? 如何将功能或数据结构与软件概念性表示分离开? 是否存在定义软件设计技术质量的统一标准? 软件设计的基本概念为达到“使程序正确”这一目标提供了必要的框架。 4.2软件设计基本概念 4.2.1 模块与模块化 1.模块 模块是指这样一组程序语句,它包括输入、输出和逻辑处理功能、内部信息及其运行计划。 模块指可单独命名且可通过名字访问的过程函数、子程序或宏调用。 4.2软件设计基本概念 模块具有以下几种特征: 接口,模块的输入输出; 功能,指模块实现什么功能,有什么作用; 逻辑,描述模块内部如何实现需求及所需数据; 状态,该模块的运行环境,模块间调用与被调用关系。 4.2软件设计基本概念 2.模块化 模块化就是将程序划分成若干个独立的模块,每个模块完成一个特定子功能,每个模块既是相对独立的,又是相互联系的,它们共同完成系统指定的各项功能。 模块化的目的是为了降低软件的复杂性。 4.2软件设计基本概念 图4.2 软件设计成本与模块数量关系图 4.2软件设计基本概念 4.2.2 抽象与逐步求精 1.抽象 抽象是指从一些事物中抽取其本质的共同的特性,而忽略其非本质细节的差异。 在抽象的最高层次使用问题环境的语言,在较低层次上使用更过程化的方法,把面向问题的术语和面向实现的术语结合起来描述问题的解法。 逐步求精 抽象化的实现方法:自顶向下,逐步求精。 逐步求精是一种先总体、后局部的思维原则,也就是一种逐层分解、分而治之的方法。 从在高抽象级别定义的功能陈述(或信息描述)开始,该陈述概念性地描述了功能或信息,但没有提供有关功能内部工作的情况或信息的内部结构。求精是设计者详细描述的原始声明,在后续求精(详细描述)活动中,提供越来越多的细节。 4.2软件设计基本概念 4.2.3 信息隐藏 信息隐蔽是在设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。 应用这一思想,在软件开发中先后出现了: “数据封装”(Data Encapsulation,指在一个模块中包含一个数据结构和在此数据结构上执行的操作); “抽象数据类型”(Abstract Datatype,指一种数据类型,其中可包含在该类型实例上执行的操作)等设计方法; 在OOD中进一步发展为具有“继承”特性的“类”(可以看成是一个支持继承的抽象数据类型)和“对象”。 4.2软件设计基本概念 4.2.4 模块独立性 模块独立性(Module Independence)概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准,同时也是模块化和抽象及信息隐藏概念的直接产物。 坚持模块的独立性,一般认为是获得良好设计的关键。 换句话说,希望这样设计软件结构,使得每个模块只完成系统要求的一个相对独立的特定子功能,并且和其他模块之间的关系很简单。 4.2软件设计基本概念 为什么模块的独立性很重要呢? 第一,有效的模块化(即具有独立的模块)软件比较容易开发出来。 第二,独立模块比较容易测试和维护。 独立性可以从两个方面来度量,即模块本身的内聚(Cohesion)和模块之间的耦合(Coupling)。 4.2软件设计基本概念 1.内聚 这是从功能角度对模块内部聚合能力的量
原创力文档


文档评论(0)