软件工程-模块化

1. 模块化思想

模块化思想是一种设计策略,它提倡将大型软件项目分解成更小、更易于管理的组件或模块。每个模块负责一部分功能,并通过定义良好的接口与其它模块交互。这种方法能够简化开发流程,使团队成员能够专注于特定任务,并促进代码的重用。

2. 软件开发中的抽象

抽象是软件工程中的一个重要概念,它允许开发者隐藏复杂性的细节,只关注于核心功能。通过抽象,可以创建出更高层次的数据类型、函数、类等,这些抽象对象可以作为构建更大系统的积木。抽象过程包括数据抽象(Data Abstraction)、过程抽象(Process Abstraction)以及接口抽象(Interface Abstraction)等。

3. 模块独立性

模块独立性是指一个模块在其设计和实现过程中尽量减少对外部环境的影响和依赖。模块独立性的两个主要指标是耦合性和内聚性。信息隐蔽原则是模块独立性的基石,它确保了模块内部的数据和算法对外界隐藏,只有通过公共接口才能访问。

4. 模块化的优点

模块化的主要优点包括但不限于:

  • 可维护性:由于每个模块都是独立的,因此可以单独修改和测试,减少了错误传播的风险。
  • 可重用性:设计良好的模块可以在多个项目中重用,节省开发时间和成本。
  • 可读性:模块化提高了代码的可读性,使得其他开发者更容易理解程序的工作原理。
  • 灵活性:当需要更新或者替换某个功能时,可以更容易地进行变更,而不影响整个系统。

5. 模块化的原则

模块化遵循以下原则:

  • 耦合性:衡量模块间相互依赖的程度。低耦合意味着模块间相互作用较少,这样更有利于模块的独立性和可重用性。
  • 内聚性:衡量模块内部各组成部分间的相关性。高内聚表示模块内部的各个部分紧密相关,这有助于保持模块的专注性和功能性。

6. 耦合性的种类

耦合类型描述
无耦合模块之间完全没有依赖关系
数据耦合模块间仅通过简单的数据交换进行通信
特征耦合模块间通过复杂的数据结构传递信息
控制耦合一个模块通过向另一个模块传递控制信号来进行通信
公共耦合多个模块共享同一个全局数据区域
内容耦合一个模块直接访问另一个模块的内部数据或代码

7. 特征耦合

特征耦合实际上应该称为“内容耦合”,这是最高级别的耦合,当一个模块直接引用另一个模块内的数据或控制流时就会发生这种情况。这通常是不推荐的做法,因为这样的设计会导致非常紧密的耦合,降低模块的独立性。

8. 内聚

内聚性描述了模块内部功能的集中度。高内聚意味着所有功能都紧密相关,这有助于提高模块的质量。内聚性的类型有:

 

内聚类型描述
功能内聚模块的所有组成部分都服务于一个单一的功能。
顺序内聚模块中的功能按照执行顺序排列。
通信内聚模块中的所有部分都操作同一组数据集。
过程内聚模块的功能按照执行的次序组织在一起。
时间内聚模块中的功能在某一时刻被执行。
逻辑内聚模块包含了几个逻辑相关的功能,但没有明显的执行顺序。
偶然内聚模块中的功能完全无关,仅仅因为方便而被放在一起。

9. 聚合内聚

聚合内聚(有时被称为类内聚)是指模块或类包含的对象之间存在物理上的关联,但功能上并不一定相关。例如,一个类包含多个对象,但这些对象的功能没有内在联系,这样的设计通常不是最佳实践。

10. 逻辑内聚

逻辑内聚指的是模块包含了多种逻辑上相关但没有执行顺序的功能。这种类型的内聚性不如功能内聚那样理想,因为缺乏明确的执行次序可能导致难以理解和维护的问题。

 

11.耦合性和模块化的关系

耦合性/模块化独立性无直接耦合数据耦合标记耦合控制耦合公共环境耦合内容耦合
较高
较低
最低

 12.内聚性和模块化的关系

内聚性描述模块化独立性
偶然内聚各部分之间没有直接关系功能分散
时间内聚相关操作按时间顺序执行
逻辑内聚多个相关但不同的任务组合在一起中等
过程内聚执行一系列步骤完成特定任务较弱
通讯内聚共享数据结构的不同处理函数较强
顺序内聚按照指定顺序执行多个操作
功能内聚完成单个功能的所有必要操作单一功能

 

 

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

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

相关文章

【C++】--类和对象(2)

