软件工程第七周

news2024/12/23 16:48:46

内聚

  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中,表示为圆圈的处理过程描述了如何转换数据,并通过箭头表示数据流动。
    • 数据流设计的关键是理解输入、输出、处理和数据存储之间的关系。
    • 这种方法尤其适合于那些处理、转换和存储数据的应用,如批处理系统、信息处理系统或事务处理系统。

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


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


结构化分析 

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

现在讲的是:

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

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

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

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

相关文章

x-ui部署(与宝塔共存)

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 x-ui是一个搭建节点的工具,有一键安装脚本,可以快速的部署。但是如果我…

企业如何保护机密文件安全

企业如何保护机密文件安全,数据加密技术有哪些 随着公司业务的不断发展,公司机密文件的保护是一家公司不可忽视的问题。机密文件包含了企业的核心信息,如客户资料、产品方案、财务数据等。 安企神数据防泄密系统下载试用 企业数据一旦泄露…

Springboot中开启多线程,实现异步非阻塞、异步阻塞、有无返回值的场景

需求背景 近期项目已上线,闲着没事就对功能进行性能测试,测着测着感觉部分功能效果不是很理想,于是就想着使用多线程的方式对部分接口进行优化,顺便在这里记录下如何选择使用多线程。 实现多线程有两种开启方式:分别…

学习笔记-MongoDB(命令增删改查,聚合,权限管理,索引,java使用)

基础概念 1 什么是mogodb? MongoDB 是一个基于分布式文件/文档存储的数据库,由 C 编写,可以为 Web 应用提供可扩展、高性能、易部署的数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功…

Linux备份Docker的mysql数据并传输到其他服务器保证数据级容灾

目录 简介什么是容灾 ?容灾的分类容灾和备份有什么连系 ? 数据级容灾备份步骤1、scp命令:用于Linux之间复制文件和目录2、编写备份数据库脚本3、crontab定时任务执行脚本4、测试 应用级容灾业务级容灾 简介 为了防止客户系统的数据丢失&…

2023Etsy入驻攻略——防封安全

2023了,跨境电商现在上车还来得及吗?当然!Etsy是一个低成本低竞争高回报的平台,相较于其他电商平台,他的佣金非常低,利润率更高,非常合适跨境小白入局。 但由于目前Etsy关闭了中国大陆卖家的注…

论文解读:Large Language Models as Analogical Reasoners

一、动机 大模型在各种类型的NLP任务上均展现出惊艳的表现。基于CoT propmt能够更好地激发大模型解决复杂推理问题的能力,例如解决数学解题,可以让模型生成reasoning path。现有的经典的CoT方法有few-shot cot、zero-shot cot等。然后现有的cot面临两个…

C++进阶篇2---多态

1.多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是当不同的对象,去完成某个行为,会产生不同的状态 举个例子:同样是吃饭,狗吃狗粮,猫吃猫粮,不同的对象&#…

Javascript基础-DOM

文章目录 WEB APISDOM-Document Object Model概念DOM对象获取DOM对象通过css选择器获取其他获取方式 操作元素内容操作元素属性定时器 DOM-事件监听概念案例-关闭广告老版本事件类型事件对象获取事件对象属性 环境对象回调函数 事件流事件捕获事件冒泡阻止冒泡阻止默认行为 解绑…

【JAVA学习笔记】40 - 抽象类、模版设计模式(抽象类的使用)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/abstract_ 一、抽象类的引入 很多时候在创建类的时候有一个父类,比如animal类,他的子类会有各种方法,为了复用需要进行方法的重写&…

微信小程序OA会议系统个人中心授权登入

在我们的完成微信登入授权之前,首先我们要完成我们前面所写的代码,如果有不会的大家可以去看以下我发的前面几个文章链接我发下面了,各位加油! 微信小程序OA会议系统数据交互-CSDN博客 微信小程序会议OA系统其他页面-CSDN博客 …

基于nodejs+vue视频网站的设计与实现mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

机器学习---CNN(创建和训练一个卷积神经网络并评估其性能)上

1. cnn_operations模块 cnn_operations类 staticmethoddef calc_loss(Y, tilde_Y):# 训练样本个数n_samples Y.shape[0]# 网络代价loss 0for i in range(n_samples):loss np.sum((Y[i, :] - tilde_Y[i, :])**2)loss / (2 * n_samples)return loss计算网络代价: …

编程自学路线:开源免费的教育资源 | 开源专题 No.40

trekhleb/javascript-algorithms Stars: 174.1k License: MIT 这个项目是一个包含许多流行算法和数据结构的 JavaScript 示例。该项目提供了各种不同类型的数据结构,如链表、队列、栈等,并且还提供了各种常见的算法实现,如排序算法、搜索算…

Kubernetes技术与架构-网络 3

Kubernetes集群支持为Pod或者Service申请IPV4或者IPV6的地址空间。 kube-apiserver --service-cluster-ip-range<IPv4 CIDR>,<IPv6 CIDR> kube-controller-manager --cluster-cidr<IPv4 CIDR>,<IPv6 CIDR> --service-cluster-ip-range<IPv4 CI…

Java switch封神之路

Java switch升级之路 一&#xff0c;介绍 switch 是一种用于多分支条件判断的控制流语句。它通过检查一个表达式的值&#xff0c;然后根据不同的情况执行相应的代码块。 在大多数编程语言中&#xff0c;switch 语句由多个 case 分支组成&#xff0c;每个 case 后面跟着一个常…

unity游戏画质设置功能实现

在游戏中往往会出现游戏画质设置的功能。 如图&#xff1a; 这个功能是怎么实现完成的呢&#xff1f; 一、目标&#xff1a;实现切换画质功能 二、了解unity支持的画质 首先要了解unity中共支持多少种画质。 在代码中也可以进行打印。 方法如下&#xff1a; void Start …

NC61 两数之和

牛客网 NC61 两数之和 https://www.nowcoder.com/share/jump/7890810391698077140732 记录&#xff1a;维护哈希表&#xff0c;题目满足&#xff0c;numbers内必有两数相加为target&#xff0c;则可理解为&#xff0c;每次只需要判断target减去当前数&#xff0c;是否能在维护的…

zookeeper源码(02)源码编译启动及idea导入

本文介绍一下zookeeper-3.9.0源码下载、编译及本地启动。 下载源码 git clone https://gitee.com/apache/zookeeper.gitcd zookeeper git checkout release-3.9.0 git checkout -b release-3.9.0源码编译 README_packaging.md文件 该文件介绍了编译zookeeper需要的环境和命…