模型是對現實的簡化node
模型是提供系統的藍圖,模型但是包括詳細計劃。也但是是從更高程度考慮系統的整體計劃,每一個系統能夠從不一樣的方面用不經過的模型來描述。於是每一個模型都是在語義上閉合的抽象系統。模型能夠是結構性的,強調系統的組織。也但是是行爲性的,強調系統的動態方面編程
舉例:售樓中內心面的樓盤藍圖併發
建模是爲了可以更好地理解正在開發的系統異步
經過建模達到下面的目的
一、模型有助於按照實際狀況或按照所需的樣式對系統進行可視化
二、模型可以規約系統的結構或行爲
三、模型給出了構造系統的模板
四、模型對作出的決策進行文檔化
對於一個複雜的系統,如銀行、電信系統建模的重要性就越大。若是不能很好的理解一個複雜系統,盲目開發,失敗的可能性很大。
async
統一建模語言(Unified Modeling Language , UML) 是一種繪製軟件藍圖的標準語言,能夠用UML對軟件密集的製品進行可視化、詳述、構造和文檔化
一、可視化:清晰的模型有利於交流
二、詳述:可使用uml對分析、設計、實現等決策進行詳細描述
三、構造:把uml描述映射成編程語言
四、文檔化:系統的全部細節均可以是uml進行描述。如:項目計劃、發佈活動等編程語言
一、企業信息系統
二、銀行與金融服務
三、電信
四、國防、航天
五、科學
六、基於Web的分佈式服務分佈式
在這裏建模工具我是使用的VS2012自帶的。工具
文件——新建——項目——建模項目spa
一羣對象(object)享有相同的結構、行爲、約束和語義時,稱它們是同類(class)的對象。換句話說,定義一個類就至關於描述了一羣對象。在類中, 使用屬性(attribute)表達對象的結構, 使用操做(operation)表達對象的行爲。.net
類是一組具備相同屬性、操做、關係和語義的對象描述,一個類但是實現一個或者多個接口。左圖是類在.net裏面的圖形表示
UML預設了四種可見性,分別爲公開(public)、私有(private)、保護(protected)、包(package) 減號(-)爲私有可見性,加號(+)爲公開可見性
在UML中抽象類與普通是同一個是圖表示,只是名字會變成斜體。
關係是事物之間的聯繫,在面向對象的建模中,有三種重要的關係是依賴、泛化、關聯
依賴是一種使用關係,一個事物使用另外一個事物。在圖形上,把依賴畫成一條有方向的虛線,指向被依賴的事物。若是被使用的類發生變化,那麼另外一個類的操做必然受影響
依賴這是一種典型的臨時關係,表明了類之間的一種短暫的交互。依賴關係在 .net語言中體現爲 局部變量、方法的參數或者對靜態方法的調用,如工具類,現實生活中人與錘子。
在泛化關係中,子類繼承了父類的行爲和含義,子類也能夠增長新的行爲和含義或覆蓋父類中的行爲和含義。在圖形上,在泛化畫成一個帶有空心三角行指向父類
在.Net裏面泛化就是繼承關係
關聯是一種結構關係,它指明一個對象與另外一個對象間的關係。
ClassA與ClassB相互關聯
相互關聯體現的是兩個類、或者 類與接口之間語義級別的一種強依賴關係,是一種長期的穩定的關係;表如今代碼層面,爲被關聯類以類屬性的形式出如今關聯類中,也多是關聯類引用了一個類型爲被關聯類的全局變量
單向關聯
ClassA關聯於ClassB
單向關聯表如今代碼層面,爲被關聯類B以類屬性的形式出如今關聯類 A中,也多是關聯類A引用了一個類型爲被關聯類B的全局變量;
聚合是關聯關係的一種特例,他體現的是總體與部分擁有的關係。此時總體與部分之間是可分離的,他們能夠具備各自的生命週期,部分能夠屬於多個總體對象,也能夠爲多個總體對象共享;好比汽車與發動機;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分
組合也是關聯關係的一種特例,這種關係比聚合更強,也稱爲強聚合;他一樣體現總體與部分間的關係,但此時總體與部分是不可分的,總體的生命週期結束也就意味着部分的生命週期結束;孕婦死了胎兒天然也就死了;表如今代碼層面,和關聯關係是一致的,只能從語義級別來區分
不建議使用雙向關聯. 關聯有兩個端點, 在每一個端點能夠有一個基數, 表示這個關聯的類能夠有幾個實例.
常見的基數及含義
0..1:0 或1 個實例.
0..*: 對實例的數目沒有限制.
1: 只能有一個實例.
1..*: 至少有一個實例.
接口(interface)如同契約,負責的類必須負責實現它的公開操做,以及負責維護它的公開屬性
案例:公司-部門-員工 類圖關係
正向工程: uml圖生成代碼
在圖上直接點擊右鍵,選擇「」生成代碼「就可完成正向工程驟
逆向工程:從代碼生成uml圖
經過體系結構資源管理器找到須要反向工程的類的類型,拖到uml圖中。或者是在項目裏面找到類的類型拖到項目裏面也能夠完成反向工程
注意:在反向工程的時候,類的絕對路徑裏面不能出現中文
用例圖用來表達系統對外提供的服務或功能,適合用來做爲需求蒐集階段的工做。
經常使用用例(UseCase)來表達系統需求或者系統對外呈現的行爲,用例採用橢圓圖示,參與者(Actor)是人型圖示,因爲它會參與系統的運做,所以它跟用例之間有鏈接線段
能夠將自動櫃員機的行爲分紅三個不一樣的用例,分別爲取款、存款、加錢。自動櫃員機外部一共有兩個參與者會參與自動櫃員機的行爲,一個名爲用戶,另外一個名爲銀行。顧客會參與前兩個用例,應該參與最後一個用例
包含(include)關係指的是兩個用例之間的關係,其中一個用例(稱做基本用例,base use case)的行爲包含了另外一個用例(稱做包含用例,include case)的行爲。如圖取款的 時候會包含一個用戶驗證的用例
擴展(extend)關係:將基本用例中一段相對獨立而且可選的動做,用擴展(Extension)用例加 以封裝,再讓它從基用例中聲明的擴展點(Extension Point)上進行擴展,從而使基用例行爲更簡練和目標更集中。如圖咱們在取完款後,能夠打印憑條,也能夠不用打印憑條。這個功能就可使用擴展來表示
活動圖一般用來表達業務流程、工做流或系統流程中一連串的動做
簡單的登錄流程,登錄失敗,跳轉到登錄頁面,登錄成功跳轉到主界面
每一個活動圖只能有一個開始節點,可是能夠有多個結束節點
動做(activity)是最重要的組成元素,它表明一個執行步驟
帶箭頭的鏈接線稱爲控制流(control flow)。當來源動做結束以後,控制流會啓動目標動做。
對象節點(object node)爲矩形圖示,對象流(object flow)的圖示與控制流相同,不過它的其中一個端點必須是對象節點,而另外一端必須是其餘節點。控制流的兩個端點不能夠都是對象節點。對象流不一樣於控制流,對象流能夠攜帶數據或對象。
如圖在登錄成功後,咱們將用戶對象傳遞到下一個節點
若是將對象節點當成活動的參數,用於輸入或輸出活動,就能夠改用活動參數節點(activity parameter node)。參數節點其實也是一種對象節點
3.3決策與合併
活動流程中,流程交匯點,稱爲合併節點(merge node)。一個合併節點會有多條進入線,可是隻有一條離開線,合併節點的圖示是大的空心菱形,全部進入合併節點的支流都會經歷同一條離開線
決策節點(decision node)與合併節點共用圖示,二者都是大的空心菱形。不過,決策 節點只有一個進入線,但有多條離開線
分叉表示的是一個控制流被兩個或多個控制流代替,通過分叉後,這些控制流是併發進行的
鏈接正好與分叉相反,表示兩個或多個控制流被一個控制流代替。使用分叉須要使用鏈接把分叉的流匯聚成一個流
發送信號操做是一種操做,能夠將消息或信號發送給另外一個活動。
接受事件操做是一種要在等到消息或信號後才能繼續執行的操做。
序列圖用來表達系統內部一羣對象的交互狀況,它是一種行爲圖。水平方向是對象維,垂直方向是時間維
page與action之間的交互狀況,能夠用實例圖 來表示,在發送list請求的時候咱們須要一個返回結果集
生命線(lifeline)表明一個參與交互的實例,它的圖示是頂端鏈接矩形的虛線,虛線頂部的矩形能夠放置生命線的名稱。
對象在接收到消息以後執行一項活動,執行期間稱爲執行發生(execution occurrence),它的圖示是長條矩形。
消息(message)的圖示是一條帶箭頭的線段,橫跨在兩個生命線上,對象之間經過發送消息來交互。
序列圖中有四種常見的消息
建立消息(createMessage)用來建立對象的消息稱爲建立消息,它的圖示是帶箭頭的虛線,箭頭指向目標對象。
同步調用(synchCall)—這是最多見的消息。它的圖示是箭頭的實線,由發送消息的來源對象指向負責執行的目標對象。
回覆消息(replyMessage)目標對象執行結束時,會發出回覆消息給來源對象。它的圖示是帶箭頭的虛線,從負責執行的目標對象反向指回來源對象
異步信號(asynchSignle)同步與異步的差異在於,來源對象是否等待目標執行結束才繼續往執行。來源對象若是發送同步消息,會等待,若是發送異步消息,就不等待了。
生命線有生有滅,終止(stop)就是用來表達生命線終止的時刻。終止的圖示是一個大叉,放置在生命線的虛線底部,表明生命線已經終止。