软件分层(数据结构/软件逻辑上分层+举例),相连节点的概念+如何相连,为什么是层状结构(软件分层,网络协议分层+梳理协议顺序),协议分层(打电话例子)

news2024/11/13 23:30:58

目录

软件分层

介绍

举例 

类的继承

虚拟文件系统

线程接口封装

虚拟地址空间

总结

为什么是层状的

软件分层

网络协议

原因

梳理协议顺序

相连节点

协议分层

引入

示例

实际上

逻辑上

制定出协议


软件分层

介绍

通过将软件系统划分为不同的层次,每一层都有特定的功能和职责,以实现模块化,可维护和可扩展的软件架构

这种分层设计有助于提高系统的可理解性,降低耦合度,并促进团队协作

举例 

类的继承

  • 子类和基类,两者类型相互独立
  • 子类可以共享基类的功能,并在此基础上添加、修改或扩展功能,从而建立出类之间的层次关系

虚拟文件系统

  • 虚拟文件系统是一个抽象层,它提供了一个统一的接口,使得操作系统和应用程序能够访问不同种类的文件系统,而不需要关心底层文件系统的具体实现
  • 通过struct file指针,指向不同的硬件:

线程接口封装

  • 我们之前模拟封装c++的线程库时,是使用回调的方式,在构造函数内部调用传进来的函数指针线程库接口模拟封装(使用参数包接受参数,2种方法)-CSDN博客
  • 这就将线程定义和其工作函数进行分层,二者耦合度很低,代码仅通过回调的方式将两者联系在一起

虚拟地址空间

虚拟地址空间属于更高层次的抽象,它隐藏了底层硬件的细节,为应用程序提供了一种独立于实际物理硬件的地址空间

他内部存在着嵌套关系的分层结构:

除此之外,分层也可以是并列关系

  • 每个程序都认为自己独立拥有内存空间,从而在逻辑上将每个程序进行分层
  • 同时,虚拟地址空间内部分出了不同区域,这也属于软件分层

总结

软件分层可以在数据结构/软件逻辑上进行分层,大多数是两者都有

这样分出了各个模块,让代码的耦合度降低了,在维护时也更加容易

为什么是层状的

软件分层

可以将大项目分成多个小模块,写和维护都容易

  • 如果需要修改或扩展系统的功能,只需关注特定层次,而不必涉及整个系统

高内聚,低耦合是代码要实现的目标

  • 模块内的高内聚使得修改和维护变得更加容易,而低耦合减少了模块之间的依赖,使得修改一个模块时不会波及到其他模块

网络协议

原因

除了是因为整个网络项目规模太大了,需要我们分模块

还因为"协议是由问题产生的",问题是层状的,协议自然也是

梳理协议顺序

要运输数据,首先面临的最基础的问题就是,如何将数据在两个相连节点之间传输,有了这第一步,才会有在两个相距甚远的主机之间传输的可能性

相连节点
  • 指在网络拓扑结构中,这两个节点之间直接通过一条物理链路或网络连接相连
  • 这种连接方式称为点对点连接
  • 点对点连接可以通过不同的物理介质和连接方式来实现
  • 比如:以太网直连(比如通过网线),通过wifi连接,形成点对点链路(通过光纤,电缆等实现)等方式

有了这个可能性,我们还需要探讨如何真正实现

  • 可以跳转的设备很多,怎么选择路径呢?而且如何知道自己已经到达目标主机了呢?
  • 就需要一个唯一标识,来区分每一台主机,也就是解决定位主机的问题

两个问题都解决后,我们从技术层面上可以运输到目标主机了

  • 但怎么确保一定能做到呢,就来到可靠性的问题
  • 也就是制定[传输数据时如果出错]的预备方案,确保让可靠的数据源发送成功

当我们可以可靠地运输数据后,也就该思考下一步,数据到位后要干什么,总不能运到就不管了吧

  • 也就有了应用层面上的设计,为传输的数据赋予实际意义

协议分层

引入

  • 既然网络协议是分层的,那么其他协议也可能会是分层设计
  • 我们已经有了协议的认知,以及分层的好处,下面就来看看协议是如何实现分层的
  • 我们以打电话为例(当然这里只是简单的两层,实际的网络通信会更加复杂, 需要分更多的层次)

