軟件分層(數據結構/軟件邏輯上分層+舉例),相連節點的概念+如何相連,為什么是層狀結構(軟件分層,網絡協議分層+梳理協議順序),協議分層(打電話例子)

目錄

軟件分層

介紹

舉例?

類的繼承

虛擬文件系統

線程接口封裝

虛擬地址空間

總結

為什么是層狀的

軟件分層

網絡協議

原因

梳理協議順序

相連節點

協議分層

引入

示例

實際上

邏輯上

制定出協議


軟件分層

介紹

通過將軟件系統劃分為不同的層次,每一層都有特定的功能和職責,以實現模塊化,可維護和可擴展的軟件架構

這種分層設計有助于提高系統的可理解性,降低耦合度,并促進團隊協作

舉例?

類的繼承

  • 子類和基類,兩者類型相互獨立
  • 子類可以共享基類的功能,并在此基礎上添加、修改或擴展功能,從而建立出類之間的層次關系

虛擬文件系統

  • 虛擬文件系統是一個抽象層,它提供了一個統一的接口,使得操作系統和應用程序能夠訪問不同種類的文件系統,而不需要關心底層文件系統的具體實現
  • 通過struct file指針,指向不同的硬件:

線程接口封裝

  • 我們之前模擬封裝c++的線程庫時,是使用回調的方式,在構造函數內部調用傳進來的函數指針線程庫接口模擬封裝(使用參數包接受參數,2種方法)-CSDN博客
  • 這就將線程定義和其工作函數進行分層,二者耦合度很低,代碼僅通過回調的方式將兩者聯系在一起

虛擬地址空間

虛擬地址空間屬于更高層次的抽象,它隱藏了底層硬件的細節,為應用程序提供了一種獨立于實際物理硬件的地址空間

他內部存在著嵌套關系的分層結構:

除此之外,分層也可以是并列關系

  • 每個程序都認為自己獨立擁有內存空間,從而在邏輯上將每個程序進行分層
  • 同時,虛擬地址空間內部分出了不同區域,這也屬于軟件分層

總結

軟件分層可以在數據結構/軟件邏輯上進行分層,大多數是兩者都有

這樣分出了各個模塊,讓代碼的耦合度降低了,在維護時也更加容易

為什么是層狀的

軟件分層

可以將大項目分成多個小模塊,寫和維護都容易

  • 如果需要修改或擴展系統的功能,只需關注特定層次,而不必涉及整個系統

高內聚,低耦合是代碼要實現的目標

  • 模塊內的高內聚使得修改和維護變得更加容易,而低耦合減少了模塊之間的依賴,使得修改一個模塊時不會波及到其他模塊

網絡協議

原因

除了是因為整個網絡項目規模太大了,需要我們分模塊

還因為"協議是由問題產生的",問題是層狀的,協議自然也是

梳理協議順序

要運輸數據,首先面臨的最基礎的問題就是,如何將數據在兩個相連節點之間傳輸,有了這第一步,才會有在兩個相距甚遠的主機之間傳輸的可能性

相連節點
  • 指在網絡拓撲結構中,這兩個節點之間直接通過一條物理鏈路或網絡連接相連
  • 這種連接方式稱為點對點連接
  • 點對點連接可以通過不同的物理介質和連接方式來實現
  • 比如:以太網直連(比如通過網線),通過wifi連接,形成點對點鏈路(通過光纖,電纜等實現)等方式

有了這個可能性,我們還需要探討如何真正實現

  • 可以跳轉的設備很多,怎么選擇路徑呢?而且如何知道自己已經到達目標主機了呢?
  • 就需要一個唯一標識,來區分每一臺主機,也就是解決定位主機的問題

兩個問題都解決后,我們從技術層面上可以運輸到目標主機了

  • 但怎么確保一定能做到呢,就來到可靠性的問題
  • 也就是制定[傳輸數據時如果出錯]的預備方案,確保讓可靠的數據源發送成功

當我們可以可靠地運輸數據后,也就該思考下一步,數據到位后要干什么,總不能運到就不管了吧

  • 也就有了應用層面上的設計,為傳輸的數據賦予實際意義

協議分層

引入

  • 既然網絡協議是分層的,那么其他協議也可能會是分層設計
  • 我們已經有了協議的認知,以及分層的好處,下面就來看看協議是如何實現分層的
  • 我們以打電話為例(當然這里只是簡單的兩層,實際的網絡通信會更加復雜, 需要分更多的層次)

示例

下面是兩個人通過座機交流:

實際上

我們可以通過前面學習的知識分析出 -- 兩個人并沒有直接交流,是借助了電話這個設備才成功交流

  • a的聲音被電話接收,電話通過壓縮,編碼,加密音頻等行為,最后轉換為光電信號
  • 光電信號以電話之間的通信協議,傳輸給c的電話
  • 然后c的電話進行一系列處理,將光電信號轉換為音頻并播放出來

邏輯上

  • 但是在邏輯上我們認為,我們是直接和對方交流的(因為邏輯上人與電話無法交流,總不會出現c的電話直接來找a交流吧(癱))
  • 所以人與人被劃分為同一層
  • 而電話本身就要進行交流(將光電信號傳給對方),所以電話也分為一層

制定出協議

所以,我們針對劃分出的這兩層,制定對應的協議

  • 人與人,規定用某種相同語言交流
  • 電話之間,制定某種協議

而連接這兩層的,就是聽筒(相當于聽筒是接口),這就實現了高內聚,低耦合的要求

  • 這樣進行分層后,一層有問題,不會影響上下層
  • 即使換了說其他語言的人?/ 換了設備(也可以說是更換了協議)?,依然可以溝通
  • 所以,分層可以讓維護成本大大降低

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713802.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniApp 調整小程序 單個/全部界面橫屏展示效果

我們打開uni項目 小程序端運行 默認是豎著的一個效果 我們打開項目的 pages.json 給需要橫屏的界面 的 style 屬性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就橫屏了 如果是要所有界面都橫屏的話 就直接在pages.json 的 gl…

Ps:海綿工具

海綿工具 Sponge Tool可用于調整圖像中特定區域的飽和度,常用于增加或減少顏色的飽和度。 快捷鍵:O 在特別的灰度圖像上,則可用于調整對比度,這可以開發出更多的創意技巧。 ◆ ◆ ◆ 常用操作方法與技巧 1、海綿工具主要用于調整…

源碼解析篇 | YOLOv8官方源碼項目目錄結構解析

前言:Hello大家好,我是小哥談。YOLOv8是一種目標檢測算法,它是YOLO(You Only Look Once)系列算法的第8個版本。YOLOv8相比于之前的版本,在檢測精度和速度上都有所提升,它在各種場景下都表現出色…

Git源碼管理

參考視頻:16-git的日志以及版本管理_嗶哩嗶哩_bilibili 參考博客:Git && Docker 學習筆記-CSDN博客 目錄 簡介 個人操作初始化 初始化git目錄 查看生成的git目錄文件 配置git工作目錄的用戶信息 查看工作區的狀態,生成文件的…

【JS】生成N位隨機數

