软件工程第七周

内聚

  1. 耦合 (Coupling): 描述的是两个模块之间的相互依赖程度。控制耦合是耦合度的一种,表示一个模块控制另一个模块的流程。高度的耦合会导致软件维护困难,因为改变一个模块可能会对其他模块产生意外的影响。

  2. 内聚 (Cohesion): 描述的是模块内部各个元素间功能相关性的度量。逻辑内聚指的是当模块内部的元素是因为它们都参与了某种特定的逻辑活动而被组合在一起时。一个高内聚的模块在功能上是紧密相关的,它只做一件事并且做得好。

逻辑内聚

控制耦合内部的缺点就是逻辑内聚的缺点,二者关联性很强。

如果两个模块之间存在控制耦合,那么这种耦合可能导致模块的逻辑内聚性受到破坏。这是因为一个模块可能会为了另一个模块而包含不必要的逻辑。


聚合关联度高的模块

考虑模块的可重用性:尽量将关联度高的模块聚合。

  1. 可重用性:模块设计的目标之一是确保模块可以在多个上下文中重复使用,而不需要进行大量的修改或特定的定制。为了实现可重用性,模块应该有明确的责任,并且尽量与其他模块解耦。

  2. 内聚性:一个高内聚的模块意味着它执行一个非常具体的任务,而不是多个不相关的任务。内聚性越高,模块的维护和理解就越容易。


内聚与方法名称

起名时的and or,你就要考虑模块之间的内聚性是不是好,在命名模块或函数时考虑它们的功能。

例如,一个名为LoadAndParseFile的函数可能执行两个操作:加载文件和解析文件。这可能意味着该函数的内聚性不够,因为它正在执行两个可能独立的操作。一个更好的做法可能是有两个独立的函数:LoadFileParseData,每个函数只执行一个操作,从而提高内聚性。


模块中的出错处理 

在软件工程领域,优雅和有意义的出错处理有以下好处:

  1. 用户友好性出错处理部分能够增强用户友好性,而用户友好性在软件工程领域中就是市场竞争力。用户不希望看到模糊或者技术性的错误信息。他们希望知道出了什么问题、为什么会出问题、以及如何解决。

  2. 增强市场竞争力:在市场上,一个具有优秀出错处理和用户友好提示的应用程序往往比一个频繁崩溃或给出含糊错误信息的程序更受欢迎。

  3. 提高产品质量感知:一个有着优雅出错处理的程序会被视为更加稳定和专业,即使它可能和其他程序一样经常出错。

  4. 减少技术支持的需求:明确、有指导意义的错误信息可以帮助用户自我解决问题,从而减少对技术支持的依赖。

  5. 有助于问题诊断:对于开发者和技术支持团队,有意义的错误日志和消息可以帮助快速定位和解决问题。

为了达到这些目标,软件应该设计成能够识别和处理潜在的错误情况,并为用户提供明确、有用和友好的反馈。这通常涉及到多层次的出错处理策略,从低级的异常处理到用户界面层的友好提示。


扇入和扇出

扇入(Fan-In)和扇出(Fan-Out)是软件工程中的两个重要概念,用于描述模块或组件之间的相互关系和依赖

  1. 扇出(Fan-Out):一个模块或组件调用或依赖其他多少模块或组件的数量。较高的扇出表示该模块多个其他模块有交互或依赖

  2. 扇入(Fan-In):有多少其他模块或组件依赖或调用一个特定的模块或组件。较高的扇入表示该模块多个其他模块所使用

在良好的软件结构中:

  • 顶层模块:可能有较高的扇出,因为它们可能会调用多个下层模块来完成任务。例如,一个主控制模块可能需要调用用户界面、数据处理和通信等多个子模块。

  • 中层模块:可能有较低的扇出,因为它们通常负责某个具体的功能,并只调用特定的下层模块。例如,数据处理模块可能只需要调用数据库模块。

  • 底层模块:可能有较高的扇入,因为它们是公共的、被多个上层模块使用的实用模块。例如,一个数据库访问模块可能被应用中的多个其他模块所使用。

