软件工程-模块化设计

分解(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工具来孤立低效的部分
  • 在后期设计中,对有可能最消耗时间的模块的算法进行时间优化
  • 用适当的程序设计语言编码
  • 孤立出那些大量占用处理器时间的模块
  • 如果需要,用依赖机器的语言重新设计和编码,以提高效率

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

 

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

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

相关文章

Windows使用

CMD、PowerShell启动后工作目录为当前路径 资源管理器 地址输入框 中输入 cmd资源管理器,Shift 右键,在此处打开 PowerShell 窗口(S)资源管理器 地址输入框 中输入 wt wt 是 PowerShell 的程序名称依赖 wt 配置:wt -> 设置 -> 配置文…

力扣-二叉树-222 完全二叉树节点的数量

思路1 利用层序遍历所有节点即可 代码1 class Solution { public:int countNodes(TreeNode* root) {if(root nullptr) return 0;queue<TreeNode*> que;que.push(root);int size 0;while(!que.empty()){size que.size();int length que.size();while(length--){Tre…

【大模型】阿里云百炼平台对接DeepSeek-R1大模型使用详解

目录 一、前言 二、DeepSeek简介 2.1 DeepSeek 是什么 2.2 DeepSeek R1特点 2.2.1 DeepSeek-R1创新点 2.3 DeepSeek R1应用场景 2.4 与其他大模型对比 三、阿里云百炼大平台介绍 3.1 阿里云百炼大平台是什么 3.2 阿里云百炼平台主要功能 3.2.1 应用场景 3.3 为什么选…

PyTorch Lightning LightningDataModule 介绍

LightningDataModule 是 PyTorch Lightning 提供的数据模块,用于统一管理数据加载流程(包括数据准备、预处理、拆分、批量加载等)。它的核心作用是将数据处理逻辑与模型解耦,提高代码的可复用性和可读性。 1. LightningDataModule 的作用 ✅ 封装数据预处理:数据下载、清…

基于深度优先搜索(DFS)算法自动生成迷宫的python走迷宫游戏

目录 1. 前期准备 2. DFS 算法生成迷宫 3. 键盘操作 4. 判断游戏胜利 5. 游戏截图 6. 完整游戏代码 本文将用pygame实现迷宫的游戏&#xff0c;因为迷宫的地图需要提前生成&#xff0c;这样每次游戏地图都是一样的。而深度优先搜索&#xff08;DFS&#xff09;算法可以自…

github - 使用

注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。 Git…

基于Odoo的数据中台建设:助力企业数据驱动决策

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。数据中台作为企业数字化转型的核心&#xff0c;承担着整合数据资源、优化业务流程、提升决策效率的重要使命。Odoo作为全球领先的开源ERP系统&#xff0c;凭借其强大的数据整合与分析能力&#xff0c;正在成为企业构建…

如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件

DHTMLX Scheduler 是一个全面的调度解决方案&#xff0c;涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能&#xff0c;并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下&#xff0c;很可能可以使用自定义解决方案来实现此类功能。…

往年5级考题(c++)

考级在即&#xff0c;这篇文章就来看看往年的c5级考试真题 逃离迷宫 题目描述 你在一个地下迷宫中找到了宝藏&#xff0c;但是也触发了迷宫机关&#xff0c;导致迷宫将在T分钟后坍塌&#xff0c;为此你需要在T分钟内逃离迷宫&#xff0c;你想知道你能不能逃离迷宫。 迷宫是一…

总结:如何在SpringBoot中使用https协议以及自签证书?

总结&#xff1a;如何在SpringBoot中使用https协议以及自签证书&#xff1f; 前提一&#xff1a;什么是http协议&#xff1f;前提二&#xff1a;什么是https协议&#xff1f;一生成自签证书二 将证书转换为PKCS12格式三 配置SpringBoot&#xff08;1&#xff09;修改配置文件&a…

Humanoid Robot Price Break 人形机器人价格突破

Humanoid Robot Price Break 人形机器人价格突破 中国机器人制造商宇树科技&#xff08;Unitree&#xff09;和EngineAI在2025年CES展会上展示的人形机器人。这些机器人价格相对较低&#xff0c;功能较为先进&#xff0c;有望将人形机器人技术从实验室或工业场景推向日常生活应…

用大模型学大模型03-数学基础 概率论 最大似然估计(MLE)最大后验估计(MAP)

https://metaso.cn/s/r4kq4Ni 什么是最大似然估计&#xff08;MLE&#xff09;最大后验估计&#xff08;MAP&#xff09;&#xff1f;深度学习中如何应用&#xff0c;举例说明。 好的&#xff0c;我现在需要回答关于最大似然估计&#xff08;MLE&#xff09;和最大后验估计&…

基于 Filebeat 的日志收集

在现代分布式系统中&#xff0c;日志数据作为关键的监控与故障排查依据&#xff0c;越来越受到重视。本文将深入探讨 Filebeat 的技术原理、配置方法及在 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;生态系统中的应用&#xff0c;帮助开发者构建高效、稳定的日…

【新品解读】AI 应用场景全覆盖!解码超高端 VU+ FPGA 开发平台 AXVU13F

「AXVU13F」Virtex UltraScale XCVU13P Jetson Orin NX 继发布 AMD Virtex UltraScale FPGA PCIE3.0 开发平台 AXVU13P 后&#xff0c;ALINX 进一步研究尖端应用市场&#xff0c;面向 AI 场景进行优化设计&#xff0c;推出 AXVU13F。 AXVU13F 和 AXVU13P 采用相同的 AMD Vir…

【去雨去雾小工具】用python实现去雨去雾的小工具

目录 🍓🍓1.效果 🍂🍂2.去雨功能实现 🍇2.1训练模型: 🍇2.2保存模型: 🙋🙋3.去雾功能实现 🐸🐸4.python代码实现可视化界面 🍋4.1完整代码 🍋4.2代码解释 1. 创建主窗口 2. 创建原始图像显示区域 3. 创建去雨后图像显示区域 4. …

使用python脚本提取html网页上的所有文本信息

你可以使用 BeautifulSoup 库来提取 HTML 网页上的所有文本信息。以下是一个示例脚本&#xff1a; 步骤 安装 beautifulsoup4 和 requests&#xff08;如果尚未安装&#xff09;&#xff1a; pip install beautifulsoup4 requestsPython 脚本&#xff1a; import requests fro…

11.推荐系统的安全与隐私保护

接下来我们将学习推荐系统的安全与隐私保护。在推荐系统中&#xff0c;用户的数据是至关重要的资产。保护用户的隐私和数据安全&#xff0c;不仅是法律和道德的要求&#xff0c;也是提升用户信任和满意度的关键因素。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 推…

k8s优雅操作pod容器组

k8s优雅操作pod容器组 回退备份 kubectl get deploy deployName -o yaml>>deployName-bak-date "%Y-%m-%d".yaml获取副本数 replicasecho | kubectl get -o template deploy/deployName --template{{.spec.replicas}}停止容器组 kubectl scale deployment …

DeepSeek R1打造本地化RAG知识库

本文将详细介绍如何使用Ollama、Deepseek R1大语音模型、Nomic-Embed-Text向量模型和AnythingLLM共同搭建一个本地的私有RAG知识库。 一. 准备工作 什么是RAG&#xff1f; RAG是一种结合了信息检索和大模型&#xff08;LLM&#xff09;的技术&#xff0c;在对抗大模型幻觉、…

Node.js使用教程

Node.js使用教程 Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它让JavaScript运行在服务器端。以下是一个简单的Node.js使用教程&#xff1a; 一、 Node.js开发环境和编译 1.1 安装Node.js 访问Node.js官网下载并安装适合您操作系统的Node.js版本。 1…