OOAD利器之UML基礎


UML:Unified Modeling Language,即統一建模語言,簡單地說就是一種有特殊用處的語言。本文是我初步學習UML的學習筆記,對於我們菜鳥碼農來說,讓我們做設計的可能性不大,但至少能看懂是必要的。

一、所謂模型

1.1 模型是對現實的簡化

  模型是提供系統的藍圖,模型可是包括詳細計划。也可是是從更高程度考慮系統的總體計划,每個系統可以從不同的方面用不通過的模型來描述。因而每個模型都是在語義上閉合的抽象系統。模型可以是結構性的,強調系統的組織。也可是是行為性的,強調系統的動態方面。

1.2 為什么要建模?

  有人雲:建模是為了能夠更好地理解正在開發的系統

  通過建模可以達到如下目的:

  1、模型有助於按照實際情況或按照所需的樣式對系統進行可視化;

  2、模型能夠規約系統的結構或行為;

  3、模型給出了構造系統的模板;

  4、模型對做出的決策進行文檔化;

PS:對於一個復雜的系統,如銀行、電信系統建模的重要性就越大。如果不能很好的理解一個復雜系統,盲目開發,失敗的可能性很大。

二、小談UML

2.1 神馬是UML?

  統一建模語言(Unified Modeling Language , UML) 是一種繪制軟件藍圖的標准語言,可以用UML對軟件密集的制品進行可視化、詳述、構造和文檔化。

2.2 UML的優點

  1、可視化:清晰的模型有利於交流

  2、詳述:可以使用UML對分析、設計、實現等決策進行詳細描述

  3、構造:把UML描述映射成編程語言

  4、文檔化:系統的所有細節都可以是UML進行描述。如:項目計划、發布活動等

2.3 應用領域

  1、企業信息系統

  2、銀行與金融服務

  3、電信

  4、國防、航天

  5、科學

  6、基於Web的分布式服務

三、類圖—分析業務模型

3.1 類

  類是一組具有相同屬性、操作、關系和語義的對象描述,一個類可是實現一個或者多個接口。下圖是類在VS里面的圖形表示:

  (1)UML預設了四種可見性,分別為公開(public)、私有(private)、保護(protected)、包(package) 減號(-)為私有可見性,加號(+)為公開可見性。可見,上圖中的類圖所有都為public。

  (2)在UML中抽象類與普通是同一個是圖表示,只是名字會變成斜體,如下圖所示,調整IsAbstract屬性為True后類名變為斜體:

3.2 關系

  關系是事物之間的聯系,在面向對象的建模中,有三種重要的關系是依賴、泛化、關聯。

  (1)依賴

  依賴是一種使用關系,一個事物使用另一個事物。在圖形上,把依賴畫成一條有方向的虛線,指向被依賴的事物。如果被使用的類發生變化,那么另一個類的操作必然受影響。依賴關系在.net語言中體現為 局部變量方法的參數或者對靜態方法的調用,如工具類,現實生活中人與錘子。

  (2)泛化

  在泛化關系中,子類繼承了父類的行為和含義,子類也可以增加新的行為和含義或覆蓋父類中的行為和含義。在圖形上,在泛化畫成一個帶有空心三角行指向父類。泛化在.net中就是一個繼承的關系。

  (3)關聯

  關聯是一種結構關系,它指明一個對象與另一個對象間的關系。

  ①相互關聯體現的是兩個類、或者 類與接口之間語義級別的一種強依賴關系,是一種長期的穩定的關系;表現在代碼層面,為被關聯類以類屬性的形式出現在關聯類中,也可能是關聯類引用了一個類型為被關聯類的全局變量。

  上圖中ClassA與ClassB相互關聯,在代碼中各自有對方類型實例的一個屬性。

  ②單向關聯表現在代碼層面,為被關聯類B 以類屬性的形式出現在關聯類 A中,也可能是關聯類A引用了一個類型為被關聯類B的全局變量;

  上圖中Subject關聯Observer,並且是一個一對多的關系,那么在代碼中Subject類中會有一個Observer類對象的集合屬性。

  下面我們來看看幾種特殊的關聯關系,他們是:

  ③聚合關系:

  聚合是關聯關系的一種特例,他體現的是整體與部分擁有的關系。此時整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬於多個整體對象,也可以為多個整體對象共享;比如汽車與發動機;表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分。

  ④組合關系:

  組合也是關聯關系的一種特例,這種關系比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束。例如:孕婦死了胎兒自然也就死了(有點血腥的例子,抱歉!);表現在代碼層面,和關聯關系是一致的,只能從語義級別來區分。

3.3 接口

  接口(interface)如同契約,負責的類必須負責實現它的公開操作,以及負責維護它的公開屬性。