考虑扇入和扇出的平衡对于软件设计是很重要的。高扇出可能导致代码难以维护,因为一个模块的更改可能影响到多个被调用的模块。而高扇入表示一个模块是重用性高的,但如果需要对这个模块进行修改,则必须非常小心,因为它可能会影响到许多依赖它的上层模块。

当考虑到模块之间的耦合时,控制扇入和扇出也很重要。理想情况下,我们希望降低模块之间的耦合,从而使系统更加模块化、灵活和可维护。


公共耦合限制使用,内容耦合不能使用!


总体设计与面向数据流设计

从层次性来讲:总体设计

从过程性来讲:面向数据流的设计方法

让我们详细地探讨这两个概念:

  1. 总体设计(从层次性来讲):

    • 这通常涉及到软件的高层架构或模块化设计。
    • 总体设计强调组件、模块或子系统之间的交互与协作,而不是具体实现细节
    • 这可以帮助我们组织代码,确保模块化,降低耦合度,提高内聚性。
    • 在总体设计中,考虑的关键点包括如何将大的系统划分为更小、更易于管理和实现的部分;以及这些部分如何协同工作。
    • 典型的层次性设计方法包括分层架构,例如在许多企业应用中使用的表示层、业务逻辑层和数据访问层。
  2. 面向数据流的设计方法(从过程性来讲):

    • 这种设计方法强调系统的动态行为,特别是数据在系统中的流动
    • 数据流图(DFD)是一种常用的表示系统数据流和处理过程的图形工具。
    • 在DFD中,表示为圆圈的处理过程描述了如何转换数据,并通过箭头表示数据流动。
    • 数据流设计的关键是理解输入、输出、处理和数据存储之间的关系。
    • 这种方法尤其适合于那些处理、转换和存储数据的应用,如批处理系统、信息处理系统或事务处理系统。

总的来说,这两种设计方法论提供了不同的视角来看待系统,但它们都旨在帮助开发者创建可维护、可扩展且健壮的软件系统。在实际的项目开发中,可以根据项目的特性和需求,选择适当的设计方法,或结合多种方法来使用。


模块的作用范围应该在模块的控制范围之内! 


结构化分析 

结构化:功能和数据分开,即面向数据流和面向数据结构。

现在讲的是:

怎么把分析模型变成软件的结构?得到结构再用总体设计调整。

设计接口、数据接口的同时,设计数据库数据接口涉及到数据结构和如何在模块之间传递数据。通常,数据接口会定义所需的数据类型、数据格式以及数据传递的方法(例如,通过参数传递、通过全局变量等)。

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

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

相关文章

操作教程|如何注册成为Moonbeam社区代表参与治理

社区代表是高度参与社区治理的社区成员,其主要职责是将社区成员委托给他们的投票权参与社区投票,并确保链上治理稳健发展和活跃参与度。本文将向您展示如何快速注册成为社区代表。 首先,前往Moonbeam委托网站,点击网页右上角的“…

【AI视野·今日Robot 机器人论文速览 第五十八期】Thu, 19 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 19 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers InViG: Benchmarking Interactive Visual Grounding with 500K Human-Robot Interactions Authors Hanbo Zhang, Jie Xu, Yuch…

nginx配置负载均衡--实战项目(适用于轮询、加权轮询、ip_hash)

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

021-Qt 配置GitHub Copilot

