第5章 总体设计

news2025/2/1 14:03:41

第5章 总体设计

总体设计是决定”怎样做”。也就是概括的说,系统应该如何实现,因此总体设计也被称作概要设计。

5.1 设计过程

在这里插入图片描述
在这里插入图片描述

例题

在这里插入图片描述

5.2 设计原理

5.2.1 模块化

模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块是构成程序的基本构件
模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
模块化是为了使一个复杂的大型程序能被人的智力所管理,是软件应该具备的唯一属性。
在这里插入图片描述

模块化的优势

• 模块化可以使软件结构清晰易于理解
• 模块化使软件易于测试和调试,有助于提高软件的可靠性加粗样式
• 模块化能提高软件的可修改性
• 模块化有助于软件开发工程的组织管理

例题

在这里插入图片描述

5.2.2 抽象

定义:抽出事物的本质特性而暂时不考虑它们的细节。
软件工程过程的每一步都是对软件解法的抽象层次的一次精化
在这里插入图片描述
逐步精细和模块化的概念,与抽象是紧密相关的。
在这里插入图片描述

5.2.3 逐步求精

为了能集中精力解决主要问题而尽量推迟对问题细节的考虑.

求精实际上是细化的过程

与抽象的关系

• 抽象与求精是一对互补的概念。抽象是的设计师能够说明过程和数据,同时却忽略了底层细节。
• 求精帮助设计者在设计过程中逐步揭示底层细节。
• 这两个概念有助于设计者在设计演化过程中创造出完整的设计模型。

5.2.4 信息隐藏和局部化

局部化 : 是把一些关系密切的软件元素物理地放的彼此靠近。显然局部化有助于实现信息隐藏。
信息隐藏 : 信息隐藏原则定义和隐藏了模块内的过程细节和模块内的本地数据结构。
使用信息隐藏原理作为模块化系统设计的标准可为软件测试和维护期间带来极大好处。

5.2.5 模块独立

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

模块独立的重要性

1)有效的模块化(即有独立的模块)的软件比较容易开发出来。
2)独立的模块比较容易测试和维护
模块独立是好设计的关键,而设计又是决定软件质量的关键环节

模块独立的定性标准度量

耦合衡量不同模块彼此之间互相依赖(连接)的紧密程度。
内聚衡量一个模块内部各个元素彼此结合的紧密程度。

耦合

在这里插入图片描述

① 无直接耦合

无直接耦合是指调用模块和被调用模块之间没有直接数据联系

② 数据耦合

数据耦合是指调用模块和被调用模块之间存在单变量之类的数据联系。
在这里插入图片描述

③ 标记耦合

标记耦合是指调用模块和被调用模块之间存在复杂结构变量(数组、结构、对象)之类的数据联系
在这里插入图片描述

④ 控制耦合

控制耦合是指调用模块和被调用模块之间存在控制关联
在这里插入图片描述

⑤ 外部耦合

外部耦合是指多个模块访问全局变量
在这里插入图片描述

⑥ 公共耦合

多个模块访问全局复杂结构变量。
公共环境在这里插入图片描述

⑦ 内容耦合

运行调用模块控制被调用模块的内部数据。
在这里插入图片描述

例题

在这里插入图片描述
在这里插入图片描述

内聚

内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
在这里插入图片描述

① 偶然性内聚

模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系
降低了可维护性,模块不可重用

② 逻辑性内聚

执行一系列相关的操作,执行哪个操作由调用者来选择。几个逻辑相关的功能放在同一模块中。
对文件记录执行插入、删除、修改的编辑模块
在这里插入图片描述

③ 时间内聚

执行一系列与时间相关的操作。如初始化把需要同时执行的动作组合在一起形成模块

模块内操作间关系很弱,但是与其他模块的操作却有很强的关联,重用性差。

④ 过程内聚

一组会依照特定顺序执行的程序放在同一模块中
操作间是弱连接,重用性差

⑤ 通信内聚

模块中所有元素都使用同一个数据结构上操作
缺乏重用性

⑥ 顺序内聚

如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据)

⑦ 功能性内聚

模块内所有元素执行同一功能,即只执行一个操作或只达到单一的目标。
易维护、重用性好、易扩充

例题

在这里插入图片描述

5.3 启发规则

  1. 改进软件结构提高模块独立性
  2. 模块规模应该适中
  3. 深度、宽度、扇出和扇入都应适当
  4. 模块的作用域应该在控制域之内
  5. 力争降低模块接口的复杂程度
  6. 设计单入口单出口的模块
  7. 模块功能应该可以预测

例题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/631316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Boot】Spring Boot特点及重要策略,含安装步骤详细讲解

前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应…

Matplotlib 绘制多图

Matplotlib 绘制多图 我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。 subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。 subplot subplot(nrows, ncols, inde…

微服务_Nacos

简介 Nacos(全称为“动态服务发现、配置和服务管理平台”)是阿里巴巴开源的一款云原生服务发现和配置管理平台,支持多种语言和多种环境,包括Kubernetes、Docker、Spring Cloud等常见的云原生环境。它提供了服务发现、配置管理、服…

MFC的定义和实际操作方法

我是荔园微风,作为一名在IT界整整25年的老兵,今天从另一个角度来看一下MFC。 完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类 过程:CWinApp创建CF…

算法刷题-链表-反转链表

反转链表 206.反转链表思路C代码双指针法递归法其他语言版本使用虚拟头结点解决链表翻转使用栈解决反转链表的问题 反转链表的写法很简单,一些同学甚至可以背下来但过一阵就忘了该咋写,主要是因为没有理解真正的反转过程。 206.反转链表 力扣题目链接 …

【Java基础篇】方法的使用(方法的使用以及形参实参的关系)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用&…

【线程安全问题】线程互斥与线程同步技术

在达内Windows/Win32编程专栏中,我们已经介绍过线程同步与线程互斥技术,包括了原子锁,互斥体,事件和信号量。但是与海哥讲的线程同步与线程互斥技术不太一样,这篇文章来带领大家学习线程同步与线程互斥技术&#xff0c…

新手运行bert,pycharm不识别conda安装的python环境

提示No module named numpy/tensorflow conda list是有这些包的 pycharm识别不出interpreter的package 改成scripts下的python.exe就能识别出numpy和tensorflow了 改完interpreter之后出现过importerror: dll load failed,在environment variables里加了这些就不报错…

06. Web大前端时代之:HTML5+CSS3入门系列~HTML5 画布

我们先看看画布的魅力&#xff1a; 初始画布 canvas默认是宽300px&#xff0c;高150px; 绘制步骤 1.定义一个id <canvas id"canvasOne" width"300" height"300"></canvas> 2.获取canvas对象 var canvasObj document.getEleme…

程序开发体系架构(C/S与B/S)

应用最多的网络应用程序开发体系结构可分为两种&#xff0c;一种是基于客户端/服务器&#xff08;Client/Server&#xff0c;C/S&#xff09;结构&#xff0c;另一种是基于浏览器/服务器&#xff08;Browser/Server&#xff0c;B/S&#xff09;架构 C/S体系结构 C/S是指在开发…

性能测试报告模板

xxx系统 性能测试报告 版本号&#xff1a;V1.0 2023年1月9日 1 概述 1.1 测试目的 1.2 测试依据 2 测试范围 3 测试方法 3.1 测试工具 3.2 并发用户策略 3.3 性能指标监控 3.4 性能测试策略 3.5 测试步骤简述 4 测试目标 4.1 系统处理能力 4.2 操作响应时间 4…

凸优化系列——无约束优化问题

最小二乘问题: 采用适当的方法可将约束优化问题转换为无约束优化问题; 最优解的定义&#xff1a; 无约束优化问题的最优性条件 需要说明的是&#xff0c;由于二阶梯度可以取0&#xff0c;我们由一元函数的知识可以知道&#xff0c;它是必要条件而非充分条件&#xff0c;当把等…

一款自动生成CRUD代码的自定义Starter

一个基础web的spring-boot-starter框架 web-spring-boot-starter Gitee仓库链接&#xff1a;https://gitee.com/suhuamo/web-spring-boot-starter Github仓库链接&#xff1a;https://github.com/suhuamo/web-spring-boot-starter 前言 对应一个web项目的开发&#xff0c;数据…

硬件设计电源系列文章-DCDC转换器布局设计

文章目录 概要 整体架构流程 技术名词解释 1.开关电源PCB布局要点 2.输入电容的放置 3.二极管的放置 4.散热孔的放置 5.反馈路径的走线 小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 本文主要DCDC转换器布局方面的知识。 整体架构流程 提示&#xf…

Dockerfile构建镜像与实战

一、基于Dockerfile创建镜像 1&#xff09;联合文件系统(UnionFS) UnionFS(联合文件系统) : Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统&#xff0c;它支持对文件系统的修改作为一次提交来一层层的叠加&#xff0c;同时可以将不同目录挂载到同一个虚拟文…

Go语言并发之Select多路选择操作符

1、Go语言并发之Select多路选择操作符 select 是类 UNIX 系统提供的一个多路复用系统 API&#xff0c;Go 语言借用多路复用的概念&#xff0c;提供了 select 关键字&#xff0c;用 于多路监听多个通道。当监听的通道没有状态是可读或可写的&#xff0c;select 是阻塞的&#…

NoSQLBooster 8.0.11 for MongoDB

MongoDB最智能的IDE。 NoSQLBooster 是适用于 MongoDB Server 3.6-6.0 的跨平台 GUI 工具&#xff0c;它提供了内置的 MongoDB 脚本调试器、全面的服务器监控工具、链接流畅查询、SQL 查询、查询代码生成器、任务调度、ES2020 支持和高级 IntelliSense 体验。 嵌入式MongoDB S…

YUM源安装,在线YUM,本地YUM

YUM源 一、定义 YUM&#xff08;全称为 Yellow dog Updater, Modified&#xff09;是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于RPM包管理&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;**可以自动处理依赖性关系&…

【ChatGPT散文篇】ChatGPT-清华大学的讲座要点

刚听了清华大学关于ChatGPT的讲座&#xff0c;总结几个要点: 1、AI有可能成为地球上最初的硅基生命。 2、AI已迭代至博士研究生的智力水平。 3、以后将不存在学科和专业的概念&#xff0c;也不存在文科理科的区分&#xff0c;将是学科大融合。因为一个文科生哪怕不懂代码&a…

【Elasticsearch】结合Postman/ApiPost 快速入门

相比于MySQL那种关系型数据库&#xff0c;是采用正排索引&#xff0c;也就是根据主键去找其对应的行数据。而Elasticsearch这个NoSQL&#xff0c;是采用倒排索引&#xff0c;根据输入的某值返回其它整行的数据。而Elaticsearch是采用RESTful风格的数据库访问&#xff0c;以下就…