软件工程第七周

内聚

  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.mzph.cn/news/115829.shtml

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

相关文章

虚拟机weblogic服务搭建及访问(物理机 )

第一、安装环境: weblogic10.3.6.jar, jdk1.6.bin(开始安装jdk1.8后,安装域的时候报错 ,版本很重要) centos7虚拟机(VMware9) 本机系统windows7 以上安装包如果需要可以私信我,上传资源提示…

yolov8x-p2 实现 tensorrt 推理

简述 在最开始的yolov8提供的不同size的版本,包括n、s、m、l、x(模型规模依次增大,通过depth, width, max_channels控制大小),这些都是通过P3、P4和P5提取图片特征; 正常的yolov8对象检测模型输出层是P3、…

【WCA-KELM预测】基于水循环算法优化核极限学习机回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

springboot实现消息通知需求

springboot实现消息通知需求 参考: Springboot整合Websocket(推送消息通知) SpringBoot使用SSE进行实时通知前端 vuespringbootwebsocket实现消息通知,含应用场景

CNN记录】pytorch中flatten函数

pytorch原型 torch.flatten(input, start_dim0, end_dim- 1) 作用:将连续的维度范围展平维张量,一般写再某个nn后用于对输出处理, 参数: start_dim:开始的维度 end_dim:终止的维度,-1为最后…

Python实现一个简单的http服务,Url传参输出html页面

摘要 要实现一个可以接收参数的HTTP服务器,您可以使用Python标准库中的http.server模块。该模块提供了一个简单的HTTP服务器,可以用于开发和测试Web应用程序。 下面是一个示例代码,它实现了一个可以接收参数的HTTP服务器: 代码…

关于单机流程编排技术——docker compose安装使用的问题

最近在学习docker相关的东西,当我在docker上部署了一个nest应用,其中该应用中依赖了一个基于mysql镜像的容器,一个基于redis镜像的容器。那我,当我进行部署上线时,在启动nest容器时,必须保证redis容器和mys…

华为OD 完全二叉树非叶子部分后序遍历(200分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应往年部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为OD…

跨境商城源码可以定制开发吗?

跨境电商已经成为了一个全球性的趋势,而跨境商城源码定制开发是否可行,一直是广大电商从业者心中的疑问。跨境商城源码定制开发是指在已有的商城源码的基础上,进行个性化需求的修改和开发,以满足商家在跨境电商中的特定需求。下面…

mybatis plus中json格式实战

1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…

一、XSS加解密编码解码工具

一、XSS加解密编码解码工具 解释&#xff1a;使用大佬开发的工具&#xff0c;地址&#xff1a;https://github.com/Leon406/ToolsFx/blob/dev/README-zh.md 在线下载地址&#xff1a; https://leon.lanzoui.com/b0d9av2kb(提取码&#xff1a;52pj)&#xff08;建议下载jdk8-w…

kubesphere 一键部署K8Sv1.21.5版本

1. 在centos上的安装流程 1.1 安装需要的环境 yum install -y socat conntrack ebtables ipset curl1.2 下载KubeKey #电脑必须可以访问github&#xff0c;很重要。不然安装过程会出问题 curl -sfL https://get-kk.kubesphere.io | VERSIONv1.2.1 sh - chmod x kk1.3 开始安…

mysql 优化 聚簇索引=主键索引吗

在 InnoDB 引擎中&#xff0c;每张表都会有一个特殊的索引“聚簇索引”&#xff0c;也被称之为聚集索引&#xff0c;它是用来存储行数据的。一般情况下&#xff0c;聚簇索引等同于主键索引&#xff0c;但这里有一个前提条件&#xff0c;那就是这张表需要有主键&#xff0c;只有…

javaEE -6(10000详解文件操作)

一&#xff1a;认识文件 我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个的单位进行保存&#xff0c;这个独立的单位就被抽象成文件的概念&#xff0c…

Linux:firewalld防火墙-基础使用(2)

上一章 Linux&#xff1a;firewalld防火墙-介绍&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/133960695?spm1001.2014.3001.5501 我使用的系统为centos7 firewalld启动停止等操作 systemctl start firewalld 开启防火墙 systemct…

文件的基本操作(创建文件,删除文件,读写文件,打开文件,关闭文件)

1.创建文件(create系统调用) 1.进行Create系统调用时&#xff0c; 需要提供的几个主要参数: 1.所需的外存空间大小&#xff08;如:一个盘块&#xff0c;即1KB) 2&#xff0e;文件存放路径&#xff08;“D:/Demo”) 3.文件名&#xff08;这个地方默认为“新建文本文档.txt”) …

linux进程管理,一个进程的一生(喂饭级教学)

这篇文章谈谈linux中的进程管理。 一周爆肝&#xff0c;创作不易&#xff0c;望支持&#xff01; 希望对大家有所帮助&#xff01;记得收藏&#xff01; 要理解进程管理&#xff0c;重要的是周边问题&#xff0c;一定要知其然&#xff0c;知其所以然。看下方目录就知道都是干货…

MD5生成和校验

MD5生成和校验 2021年8月19日席锦 任何类型的一个文件&#xff0c;它都只有一个MD5值&#xff0c;并且如果这个文件被修改过或者篡改过&#xff0c;它的MD5值也将改变。因此&#xff0c;我们会对比文件的MD5值&#xff0c;来校验文件是否是有被恶意篡改过。 什么是MD5&#xff…

cmd命令快速打开MATLAB

文章目录 复制快捷方式添加 -nojvm打开 复制快捷方式 添加 -nojvm 打开 唯一的缺点是无法使用plot&#xff0c;这一点比不上linux系统&#xff0c;不过打开速度还是挺快的。

Java面试(基础篇)——解构Java常见的基础面试题 结合Java源码分析

fail-safe 和fail-fast机制分别有什么作用&#xff1f; Fail-fast&#xff1a;快速失败 Fail-fast &#xff1a; 表示快速失败&#xff0c;在集合遍历过程中&#xff0c;一旦发现容器中的数据被修改了&#xff0c;会立刻抛出ConcurrentModificationException 异常&#xff0c…