软件工程-模块化设计

分解(decomposition)

C(P1+P2)> C(P1)+C(P2)

E(P1+P2)> E(P1)+E(P2)

C为问题的复杂程度,E为解题需要的工作量

关于模块的一些概念

深度:系统结构中的控制层数

宽度:同一层次的模块总数的最大值

扇入&扇出:如图所示

作用范围:受到该模块内部一个判定影响的所有模块的集合(同样包括控制范围以外的模块)

控制范围:包括该模块本身及所有下属模块的集合 

(优化原则:作用范围应该在控制范围内)

模块独立性(module independence)

内聚(cohesion)

模块内部各成分之间

单个模块内部

内聚程度由低到高可分类为:

偶然性内聚 coincidental cohesion

模块中所要完成的各个动作之间没有任何关系

eg:一些重复用到的语句,为了方便组成一个模块

逻辑性内聚 logical cohesion

模块中的各个组成部分在逻辑上具有相似的处理动作,但功能上,用途上却彼此无关。

eg:输出各种报表的操作放入一个模块中实现

时间性内聚 temporal cohesion

模块中所包含的各个处理动作必须在同一时间内执行

eg:初始化模块

过程性内聚 procedural cohesion

模块内各个成分彼此相关,并且按照特定的次序执行

eg:由程序流程图直接演变而来的模块

通讯性内聚 communicational cohesion

模块中的各个成分都对数据结构的同一区域进行操作,以达到通信的目的

eg:模块内各个动作都使用同一个输入数据或者产生同一个输出数据

顺序性内聚 sequential cohesion

模块内各个处理成分都与同一个功能相关,并且这些处理必须顺序执行

eg:前一部分处理动作的输出是后一部分处理动作的输入

与过程性内聚区分:

模块内动作是否围绕同一个功能。

功能性内聚 functional cohesion

模块内所有成分形成一个整体,完成单个的功能

eg:单一目的,单一功能,界面清楚(比如求平方根模块)

评价标准

联接形式、可修改性、可读性、通用性、联系程度

耦合(coupling)

一个模块与其它模块之间

多个模块之间 

由耦合度低到高可分类为:

非直接耦合 no direct coupling

两个模块中的任何一个都不依赖于对方能够独立工作

数据耦合 data coupling

两个模块通过参数传递信息,信息仅限于数据(这个参数并不影响程序流程)

特征耦合 stamp coupling

模块间通过参数传递复杂的数据据结构,(复杂数据结构超出接收模块的最大需要)

此数据结构的变化将使相关的模块发生变化。

这种耦合介于数据耦合与控制耦合

控制耦合 control coupling

两个模块通过参数传递信息,信息中包含控制

外部耦合 external coupling

多个模块与同一个外部环境关联

eg:多个I/O模块与特定的设备、格式和通信协议相关联

公共耦合 common coupling

多个模块通过全局的数据环境相互作用。

全局数据环境包括:全局变量、公共区、内存公共覆盖区、任何存储介质上的文件、物理设备。

内容耦合 content coupling

一个模块使用另一个模块的内部数据或者控制信息;一个模块直接转移到另外一个模块内部。

基于耦合的设计原则

  • 尽量使用数据耦合
  • 减少使用控制耦合
  • 限制外部环境耦合和公共耦合
  • 杜绝内容耦合 

模块独立性高

模块内联系强/模块内聚合大

模块间联系弱/模块间耦合小

文章内所有图片均来自于网络

体系结构设计优化的指导规则

设计阶段早期应该对程序结构多做精化和评估以达到最好

便于优化是开发软件体系结构表示的一个重要因素

结构上的简单往往反映出程序的优雅和高效

设计优化应在满足模块化要求的前提下尽量减少模块数量(每个模块内代码行数尽量控制在60行)

在满足信息需求的前提下尽量减少复杂的数据结构

对模块分割、合并和变动调用关系的指导规则:

  • 提高内聚先,降低耦合后
  • 简化模块接口
  • 少用全局性数据和控制型信息

保持高扇入/低扇出的原则

作用域/控制域规则:

  • 作用域不要超出控制域的范围
  • 位置离受它控制的模块越近越好

对于性能要求高的应用,有时需要进行如下的工作:

  • 开发和精化程序结构,且不考虑关键性能而进行的优化
  • 使用可以提高运行性能的CASE工具来孤立低效的部分
  • 在后期设计中,对有可能最消耗时间的模块的算法进行时间优化
  • 用适当的程序设计语言编码
  • 孤立出那些大量占用处理器时间的模块
  • 如果需要,用依赖机器的语言重新设计和编码,以提高效率

先使其工作起来,再设法使其更好地工作 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW显微镜成像偏差校准

在高精度显微镜成像中,用户常常需要通过点击图像的不同位置,让电机驱动探针移动到指定点进行观察。然而,在实际操作中,经常会遇到一个问题:当点击位于图像中心附近的点时,探针能够相对准确地定位&#xff1…

【AI实践】deepseek支持升级git

当前Windows 11 WSL的git是2.17,Android Studio提示需要升级到2.19版本 网上找到指导文章 安装git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…

在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08