示例

下面是两个人通过座机交流:

实际上

我们可以通过前面学习的知识分析出 -- 两个人并没有直接交流,是借助了电话这个设备才成功交流

  • a的声音被电话接收,电话通过压缩,编码,加密音频等行为,最后转换为光电信号
  • 光电信号以电话之间的通信协议,传输给c的电话
  • 然后c的电话进行一系列处理,将光电信号转换为音频并播放出来

逻辑上

  • 但是在逻辑上我们认为,我们是直接和对方交流的(因为逻辑上人与电话无法交流,总不会出现c的电话直接来找a交流吧(瘫))
  • 所以人与人被划分为同一层
  • 而电话本身就要进行交流(将光电信号传给对方),所以电话也分为一层

制定出协议

所以,我们针对划分出的这两层,制定对应的协议

  • 人与人,规定用某种相同语言交流
  • 电话之间,制定某种协议

而连接这两层的,就是听筒(相当于听筒是接口),这就实现了高内聚,低耦合的要求

  • 这样进行分层后,一层有问题,不会影响上下层
  • 即使换了说其他语言的人 / 换了设备(也可以说是更换了协议) ,依然可以沟通
  • 所以,分层可以让维护成本大大降低

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

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

相关文章

OpenHarmony、HarmonyOS打开编辑 PDF 等操作的三方组件使用教程

项目场景: 随着数字化时代的发展,PDF 文档成为广泛应用于各行业的重要文件格式。为了提高OpenHarmony/HarmonyOS生态系统的功能性和用户体验,我们需要一款支持打开、编辑PDF文件的应用程序。 使用户能够轻松打开、浏览和编辑PDF文件。该应用将充分利用OpenHarmony/HarmonyO…

Day20-磁盘管理

Day20-磁盘管理 1. cut 切:2. 磁盘历史和内外部物理结构介绍2.1 磁盘发展趋势和实现措施2.2 磁盘知识的体系结构2.3 机械磁盘的外部结构2.4 SSD固态硬盘的外部结构2.5 固态硬盘内部结构2.6 缓存在服务器各硬件上的速度和大小对比另类维度图解,从上到下由高速到低速&…

机器学习:集成学习(Python)

