主頁 > 軟體設計 > 軟體體系結構

軟體體系結構

2021-10-30 11:48:52 軟體設計

目錄

  • 前言
  • 概述
    • 軟體重用
      • 可重用的元素
      • 構件
      • 構件模型(規模——越大越好?越小越好?)
      • 構件獲取
      • 可重用技術和領域之間的關系
      • 構件管理
    • 軟體體系結構
      • 軟體體系結構的反作用
      • 軟體體系結構的商業周期
  • 軟體體系結構建模
    • 4+1模型視圖
      • 邏輯視圖
      • 開發視圖
      • 行程視圖
      • 物理視圖
      • 場景
    • 軟體體系結構的生命周期
    • 軟體體系結構設計核心模型
      • 構件
      • 構件之間的關系
      • 連接件
      • 配置
    • 軟體體系結構
  • 軟體體系結構風格
    • 管道過濾器風格
    • 資料抽象和面向物件組織
    • 事件驅動風格
    • 分層系統
    • 倉庫系統及知識庫
      • 黑板系統
    • C2(層次網路+訊息驅動)
  • 全域軟體體系結構

前言

按照慣例,在這里寫下我對軟體體系結構的一點理解和認識
軟體工程是一門研究利用工程化的方法,構建維護有效的實用的高質量的軟體的學科,東北林業大學軟體工程專業核心課,就是按照軟體生命周期的課來安排的,將每一個生命周期中的程序都抽象成一門課來給學生講解,軟體體系結構這門課是繼需求分析和系統分析之后的一門課
需求分析教會了我們如何進行需求獲取、需求分析和需求驗證,最后形成需求規格說明書,系統分析教會了我們如何抽象出合理的類圖,而軟體體系結構講的是如何把類抽象成構件以及如何合理的安排這些構件(或者類)

概述

軟體重用

在兩次或多次開發的程序中,重復使用相同或相近的元素的程序

可重用的元素

  • 代碼
  • 設計檔案
  • 測驗用例
  • 需求分析檔案
  • 框架
  • 設計程序
  • 領域知識

構件

  • 語意完整、語法正確、有可重用價值的單位軟體
  • 是軟體重用程序中可明確辨識的系統
  • 結構上是語意描述、通信介面和實作代碼的復合體

構件模型(規模——越大越好?越小越好?)

青鳥模型:外部介面+內部介面
在這里插入圖片描述

構件獲取

  • 開發新的構件
  • 購買
  • 從歷史遺留工程中提取
  • 去構件庫中查找需要的構件
  • 由現有構件做適應性修改

可重用技術和領域之間的關系

領域具有內聚性和穩定性——前提
可重用資訊具有領域特定性——約束

構件管理

對大量的構件進行有效的管理,方便構建的存盤、檢索和提取
構件的描述;名稱、功能、參考函式、版本號等

關鍵詞法
在這里插入圖片描述
優點:簡單易行
缺點:不便于查詢

刻面法
在這里插入圖片描述
優點:方便查找相似構件
缺點:查詢程式太難做

超文本法
在這里插入圖片描述
優點:操作人性化
缺點:容易差跑題了

軟體體系結構

軟體體系結構為軟體系統提供了一個結構、行為和屬性的高級抽象,由構成系統的元素的描述、這些元素的相互作用、指導元素集成的模式以及這些模式的約束組成,
軟體體系結構不僅指定了系統的組織結構和拓撲結構,并且顯示了系統需求和構成系統的元素之間的對應關系,提供了一些設計決策的基本原理,
在這里插入圖片描述

軟體體系結構的反作用

  • 影響開發組織結構
  • 影響開發組織目標
  • 影響客戶對下一個系統的要求
  • 構建程序中豐富團隊經驗,影響后續設計
  • 改變行業人員學習和實踐的技識訓境

軟體體系結構的商業周期

在這里插入圖片描述

軟體體系結構建模

軟體體系結構的建立應位于需求分析之后,軟體設計之前,在建立軟體體系結構時,設計師主要從結構的角度對整個系統進行分析,選擇恰當的構件、構件間的相互作用以及他們的約束,最后形成一個系統框架以滿足用戶的需求,為軟體設計奠定基礎,

4+1模型視圖

在這里插入圖片描述
每個視圖只關心系統的一個側面,結合在一起才能反映系統的軟體體系結構的全部內容
在每個視圖上均獨立地應Perry & Wolf 的公式,即定義一個所使用的元素集合(構件、容器、連接件)
在這里插入圖片描述

邏輯視圖

主要是整個系統的抽象結構表述
關注系統提供最終用戶的功能
不涉及具體的編譯即輸出和部署
通常用BOOCH標記法,或在UML中用類圖表示
在這里插入圖片描述

開發視圖

主要側重軟體模塊的組織和管理,為編程人員服務
軟體可以通程序式庫或子程式進行組織,從而可以由不同的人員進行開發
主要考慮軟體內部需求,要充分考慮軟體開發的容易程度,重用性,軟體的通用性,充分考慮由于具體開發工具不同而帶來的局限性,
在這里插入圖片描述

  • 常用層次風格
  • 采用4-6層子系統
  • 僅進行相鄰互動
  • 層次越低,通用性應越強
    在這里插入圖片描述

行程視圖

