天天看點

【信管1.8】軟體工程(二)UML與面向對象分析

軟體工程(二)UML與面向對象分析

軟體工程的第二篇文章,依然還是跟需求相關的内容,依然也全部都是重點。而且這一部分的内容會更偏技術一些。在需求采集分析結束之後,形成了 SRS ,接下來就是再将需求轉化成開發人員的需求,也就是技術語言描述的需求。在這裡,我們會使用 UML 這種圖形語言進行系統的描述,同時 UML 也是面向對象的,是以,緊接着我們就可以進行面向對象的分析,進而為系統架構的搭建做好準備。

UML

UML 是一種定義良好、易于表達、功能強大且普遍适用的模組化語言,它的作用不僅限于支援 OOA 和 OOD ,還支援從需求分析開始的軟體開發的全過程。從總體上看,UML 包括構造塊、規則和公共機制三個部分。其中在構造塊中,包括事物(thing)、關系(relationship)、和圖(diagram)。

事物

主要就是對現實世界的抽象,也稱為模組化元素,包括結構事物、行為事物、分組事物和注釋事物。其實事物就是我們要操作的對象,包括類、接口、協作、用例、活動、構件、節點等,也包括互動和狀态機。(了解即可)

關系

UML 用關系把事物結合在一起,主要有下列四種關系:

  • 1)依賴(dependency):一個事物發生變化會影響另一個事物的語義。
  • 2)關聯(association):描述一對對象之間的連接配接結構關系,也是語義上的聯系。
  • 3)泛化(generalization):描述特殊元素的對象可以替換一般元素的對象。其實就是 繼承 的一種反關系。之前我們就說過,子類繼承父類,父類泛化子類。
  • 4)實作(realization):類之間的語義關系,一個類指定了由另一個類保證執行的契約。一般我們會說子類實作了父類的抽象方法,或者說類實作了接口方法。

UML 主要的表現形式就是各種各樣的圖,從圖的動靜表示來看,可以分為 動态 和 靜态 兩種類型的圖。

1. 靜态圖包括如下 7 種。

類圖:給出了系統的靜态設計視圖。在系統模組化中,最常見的就是類圖,主要是描述一組類、接口、協作和它們之間的關系。

【信管1.8】軟體工程(二)UML與面向對象分析

對象圖:給出系統的靜态設計視圖或靜态程序視圖。對象圖就是不顯示方法屬性的類圖。

包圖:描述由模型本身分解而成的組織單元,以及它們之間的依賴關系,比如類圖更細。

組合結構圖:描述結構化類的内部結構,用于畫出結構化類的内部内容。

構件圖:描述一個封閉的類和它的接口、端口,以及由内嵌的構件和連接配接件構成的内部結構。用于表示系統的靜态設計實作視圖。

部署圖:描述對運作時的處理節點及在其中的構件配置。在下圖中,大框内部并在左側帶兩個小長方形的就是 構件圖 ,整個一起就是 部署圖 。

【信管1.8】軟體工程(二)UML與面向對象分析

制品圖:描述計算機中一個系統的實體結構。

2. 動态圖包括以下 7 種。

用例圖:描述一組用例、參與者與它們之間的關系。給出系統的靜态用例視圖,描述需求。用例圖最明顯的特征是裡面一定有小人,然後用例都是橢圓形的。

【信管1.8】軟體工程(二)UML與面向對象分析

順序圖/序列圖:是一種互動圖,展現了一種互動,由一組對象或參與者以及它們之間可能發送的消息構成,是強調消息的時間次序的互動圖,也可以叫時序圖。順序圖肯定有消息從左向右傳遞的過程,有很多圖也會有消息從右向左傳回的過程。微信、支付寶的支付接入文檔中都有這個時序圖的展現。

【信管1.8】軟體工程(二)UML與面向對象分析

通信圖/協作圖:也是一種互動圖,強調收發消息的對象或參與者的結構組織。它與時序圖的差別就是沒有順序的概念,而是一種對象之間的組織結構。

【信管1.8】軟體工程(二)UML與面向對象分析

定時圖:一種互動圖,強調消息跨越不同對象或參與者的實際時間,而不僅僅隻是關心消息的相對順序。

狀态圖:描述一個狀态機,它由狀态、轉移、事件和活動組成,給出了對象的視圖,強調事件導緻的對象行為,這非常有助于對反應式的系統模組化。在狀态圖中,我們會看到目前的狀态、以後的狀态,以及觸發的條件。

【信管1.8】軟體工程(二)UML與面向對象分析

活動圖:将程序或其他計算結構展示為計算内部一步步的控制流和資料流,專注于系統的動态視圖。活動圖其實非常類似于 産品經理 或者我們在進行業務分析時畫的的 流程圖 。

【信管1.8】軟體工程(二)UML與面向對象分析

互動概覽圖:是活動圖和順序圖的混合物。

以上 14 種 UML 相關的圖,我們給出了圖示的都是重點要關注的,要能夠看到類似的圖就知道它是什麼圖。其它的隻需要了解它是屬于靜态還是動态圖就好了。

UML 視圖

UML 對系統架構的定義是系統的組織結構,包括系統分解的組成部分,以及它們的關聯性、互動機制和指導原則等提供系統設計的資訊。具體來說,就是指以下 5 個系統視圖:

1)邏輯視圖,即類、子系統、包和用例實作的子集。