Qt 配置GitHub Copilot 文章目录 Qt 配置GitHub Copilot项目介绍 GitHub Copilot配置 GitHub CopilotQt 前置条件升级QtGitHub Copilot 前置条件激活的了GitHub Copilot账号安装 Neovim 启用插件,重启Qt配置 GitHub Copilo安装Nodejs下载[copilot.vim](https://gith…

计算机网络文章荟萃

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?-网络编程/专项技术区 - 即时通讯开发者社区! 1.什么是 socket - 掘金2.socket 的实现原理 - 掘金本文讲述了 socket 在 linux 操作系统下的数据结构,以及阻塞 IO 利用…

Linux网络编程:IP协议

目录 一. IP协议的功能 二. IP协议报头 2.1 IP报头的格式 2.2 IP报头各部分含义 三. IP报文的分片问题 3.1 什么是分片 3.2 分片的原理 3.3 合并报文 四. 网段划分 4.1 网络号和主机号 4.2 网络号和主机号的划分策略 4.3 特殊的IP地址 4.4 IP地址数量不足问题 五.…

Git常用的命令有哪些?

一、前言 git 的操作可以通过命令的形式如执行,日常使用就如下图6个命令即可 实际上,如果想要熟练使用,超过60多个命令需要了解,下面则介绍下常见的的git 命令 二、有哪些 配置 Git 自带一个 git config 的工具来帮助设置控制…

初识Java篇

1.介绍Java语言 1.1Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。 不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&am…

JoySSL证书买二送一买三送二特别活动

数字安全对于网站运营和用户信任至关重要。JoySSL作为一家知名的SSL证书品牌,为了回馈广大用户,推出了买二送一和买三送二的特别活动。 超值优惠:买二送一、买三送二 JoySSL的买二送一和买三送二活动非常有吸引力。在买二送一的活动中&#…

安装docker ,更换docker版本

docker dockerd & containerd Dockerd(Docker 守护进程)在其底层使用 Containerd 来管理容器。Containerd 是一个开源的容器运行时管理器,由 Docker 公司于2017年开发并开源,它负责实际的容器生命周期管理。 以下是 Docker 守…

简化通知基础设施:开源的消息通知服务 | 开源专题 No.41

novuhq/novu Stars: 22.9k License: MIT Novu 是一个开源的通知基础设施项目,它提供了统一的 API 来通过多个渠道发送通知,包括应用内、推送、电子邮件、短信和聊天。主要功能有: 为所有消息提供商 (应用内、电子邮件、短信、推送和聊天) 提…

javaEE -8(9000字详解网络编程)

一:网络编程基础 1.1 网络资源 所谓的网络资源,其实就是在网络中可以获取的各种数据资源,而所有的网络资源,都是通过网络编程来进行数据传输的。 用户在浏览器中,打开在线视频网站,如优酷看视频&#xff…

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…

反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )

1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术&#xff0c;此时集合的泛型将不能产生约束了&#xff0c;此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型&#xff0c;在 编译成Class文件进入 运行阶段 的时候&a…

使用adobe font style 工具绘制的艺术字,请鉴赏。

Adobe Fireflyhttps://firefly.adobe.com/generate/font-styles

广告联盟是什么?app开发者如何选择广告联盟?

在广告变现过程中&#xff0c;广告联盟是必不可少的因素&#xff0c;广告联盟是一种在线广告服务模式&#xff0c;它将广告主和网站主&#xff08;或博主、应用开发者等&#xff09;联系在一起&#xff0c;通过广告联盟平台的中介服务&#xff0c;将广告主的广告投放到网站主的…

记一次vue3实现TRSP大华相机拉流的经历

一、背景 业务场景&#xff0c;大华IP相机安装在A城市某建筑场所&#xff0c;工控机是内网通过4G流量卡上网&#xff0c;工控机通过相机采集数据后做故障识别并上传故障信息到地面服务器&#xff0c;地面服务器在B城市。 现需要在地面服务器提供的WEB界面上实现IP相机实时拉流…

leetcode 503. 下一个更大元素 II、42. 接雨水

下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&…

【BI看板】superset api接口分析

superset 的图表功能已经非常强大了&#xff0c;但是要满足个性化需求&#xff0c;定制是比不可少的了。。。来吧&#xff0c;我们一起看看他的API。 自带api文档 URL 127.0.0.1:5000/swagger/v1 截图 是不是很熟悉&#xff0c;没错就是swagger了。 图表接口地址 127.0.0.1:…

如何用 JMeter 编写性能测试脚本?

Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本&#xff1f; 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 img STEP 2. 了解配置信息 HTTP 请求各项信息说明&#xff08;以 JMeter 5.1 为例&#xff09;。 如下图所示&#xff1a;…