软件分层(数据结构/软件逻辑上分层+举例),为什么是层状结构(软件分层,网络协议分层),协议分层(打电话例子)

本文主要是介绍软件分层(数据结构/软件逻辑上分层+举例),为什么是层状结构(软件分层,网络协议分层),协议分层(打电话例子),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

软件分层

介绍

举例 

类的继承

虚拟文件系统

线程接口封装

虚拟地址空间

总结

为什么是层状的

软件分层

网络协议

协议分层

引入

示例

实际上

逻辑上

制定出协议


软件分层

介绍

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

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

举例 

类的继承

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

虚拟文件系统

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

线程接口封装

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

虚拟地址空间

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

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

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

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

总结

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

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

为什么是层状的

软件分层

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

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

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

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

网络协议

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

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

  • 要运输数据,首先面临的最基础的问题就是,如何将数据在两个设备之间传输
  • 能送是能送了,送到哪去呢?接下来自然是解决定位主机的问题
  • 两个问题都解决后,我们从技术层面上可以运输到目标主机了,但怎么确保一定能做到呢,就来到可靠性的问题
  • 当我们可以可靠地运输数据后,也就该思考下一步,数据到位后要干什么,总不能运到就不管了吧,也就有了应用层面上的设计

协议分层

引入

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

示例

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

实际上

我们可以通过前面学习的知识分析出 -- 两个人并没有直接交流

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

逻辑上

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

制定出协议

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

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

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

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

这篇关于软件分层(数据结构/软件逻辑上分层+举例),为什么是层状结构(软件分层,网络协议分层),协议分层(打电话例子)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/753420

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

VC网络协议

// PCControlDlg.cpp : 实现文件//#include "stdafx.h"#include "PCControl.h"#include "PCControlDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框#ifde

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口