3.4 綜合案例:公司-部門-員工 類圖關系

四、用例圖—描述系統的行為

  用例圖用來表達系統對外提供的服務或功能,適合用來作為需求搜集階段的工作。

4.1 用例與執行者

  實際設計中,常用用例(UseCase)來表達系統需求或者系統對外呈現的行為。用例采用橢圓圖示,參與者(Actor)是人型圖示。由於它會參與系統的運作,因此它跟用例之間有連接線段。

4.2 包含關系

  包含(include)關系指的是兩個用例之間的關系,其中一個用例(稱作基本用例,base use case)的行為包含了另一個用例(稱作包含用例,include case)的行為。如下圖,取款的 時候會包含一個用戶驗證的用例。

4.3 擴展關系

  擴展(extend)關系將基本用例中一段相對獨立並且可選的動作,用擴展(Extension)用例加 以封裝,再讓它從基用例中聲明的擴展點(Extension Point)上進行擴展,從而使基用例行為更簡練和目標更集中。如下圖,我們在取完款后,可以打印憑條,也可以不用打印憑條。這個功能就可以使用擴展來表示。

五、活動圖—流程分析利器之一

  活動圖通常用來表達業務流程、工作流或系統流程中一連串的動作。在我的實習前期,就經常用到活動圖來繪制需求調研到的業務流程,並將活動圖展示給客戶以確認需求,客戶也能看輕松地看懂。例如,下圖是一個簡單的登陸流程,登陸失敗跳轉到登陸頁面,登陸成功則跳轉到主界面。

PS:每個活動圖只能有一個開始節點,但是可以有多個結束節點

  (1)動作

  動作(activity)是最重要的組成元素,它代表一個執行步驟。

  

  (2)控制流

  帶箭頭的連接線稱為控制流(control flow)。當來源動作結束之后,控制流會啟動目標動作。

  

  (3)對象節點與對象流

  對象節點(object node)為矩形圖示,對象流(object flow)的圖示與控制流相同,不過它的其中一個端點必須是對象節點,而另一端必須是其他節點。控制流的兩個端點不可以都是對象節點。對象流不同於控制流,對象流可以攜帶數據或對象。

  

  上圖所示,在登陸成功后,我們將用戶的Session對象傳遞到下一個節點,下一個節點可以使用此對象。

  (4)決策與合並

  活動流程中,流程交匯點,稱為合並節點(merge node)。一個合並節點會有多條進入線,但是只有一條離開線,合並節點的圖示是大的空心菱形,所有進入合並節點的支流都會經歷同一條離開線。

  

  決策節點(decision node)與合並節點共用圖示,兩者都是大的空心菱形。不過,決策節點只有一個進入線,但有多條離開線

  

  (5)分叉和連接

  分叉表示的是一個控制流被兩個或多個控制流代替,經過分叉后,這些控制流是並發進行的。

  連接正好與分叉相反,表示兩個或多個控制流被一個控制流代替。使用分叉需要使用連接把分叉的流匯聚成一個流。

  (6)發送信號和接受事件

  發送信號操作是一種操作,可以將消息或信號發送給另一個活動。

  接受事件操作是一種要在等到消息或信號后才能繼續執行的操作。

  如上圖所示,創建發票是一個發送信號,將發票這個消息發給另一個活動:收款。而收款是一個接受事件,它必須等到開完發票才能繼續執行后續操作。

六、時序圖—流程分析利器之二

  時序圖,又稱序列圖,用來表達系統內部一群對象的交互情況,它是一種行為圖。水平方向是對象維,垂直方向是時間維。例如:page與action之間的交互情況可以用時序圖來表示,在發送list請求的時候我們需要一個返回結果集。

  (1)生命線

  生命線(lifeline)代表一個參與交互的實例,它的圖示是頂端連接矩形的虛線,虛線頂部的矩形可以放置生命線的名稱。

  (2)執行發生

  對象在接收到消息之后執行一項活動,執行期間稱為執行發生(execution occurrence),它的圖示是長條矩形。

  (3)消息

  消息(message)的圖示是一條帶箭頭的線段,橫跨在兩個生命線上,對象之間通過發送消息來交互。

  (4)終止

   生命線有生有滅,終止(stop)就是用來表達生命線終止的時刻。終止的圖示是一個大叉,放置在生命線的虛線底部,代表生命線已經終止。

參考資料

  (1)張傳波,《火球——UML大戰需求分析》,http://www.amazon.cn/tushu/dp/B0079FMI40  

  (2)周猛,《UML統一建模語言基礎》,http://wenku.baidu.com/view/28fe7f65ad02de80d4d840ec.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM