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

目录

软件分层

介绍

举例 

类的继承

虚拟文件系统

线程接口封装

虚拟地址空间

总结

为什么是层状的

软件分层

网络协议

原因

梳理协议顺序

相连节点

协议分层

引入

示例

实际上

逻辑上

制定出协议


软件分层

介绍

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

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

举例 

类的继承

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

虚拟文件系统

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

线程接口封装

虚拟地址空间

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

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

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

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

总结

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

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

为什么是层状的

软件分层

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

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

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

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

网络协议

原因

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

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

梳理协议顺序

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

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

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

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

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

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

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

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

协议分层

引入

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

示例

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

实际上

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

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

逻辑上

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

制定出协议

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

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

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

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

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 23:56:11       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 23:56:11       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 23:56:11       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 23:56:11       18 阅读

热门阅读

  1. 蓝桥杯倒计时47天!DFS基础——图的遍历

    2024-03-20 23:56:11       17 阅读
  2. VBA将当前打开的表格生成PDF图片

    2024-03-20 23:56:11       20 阅读
  3. Vue的优点

    2024-03-20 23:56:11       17 阅读
  4. Vue中Diff算法一文详解

    2024-03-20 23:56:11       16 阅读
  5. 机器学习 - PyTorch一些常用的用法

    2024-03-20 23:56:11       19 阅读
  6. 【华为OD机试】绘图机器【C卷|100分】

    2024-03-20 23:56:11       22 阅读
  7. python中的类与对象

    2024-03-20 23:56:11       17 阅读