一、Adaboost算法 1.1 Adaboost分类算法 adaboost_discrete_c.py import numpy as np import copy from ch4.decision_tree_C import DecisionTreeClassifierclass AdaBoostClassifier:"""adaboost分类算法:既可以做二分类、也可以做多分类&#…

数字化转型导师坚鹏:BLM证券公司数字化转型战略

BLM证券公司数字化转型战略 ——以BLM模型为核心,实现知行果合一 课程背景: 很多证券公司存在以下问题: 不知道如何系统地制定证券公司数字化转型战略? 不清楚其它证券公司数字化转型战略是如何制定的? 不知道…

Leetcode560. 和为 K 的子数组 -hot100

题目&#xff1a; 代码(首刷看解析 2024年3月2日&#xff09;&#xff1a; class Solution { public:int subarraySum(vector<int>& nums, int k) {// 前缀和 遍历int res 0;unordered_map<int, int> sumPre;int sum 0;// 关键&#xff1a;初始化sumPre[0]…

艺术家林曦:新的一年|开启人生的最佳竞技状态吧!

开年大吉呀&#xff5e;新的一年&#xff0c;你准备好如何启程了吗&#xff1f;    暄桐是一间传统美学教育教室&#xff0c;创办于2011年&#xff0c;艺术家林曦是创办人和授课老师&#xff0c;教授以书法为主的传统文化和技艺&#xff0c;皆在以书法为起点&#xff0c;亲…

element-plus 的el-img组件访问oss图片自动拼接前端地址

这是我的组件代码 <el-image style"width: 100px; height: 100px" :src"scope.row.logo" />访问时候 竟然凭借上了前端的地址端口 原来是我的oss服务是使用了域名做cdn加速的 内容分发网络&#xff08;CDN&#xff09;或者服务器配置&#xff0c;可…

通过修改host文件来访问GitHub

前言&#xff1a; 由于国内环境的原因&#xff0c;导致我们无法流畅的访问GitHub&#xff0c;。 但是我们可以采取修改host文件来实现流畅访问。 缺点&#xff1a;需要不定时的刷新修改。 操作流程 一、查询IP地址 以下地址可以查询ip地址 http://ip.tool.chinaz.com/ htt…

艾尔登法环备份存档方法

1.PC端使用WinR输入%AppData%\EldenRing 2.如图创建文件夹“我这取名叫备份存档”&#xff0c;将其中的三个文件复制到新建的文件夹中 3.理论上只需要备份替换ER0000.sl2文件即可

《Spring Security 简易速速上手小册》第9章 测试与维护 (2024 最新版)

文章目录 9.1 编写安全测试9.1.1 基础知识9.1.2 重点案例&#xff1a;保护 REST API9.1.3 拓展案例 1&#xff1a;自定义登录逻辑测试9.1.4 拓展案例 2&#xff1a;CSRF 保护测试 9.2 Spring Security 升级和维护9.2.1 基础知识9.2.2 重点案例&#xff1a;适配新的密码存储格式…

智能驾驶规划控制理论学习02-基于搜索的路径规划方法

目录 一、路径搜索问题 二、图论基础 三、图搜索方法 1、广度优先搜索&#xff08;BFS&#xff09; bfs与dfs的区别 bfs的搜索过程 bfs的算法实现 2、迪杰斯特拉算法&#xff08;Dijkstra&#xff09; 核心思想 优先级队列 Dijkstra搜索过程 Dijkstra优缺点…

计算机视觉基础知识(十六)--图像识别

图像识别 信息时代的一门重要技术;目的是让计算机代替人类处理大量的物理信息;随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;图像识别技术利用计算机对图像进行处理\分析\理解,识别不同模式的目标和对象;过程分为信息的获取\预处理\特征抽取和选择\分类器设计\分…

Mybatis | 动态SQL

目录: 动态SQL中的 “元素” :\<if>元素\<choose>、\<when>、\<otherwise>元素\<where>、\<trim>元素\<set>元素\<foreach>元素\<bind>元素 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正…

【Python】进阶学习:pandas--如何根据指定条件筛选数据

【Python】进阶学习&#xff1a;pandas–如何根据指定条件筛选数据 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

什么是片内片间均匀性?

均匀性在芯片制程的每一个工序中都需要考虑到&#xff0c;包括薄膜沉积&#xff0c;刻蚀&#xff0c;光刻&#xff0c;cmp&#xff0c;离子注入等。较高的均匀性才能保证芯片的产品与性能。那么片内和片间非均匀性是什么&#xff1f;如何计算&#xff1f;有什么作用呢&#xff…

热点一线总有神秘小盒现身,到底有什么神秘之处?高人气随身WiFi第一名,2024最值得购买的随身WiFi

近日&#xff0c;一位好事儿的网友突然将多个新闻热点的截图发在了自己的社交平台上&#xff0c;引起了大家的广泛关注。原来在这些记者报道一线新闻的时候&#xff0c;总有一个神秘小盒子在若隐若现。后经网友深扒得知这是格行品牌旗下的大热产品——格行随身WiFi。为什么格行…

【C++ AVL树】

文章目录 AVL树AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转右单旋左单旋左右双旋右左双旋 代码实现 总结 AVL树 AVL树的概念 二叉搜索树在顺序有序或接近有序的情况下&#xff0c;而插入搜索树将退化为单叉树&#xff0c;此时查找的时间复杂度为O(n)&#xff0c;效率低…

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…

python爬虫之selenium知识点记录

selenium 一、前期准备 1、概述 selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。 我们可以利用selenium提供的各项功能。 帮助我们完成数据的抓取。 2、学习目标 掌握 selenium发送请求&#xff0c;加载网页的方法 掌…

新一代电话机器人开源PHP源代码

使用easyswoole 框架开发的 新一代电话机器人开源PHP源码 项目地址&#xff1a;https://gitee.com/ddrjcode/robotphp 代理商页面演示地址 http://119.23.229.15:8080 用户名&#xff1a;c0508 密码&#xff1a;123456 包含 AI外呼管理&#xff0c;话术管理&#xff0c;CR…