作用 用于郵箱驗證碼 碼 ramNum.js /*** 生成N位隨機數字* param {Number} l 默認&#xff1a;6&#xff0c;默認生成6位隨機數字* returns 返回N位隨機數字*/ const ramNum (l 6) > {let num for (let i 0; i < l; i) {const n Math.random()const str String(n…

C++面試干貨---帶你梳理常考的面試題(一)

顧得泉&#xff1a;個人主頁 個人專欄&#xff1a;《Linux操作系統》 《C從入門到精通》 《LeedCode刷題》 鍵盤敲爛&#xff0c;年薪百萬&#xff01; 1.C和C的區別 1.語法和特性&#xff1a;C是一種過程式編程語言&#xff0c;而C是一種面向對象編程語言。C在C的基礎上增加…

Java智慧云HIS醫院信息化系統源碼 更具靈活性、擴展性

目錄 什么是云HIS 趨勢與轉變 HIS上云后有哪些好處 解決方案 云HIS組成 1、門診掛號 2、住院管理 3、電子病歷 4、藥物管理 5、統計報表 6、綜合維護 7、運營運維 什么是云HIS 云HIS是一種基于云計算技術的醫院信息管理系統。云HIS可以幫助醫院管理各類醫院信息&a…

CIE-Alevel-Physics分類真題下載(更新中)

鏈接真題歸類年份https://www.savemyexams.com/https://gceguide.com/papershttps://pastpapers.papacambridge.com/https://rocketrevise.comhttps://www.exam-mate.com/markhint.inhttps://xtremepape.rs/threads/as-and-a-level-physics-topical-pastpapers-upto-2015-with-…

Java Linux基本命令面試題

Java Linux基本命令面試題 前言1、查看文件內容有哪些命令可以使用&#xff1f;2、終端是哪個文件夾下的哪個文件&#xff1f;黑洞文件是哪個文件夾下的哪個命令&#xff1f;3、用什么命令對一個文件的內容進行統計&#xff1f;(行號、單詞數、字節數)4、怎么使一個命令在后臺運…

每日OJ題_分治歸并②_力扣LCR 170. 交易逆序對的總數

目錄 力扣LCR 170. 交易逆序對的總數 解析代碼1 解析代碼2 力扣LCR 170. 交易逆序對的總數 LCR 170. 交易逆序對的總數 難度 困難 在股票交易中&#xff0c;如果前一天的股價高于后一天的股價&#xff0c;則可以認為存在一個「交易逆序對」。請設計一個程序&#xff0c;輸…

Linux系統中安裝redis+redis后臺啟動+常見相關配置

1、下載Redis Redis官網&#xff1a;https://redis.io/ 歷史版本&#xff1a; http://download.redis.io/releases 2、連接Linux&#xff08;或者VMwear&#xff09; 我們安裝的是linux版本的redis 打開xftp我們需要先將我們的Redis上傳到服務器上 解壓到這里 解壓的指令 …

創建型模式之建造者模式

一、概述 1、建造者模式&#xff1a;將一個復雜對象的構建和它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示 2、將客戶端與包含多個部件的復雜對象的創建過程分離&#xff0c;客戶端無須知道復雜對象的內部組成部分與裝配方式&#xff0c;只需要知道所需建造…

Spring MVC源碼中設計模式——適配器模式

適配器模式介紹 適配器模式&#xff08;Adapter Pattern&#xff09;是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬于結構型模式&#xff0c;它結合了兩個獨立接口的功能。 應用場景&#xff1a; 1、系統需要使用現有的類&#xff0c;而此類的接口不符合系統的需要…

[c++] 繼承和多態整理一

1 private 和 protected 繼承&#xff0c;子類指針不能賦值給父類指針 如下代碼&#xff0c;有一個基類 Base&#xff0c;Derived1&#xff0c;Derived2&#xff0c;Derived3 3 個子類繼承了基類 Base&#xff0c;分別是 private 繼承&#xff0c;protected 繼承&#xff0c;p…

基于springboot+vue的紡織品企業財務管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Socket網絡編程(五)——TCP數據發送與接收并行

目錄 主要實現需求TCP 服務端收發并行重構啟動main方法重構重構分離收發消息的操作重構接收消息的操作重構發送消息TCPServer調用發送消息的邏輯監聽客戶端鏈接邏輯重構Socket、流的退出與關閉 TCP 客戶端收發并行重構客戶端 main函數重構客戶端接收消息重構客戶端發送消息重構…

前端封裝通用下載方法及下載后端返回的文件流

目錄 1.下載方法封裝 2.將后端返回的文件流轉換為文件 3.總結 1.下載方法封裝 ①說明 前端的請求大概分為三種類型 普通請求&#xff1a;常用的get&#xff0c;post&#xff0c;put&#xff0c;delete等請求 上傳請求&#xff1a;使用post請求&#xff0c;發送formdata對…

Zookeeper學習1:概述、安裝、應用場景、集群配置

文章目錄 概述安裝LinuxWindows 配置參數集群參考配置文件配置步驟流程啟動 概述 Zookeeper&#xff1a; 為分布式框架組件提供協調服務的中間件 【類似&#xff1a;文件系統通知機制】 負責存儲上下層應用關系的數據以及接收觀察者注冊監聽&#xff0c;一旦觀察查關心的數據發…

git操作基本指令

1.查看用戶名 git config user.name 2.查看密碼 git config user.password 3.查看郵箱 git config user.email 4.修改用戶名 git config --global user.name "xxx(新用戶名)" 5.修改密碼 git config --global user.password "xxx(新密碼)" 6.修改…

筆記73:ROS中的各種消息包

參考視頻&#xff1a; 33.ROS 的標準消息包 std_msgs_嗶哩嗶哩_bilibili 34. ROS 中的幾何包 geometry_msgs 和 傳感器包 sensor_msgs_嗶哩嗶哩_bilibili 標準消息包&#xff1a;std_msgs常用消息包&#xff1a;common_msgs導航消息包&#xff1a;nav_msgs幾何消息包&#xf…