側重系統的運行特性
關注非功能需求(性能、可用性、并發性)
定義邏輯視圖中的各個類的操作是在哪一個執行緒中被執行
可以描述成多層抽象
每個級別分別關注不同的方面
最高層抽象中:行程結構=構成一個執行單元的一組任務 | 獨立、分布 | 通過邏輯網路相互通信
在這里插入圖片描述

在這里插入圖片描述

物理視圖

如何把軟體映射到硬體上
關注系統性能、規模、可靠性等
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

場景

重要系統活動的抽象
最重要的需求抽象
聯系4個視圖
在這里插入圖片描述

軟體體系結構的生命周期

在這里插入圖片描述
需求分析階段
體系結構需求包括需求獲取、生成類圖、對類分組、將類打包成構件和需求評審等程序,

建立軟體體系結構階段
選擇合適的體系結構風格,把體系結構需求階段已確認的構件映射到體系結構中,產生一個中間結構,分析構件之間的相互作用和關系,對中間結構進行細化,

設計階段
主要是對系統進行模塊化并決定描述各個構件間的詳細介面、演算法和資料型別的選定,對上支持建立體系結構階段形成的框架,對下提供實作基礎,

實作階段
設計階段設計的演算法及資料型別進行程式語言表示,滿足設計體系結構和需求分析的要求,從而得到滿足設計需求的目標系統,

軟體體系結構設計核心模型

在這里插入圖片描述

構件

構件定義:構件是一個資料單元或一個計算單元,它由構件的物件的集合、屬性的集合、動作的集合和埠的集合組成,

抽象表示為C = (O,A,X,P),
O 是構件的所有物件的集合;
A 是構件屬性的集合;
X 是構件動作的集合;
P 是構件埠的集合,

構件是具有某種功能的可重用的軟體模版單元
從其內容角度看,表現為:計算元素、資料存盤
從其形式角度看,表現為:原子構件、復合構件
構件的介面:一組埠

構件之間的關系

順序結構(順序運算)
選擇結構(選擇運算)
回圈結構
在這里插入圖片描述
順序運算定理:
在這里插入圖片描述

連接件

構件間的互動依據內容分類:
表現為:管道、程序呼叫、事件廣播……
連接件的介面:一組角色

連接件是構件運算的實作,它是一個6元組
<ID,Role,Beha,Msgs,Cons,Non-Func>
其中,Role為連接件和構件的互動點的集合,它由一個四元組定義
Role=<Id,Action,Event,LConstrains>

配置

拓撲邏輯和約束

軟體體系結構

定義:設論域為U,
(1)構件是一個軟體體系結構
(2)連接件是一個軟體體系結構
(3)構件經有限次連接(運算)后是軟體體系結構,
軟體體系結構記為A=<C,O>,其中C表示組成體系結構的構件集合,O表示構件運算的集合

性質:

  • 封閉性:即構件與構件、構件與體系結構、體系結構與體系結構連接后仍是一個體系結構,
  • 層次性:即體系結構可由構件連接而成,而體系結構又可以再經過連接組成新的更大的體系結構,
  • 可擴充性:即一個滿足條件的新構件可以通過連接加入到結構中,

軟體體系結構風格

什么決定了軟體體系結構風格?控制原則、質量屬性

管道過濾器風格

在這里插入圖片描述
優點:
構件間耦合關系降低,易于分解問題,實作重用
易于維護和擴展
為系統的運行分析提供便捷條件
支持并發計算

缺點:
不適合處理互動頻繁的應用
資料決議、合成麻煩

擴展形式:管線、有界管道、批處理

資料抽象和面向物件組織

在這里插入圖片描述
優點:
封裝性、便于重用
可實作互動

缺點:
呼叫使得修改被傳播

事件驅動風格

在這里插入圖片描述
事件:監聽事件、宣告事件

構成:事件消費者、事件生產者、事件管理器
先注冊才能發通知
基本結構:
事件監聽介面和事件監聽器
事件監聽的注冊和注銷

特征:
是面向物件風格的變體
事件接觸者不知道哪些構件會被這些事件影響
無法預知和假定構件的處理順序

優點:
為重用提供支持
為系統改進提供方便

缺點:
榷訓了對系統計算的控制能力
有資料共享的負擔
系統邏輯關系復雜

分層系統

在這里插入圖片描述
每個層次為上一層提供服務
它同時作為用戶呼叫下層的功能
嚴格的分層
半透明的分層

優點:
支持基于抽象程度遞增的系統設計
良好的擴展性
支持重用

缺點:
層次劃分困難
適用性受限

倉庫系統及知識庫

要素:
兩類構件:中央資料單元+外部構件
控制策略:兩類構件間的互動方式

分類:
傳統資料庫型(被動)
黑板系統(主動)

黑板系統

在這里插入圖片描述
中央資料單元是系統的核心,存盤資料和系統狀態資料
知識源是相互獨立的,通過黑板系統完成互動
控制單元是非獨立單元

優點:
易于增加資料的生產者和消費者
良好的知識庫擴展性
易于保證資料的同步、一致性
在這里插入圖片描述

C2(層次網路+訊息驅動)

組織規則:
頂、底
構件不能直接相連
連接件之間自由連接
連接件的直接相連是有序的

作業方式:請求+通知

特點:
基底獨立性
構件只見互動只能通過訊息傳遞實作
多執行緒
在這里插入圖片描述
在這里插入圖片描述

全域軟體體系結構

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342058.html

標籤:其他

上一篇:利用kill命令實作程式的故障自愈

下一篇:InnoDB存盤引擎體系架構

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more