一、概述 现在已经是大模型时代。 个人认为,deepseek效果惊艳,大模型已进入实用阶段。 有些电脑,由于种种原因,还在用 Windows 7, Windows XP 等操作系统。 为了让这些电脑用上大模型,本教程在 llama.c…

消息中间件:RabbitMQ镜像集群部署配置全流程

目录 1、特点 2、RabbitMQ的消息传递模式 2.1、简单模式(Simple Mode) 2.2、工作队列模式(Work Queue Mode) 2.3、发布/订阅模式(Publish/Subscribe Mode) 2.4、路由模式(Routing Mode&am…

【MySQL — 数据库基础】深入解析 MySQL 的联合查询

1. 插入查询结果 语法 insert into table_name1 select* from table_name2 where restrictions ;注意:查询的结果集合,列数 / 类型 / 顺序 要和 insert into 后面的表相匹配;列的名字不要求相同; create table student1(id int , …

算法学习笔记之数学基础

例1(最小公倍数与最大公约数) 计算最小公倍数 公式: LCM(A,B) A*B/GCD(A,B) A与B的最小公倍数等于A*B除以A与B的最大公约数 计算最大公约数:辗转相除法 原理:设A与B的最大公约数为x,则A是x的倍数&am…

通过操作系统中的IO模型理解Java中的BIO,NIO,AIO

操作系统中的三种IO模型 阻塞I/O 先来看看阻塞 I/O,当用户程序执行 read,线程会被阻塞 一直等到内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read 才会返回 注意:阻塞…

多项式插值(数值计算方法)Matlab实现

多项式插值(数值计算方法)Matlab实现 一. 原理介绍二. 程序设计1. 构建矩阵2. 求解矩阵方程3. 作出多项式函数4. 绘制插值曲线5. 完整代码 三. 图例 一. 原理介绍 关于插值的定义及基本原理可以参照如下索引 插值原理(数值计算方法&#xff…

SpringMVC请求执行流程源码解析

文章目录 0.SpringMVC九大内置组件1.processRequest方法1.请求先到service方法2.然后不管是get还是post都会跳转到processRequest方法统一处理 2.doService方法3.doDispatch方法1.代码2.checkMultipart 4.核心流程 0.SpringMVC九大内置组件 1.processRequest方法 1.请求先到se…

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中,在完成第一个模块的过程中,我经常感到困惑,到底是延时了多少个时钟?今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南:JavaGuide (Github 收获148k Star)。这是我在大三开始准备秋招面试的时候创建的,目前已经持续维护 6 年多了,累计提交了 5600 commit ,共有 550 多位贡献者共同参与…

蓝桥杯-洛谷刷题-day5(C++)(为未完成)

1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"&#xff1…

MySQL - 索引 - 介绍

索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;

2021年全国研究生数学建模竞赛华为杯E题信号干扰下的超宽带(UWB)精确定位问题求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 E题 信号干扰下的超宽带(UWB)精确定位问题 原题再现&#xff1a; 一、背景   UWB&#xff08;Ultra-Wideband&#xff09;技术也被称之为“超宽带”&#xff0c;又称之为脉冲无线电技术。这是一种无需任何载波&#xff0c;通过发送纳秒…

安装WPS后,导致python调用Excel.Application异常,解决办法

在使用xlwings编辑excel文件时&#xff0c;默认调用的是“Excel.Application”&#xff0c;如果安装过wps&#xff0c;会导致该注册表为WPS&#xff0c;会导致xlwings执行异常 因为安装过WPS&#xff0c;导致与Excel不兼容的问题&#xff0c;想必大家都听说过。有些问题及时删…

STM32智能小车(循迹、跟随、避障、测速、蓝牙、wifi、4g、语音识别)总结

前言 有需要帮忙代做51和32小车或者其他单片机项目&#xff0c;课程设计&#xff0c;报告&#xff0c;PCB原理图的小伙伴&#xff0c;可以在文章最下方加我V交流咨询&#xff0c;本篇文章的小车所有功能实现的代码还有硬件清单放在资源包里&#xff0c;有需要的自行下载即可&a…

机器学习所需要的数学知识【01】

总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件

singleTaskAndroid的Activity启动模式知识点总结

一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言&#xff1a; Activity作为四大组件之一&#xff0c;也可以说Activity是其中最重要的一个组件&#xff0c;其负责调节APP的视图&#xff…

Java中使用EasyExcel

Java中使用EasyExcel 文章目录 Java中使用EasyExcel一&#xff1a;EasyExcel介绍1.1、核心函数导入数据导出数据 1.2、项目实际应用导入数据导出数据 1.3、相关注解ExcelProperty作用示例 二&#xff1a;EasyExcel使用2.1、导入功能2.2、导出功能 三&#xff1a;EasyExcel完整代…

WinForm 防破解、反编译设计文档

一、引言 1.1 文档目的 本设计文档旨在阐述 WinForm 应用程序防破解、反编译的设计方案&#xff0c;为开发团队提供详细的技术指导&#xff0c;确保软件的知识产权和商业利益得到有效保护。 1.2 背景 随着软件行业的发展&#xff0c;软件破解和反编译现象日益严重。WinForm…