👌个人主页: 起名字真南 👆个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的默认成员函数2 构造函数3 析构函数4 拷贝构造5 赋值运算符重载5.1 运算符重载5.2 赋值运算符的重载 1 类的默认成员函数 默认成员函数就是用户没有显示实现,…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull ? 119.探测存活 pod 状态为 CrashLoopBackOff ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。…

Bloom Filter 布隆过滤器

目录 简介 Bloom Filter的基本原理 实现 使用 HashFunc越多,性能越好吗? 如何尽量避免误判? 应用 布隆过滤器优点 简介 Bloom Filter是一种空间效率极高的概率数据结构,它用于测试一个元素是否属于集合。Bloom Filter的优…

【NoSQL】portswigger NoSQL注入 labs 全解

目录 NoSQL NoSQL 数据库模型 NoSQL 注入的类型 NoSQL 语法注入 检测 MongoDB 中的语法注入 lab1:检测 NoSQL 注入 NoSQL 运算符注入 提交查询运算符 检测 MongoDB 中的运算符注入 lab2:利用 NoSQL 运算符注入绕过身份验证 利用语法注入来提取数据 MongoDB 中的数据…

【rust/egui/android】在android中使用egui库

文章目录 说在前面AndroidStudio安装编译安装运行问题 说在前面 操作系统:windows11java版本:23android sdk版本:35android ndk版本:22rust版本: AndroidStudio安装 安装AndroidStudio是为了安装sdk、ndk,…

大数据实时数仓Hologres(三):存储格式介绍

文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指定表的存储…

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置 MySQL数据类型概述MySQL字符集设置注意事项 MySQL数据类型概述 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高…

Linux性能调优技巧

目录 前言1. CPU性能优化1.1 调整CPU调度策略1.2 合理分配多核处理 2. 内存性能优化2.1 调整内存分配策略2.2 缓存和分页优化 3. 磁盘I/O性能优化3.1 使用合适的I/O调度器3.2 磁盘分区和文件系统优化 4. 网络性能优化4.1 优化网络参数4.2 调整网络拥塞控制算法 5. 系统监控与优…

【机器学习】网络安全——异常检测与入侵防御系统

我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…

Kotlin 处理字符串和正则表达式(二十一)

导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…

Python_文件处理

一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实际的存储,因此python解释器执行完数据就消失了。实际开发中,我们经常需要从外部存储介质(硬盘、光盘、U盘等)读取数据,或者将…

查缺补漏----IP通信过程

1.DHCP协议 H3刚接入网络时,只知道自己的MAC地址,所以需要通过DHCP协议请求自己的IP地址。 通过DHCP协议,得到IP地址、子网掩码、网关与DNS服务器IP地址。 DHCP协议是应用层协议(传输层为UDP),请求报文是广播(H3不知…

‌在Python中,print(f‘‘)是什么?

‌在Python中,print(f’)表示使用f-string对字符串进行格式化输出。‌ f-string是Python 3.6及以上版本引入的一种新的字符串格式化机制,它允许在字符串中直接嵌入表达式,这些表达式在运行时会被其值所替换。使用f-string可以更方便地将变量的…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近,到了国庆节,自己呆在学校当守校人,太无聊了,顺便做一个小demo帮祖国目前庆生!!! 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程

介绍: 真正的好东西,搞网站优化seo从业必备。可以快速提升网站权重,带来的流量哗哗的 PHP泛目录生成源码 可生成新闻页面和关键词页面 带使用方法视频教程 泛目录可以用来提升网站收录和排名 合理运用目录可以达到快速出词和出权重的效果…

【Bug】解决 Ubuntu 中 “error: Unable to Find Python3 Executable” 错误

解决 Ubuntu 中 “Unable to Find Python3 Executable” 错误 在 Ubuntu 系统上使用 Python 进行开发时,遇到找不到 python3 可执行文件的错误。 主要问题是无法正常打开终端(原生与terminator),找不到python3,且无法…

教育技术革新:SpringBoot在线教育系统开发指南

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

20240930编译orangepi5的Android12使用HDMI0输出

20240930编译orangepi5的Android12使用HDMI0输出 2024/9/30 9:44 缘起,3月份的时候,看PDD拼多多的优惠券给力! 就入手了香橙派Orange Pi 5。 自从制作TF卡的启动卡的时候,坏了一张SanDisk的32GB的TF卡。 从此就对TF卡启动无比抵触…

Unity_Obfuscator Pro代码混淆工具_学习日志

Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro(大约$70&a…

Docker面试-24年

1、Docker 是什么? Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像:Docker的…