2)程序視圖:它是邏輯視圖的一次執行執行個體,描述了并發與同步結構。

3)實作視圖:對組成基于系統的實體代碼的檔案和構件進行模組化。

4)部署視圖:把構件部署到一組實體節點上,表示軟體到硬體的映射和分布結構。

5)用例視圖:最基本的需求分析模型。

面向對象分析

OOA,面向對象分析,它的基本任務是運用 OO 方法,對問題域進行分析和了解,正确認識其中的事物及它們之間的關系,找出描述問題域和系統功能所需的類和對象,定義它們的屬性和職責,以及它們之間的各種聯系。核心工作也是兩個,建立系統使用的 用例模型 和 分析模型 。

用例模型

用例方法是一種動态的需求合成技術,先擷取需求,記錄下來,然後從這些零散的要求和期望中進行整理與提煉,進而建立用例模型。用例模型以 用例圖 為主要表現形式。它包括四個階段:識别參與者、合并需求獲得用例、細化用例描述、調整用例模型。其中前三個階段是必需的,但是第四個階段有一個很重要的概念,就是用例之間的關系,它包括以下三種關系。

  • 包含關系(include)。當可以從兩個或兩個以上的用例中提取公共行為時,應該使用包含關系。
  • 擴充關系(extend)。如果一個用例明顯地混合了兩種或兩種以上的不同場景,即根據情況可能發生多種分支,則可以将這個用例分為一個基本用例和一個或多個擴充用例。
  • 泛化關系。當多個用例共同擁有一種類似的結構和行為的時候,可以将它們的共性抽象成為父用例,其他的用例作為泛化關系中的子用例。
【信管1.8】軟體工程(二)UML與面向對象分析

泛化關系我們在後面的分析模型中還會看到,在用例圖中展示泛化關系的情況還是比較少的,如果需要展示的話,連接配接線和我們下面看到的類圖中的泛化關系的連接配接線是一緻的。

分析模型

分析模型通過靜态的方式描述系統的基本軟體結構,展現類和對象如何組成系統,以及它們如何保持通信,實作系統行為。分析模型以 類圖 為主要表現形式。建立分析模型的過程包括:定義概念類、确定類之間的關系、為類添加職責、建立互動圖等,其中可以将前三個步驟統稱為 CRC(類、責任、協作) 模組化。在這裡,确定類之間的關系是分析模型中的重點内容,類之間的關系包括以下六種。

  • 關聯關系:關聯關系表示的是對象和類之間的關系,而不是類與類之間的關系。(類與對象)
【信管1.8】軟體工程(二)UML與面向對象分析
  • 依賴關系:兩個類 A 和 B ,如果 B 的變化可能會引起 A 的變化,則稱類 A 依賴于類 B 。(一起變化)
【信管1.8】軟體工程(二)UML與面向對象分析
  • 泛化關系:一般事物與該事物中的特殊種類之間的關系,也就是父類與子類的關系,是繼承的反關系,父類是子類的泛化。(父泛子)
【信管1.8】軟體工程(二)UML與面向對象分析
  • 共享聚集(聚合關系):表示類之間的整體與部分的關系,其含義是“部分”可能同時屬于多個“整體”,“部分”與“整體”的生命周期可以不相同。(整體部分可分離)
【信管1.8】軟體工程(二)UML與面向對象分析
  • 組合聚集:也是表示類之間整體與部分關系的。不過這裡的“部分”隻屬于一個“整體”,“部分”與“整體”是同呼吸共患難的。(整體部分不可分)
【信管1.8】軟體工程(二)UML與面向對象分析
  • 實作關系:将說明和實作聯系起來。說明就是我們程式代碼中的接口,隻有方法定義沒有方法體的,而實作就是實作了接口的類,必須去實作具體的接口方法。(類和接口)
【信管1.8】軟體工程(二)UML與面向對象分析

注意到上述六個圖示的連接配接線是不同的,這個也是要關注的内容,除了定義之外,要能看圖就知道目前的類圖表示的是哪種關系。

總結

今天的内容,如果沒猜錯的話,應該是整個系列的文章教程中圖檔最多的,而且也是記憶量最大的。UML 14 個圖的概念含義,其中重點的幾個圖形;用例圖的關系的含義及圖形表示;類圖的六種關系的含義及連接配接線的表示。這三大塊的内容,說實話,即使你在大學的時候學過軟體工程,如果上班以後沒有接觸過的話,那估計用不了兩三年也能忘得差不多了。在文章開頭也說過,這一篇也是整篇都是重點内容,是需要我們深入學習了解并記憶的。

關于 UML 相關的内容可以通過下方參考連結中的内容繼續去深入地學習。就像之前網絡中的 TCP/IP 之類的知識點一樣,UML 以及 面向對象分析 随随便便都是可以寫一本書的,而我們學習的内容,其實都隻是皮毛,或者說是它們最淺顯的核心知識點而已。沒别的,硬記下來吧,而且這部分知識對各位不管是做開發的小夥伴,還是期望和開發人員溝通的好基友們,都是非常有用的。

參考資料:

UML實踐詳細經典教程----用例圖、順序圖、狀态圖、類圖、包圖、協作圖:http://www.uml.org.cn/oobject/201609092.asp

UML圖中類之間的關系:依賴,泛化,關聯,聚合,組合,實作:http://www.uml.org.cn/oobject/201409232.asp