• 总体设计(一)


    引言

    软件设计宣言:Mitch Kapor “什么是设计?设计是你站在两个世界——技术世界和人类的目标世界——而你尝试将这两个世界结合在一起……”。

    罗马建筑批评家Vitruvius提出的观念: “设计良好的建筑应该展示出坚固、适用和令人赏心悦目”。

    设计阶段: 从工程管理的角度,可以将软件设计分为概要设计阶段和详细设计阶段。

    从技术的角度,传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分。

    面向对象方法则将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分。 

    结构化设计和结构化分析的关系 

    总体设计过程:首先寻找实现目标系统的各种不同的方案;然后分析员从这些供选择的方案中选取若干个合理的方案,从中选出一个最佳方案向用户和使用部门负责人推荐;分析员应该进一步为这个最佳方案设计软件结构,进行必要的数据库设计,确定测试要求并且制定测试计划。

    必要性:总体设计可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。 

    设计过程

    设计原理

    模块化

    抽象

    逐步求精 

    例题解说

    逐步求精的作用 

    1、它能帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上,而忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节。

    2、逐步求精方法确保每个问题都将被解决,而且每个问题都将在适当的时候被解决,但是,在任何时候一个人都不需要同时处理7个以上知识块。

    Wirth本人对逐步求精策略的概括说明 

    1、我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。

    2、抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。 

    信息隐藏和局部化

    1、信息隐藏:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

    2、局部化:局部化的概念和信息隐藏概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。显然,局部化有助于实现信息隐藏。

    信息隐藏和局部化的作用 

    1、“隐藏”意味着有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。

    2、使用信息隐藏原理作为模块化系统设计的标准就会带来极大好处。因为绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。

    模块独立 

    1、模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。

    2、希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。

    模块独立的重要性 

    1、有效的模块化(即具有独立的模块)的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。

    2、独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够“插入”模块。

    模块独立程度的两个定性标准度量 

    1、耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单。

    2、内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。

    耦合 

    耦合程度的度量 

    内聚 

    内聚程度的度量 

  • 相关阅读:
    【Python】pyecharts 模块 ① ( ECharts 简介 | pyecharts 简介 | pyecharts 中文网站 | pyecharts 画廊网站 | pyecharts 画 )
    盘点世界杯有趣小知识!带你感受体育赛事数据可视化的快乐!
    【Python 零基础入门】基础语法
    nodejs基于微信小程序的书籍销售系统--(ssm+uinapp+Mysql)
    关于NAND FLASH解扣的认识
    基于无人机的气象数据采集系统设计(Matlab代码实现)
    Google Earth Engine(GEE)——不同决策树数量分类精度对比分析(随机森林分类为例)
    深度学习(part7)--Keras常用模块
    Python 练习题讲解
    【JavaScript复习四】对象简介
  • 原文地址:https://blog.csdn.net/weixin_72671719/article/details/138171451