程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C# UML基礎

C# UML基礎

編輯:.NET實例教程
面向對象編程方法學是C#編程的指導思想。進行C#編程的第一步是利用對象建模技術(Object Modeling Technique,OMT)來分析目標問題,抽象出相關對象的共性,對它們進行分類,並分析各類之間的關系,再用類來描述同一類對象,歸納出類之間的關系。Coad和Yourdon在對象建模技術、面向對象編程和知識庫系統的基礎之上設計了一整套面向對象的方法,分為面向對象分析(Object- Oriented Analysis,OOA)和面向對象設計(Object-OrIEnted Design,OOD)。對象建模技術、面向對象分析和面向對象設計共同構成了系統設計的過程,如圖6-1所示。這是編寫代碼的基礎。

系統設計流程
在進行對象建模、面向對象分析和設計的過程中,需要使用建模語言來描述分析的過程和結果。統一建模語言(UnifIEd Modeling Language,UML)是為了這個目標而設計的一種標准通用的設計語言。任何想要真正理解面向對象編程思想的人,都需要具備一定的UML知識。
UML不是一種方法學,而是一種描述語言,它提供了多種類型的模型描述圖(diagram),當在某種給定的方法學中使用這些圖時,人們就能更容易理解和交流設計思想。UML的圖可劃分為如下三種類型。
— 靜態圖(static diagram):描述了那些不發生變化的軟件元素的邏輯結構,描繪了類、對象、數據結構及其存在於它們之間的關系。
— 動態圖(dynamic diagram):展示了在運行期間的軟件實體的變化,描繪了執行流程、實體改變狀態的方式。
— 物理圖(physical diagram):顯示了軟件實體的不變化的物理結構,描繪庫文件、字節文件、數據文件等,以及存在於它們之間的關系。
表6 -1說明了三類圖中最常用的一些UML圖,以及它們適用的軟件開發階段。本節將主要介紹其中的用例圖(use case diagram)、類圖(class diagram)、對象圖(object diagram)、序列圖(sequence diagram)、狀態圖(statechart diagram)、活動圖(activity diagram)、組件圖(component diagram)和部署圖(deployment diagram)。
表6-1  常用的UML圖

    歡迎光臨學網,收藏本篇文章 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

$False$


   
分析階段
設計階段
實現階段
靜態圖
用例圖 學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">
ü
 
 
 
對象圖
ü
ü 學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">
 
 
類圖
ü
ü
ü
  學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

G-BOTTOM: 0cm; WIDTH: 81.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">
組件圖
 
ü
ü
 
部署圖
  學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

: 81.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">
 
ü
動態圖
協作圖
ü
ü
ü 學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 81.05pt; BORDER-TOP-COLOR: windowtext; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="108">
 
序列圖
ü
ü
ü
 
活動圖 學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

DING-BOTTOM: 0cm; WIDTH: 81.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">  
  
 
狀態圖
ü
ü 學網,點擊這裡查看更多文章教程 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

WIDTH: 81.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="108">
ü
物理圖
文件、數據庫等
ü
ü
ü
歡迎光臨學網,收藏本篇文章 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

提示  Microsoft Visio可以用來方便地繪制UML圖。Visual Studio 2005的類關系圖也可以顯示類似UML的圖,但是與標准的UML稍有不同。
 用例圖
用例圖描述了系統提供的一個功能單元。用例圖的主要目的是幫助開發團隊以一種可視化的方式來理解系統的功能需求,包括基於基本流程的“角色”之間的關系,以及系統內用例之間的關系。用例圖一般用於表示用例的組織關系,要麼是整個系統的全部用例,要麼是完成具有功能(例如,所有安全管理相關的用例)的一組用例。
用例(use case)指的是系統的功能,它是系統某個功能的所有執行動作的集合。用例是從一個用戶的觀點來描述的。這個用戶告訴系統去做一些特定的事情。一個用例捕獲一個事件的可視化序列,這個事件是一個系統對單個用戶的激勵(stimulus)的響應過程。
動作者(actor)表示系統用戶能扮演的角色(role) 。這些用戶可能是人,也可能是其他的計算機、一些硬件,或者甚至是其他的軟件系統。對用例的唯一要求是,它們必須位於用例描述的系統部分之外,它們必須能刺激系統部分,並接收返回。
用例描述了當動作者之一給系統特定的刺激時的系統活動。這些活動用文本來描述。它描述了觸發用例的刺激的本質,輸入和輸出到其他活動者,以及從輸入到輸出的活動。用例文本通常也描述每一個活動可能的錯誤和系統應采取的補救措施。
在用例圖中,用橢圓來表示用例,並將用例的名稱放在橢圓的中心或橢圓下面的中間位置。人形符號用來表示角色(用戶)。角色和用例之間的關系使用簡單的線段來描述,表示角色可以操作此用例。
在用例圖中,用一個方框來表示系統的邊界。所有系統用例都放在框內,所有動作者都位於框外。動作者和用例之間用直線相連。方框內的每一件事物都是系統的一部分,方框外的每一件事物都是系統的外部。用例圖也可以表示方框內的系統用例之間的關系,最常見的是“使用關系”,用帶箭頭的直線來表示,箭頭指向被使用的用例。還有一種關系是擴展關系,用來表示繼承。
圖6-2顯示了一個用例圖。用例圖通常用於表達系統或者系統范疇的高級功能。在圖中可以很容易地看出該系統所提供的功能。這個系統允許樂隊經理查看樂隊CD的銷售統計報告及排行榜報告。它也允許唱片經理查看特定CD的銷售統計報告和這些CD在排行榜的報告。這個圖還告訴我們,系統將通過一個名為“排行榜報告服務”的外部系統來提供排行榜報告。
用例圖不會列出系統不能完成的功能。例如,圖6-2所示的系統不能提供給樂隊經理收聽排行榜上不同專輯中的歌曲的方法,也就是說,系統沒有引用一個叫做“收聽排行榜上的歌曲”的用例。如果在用例圖中提供清楚的、簡要的用例描述,項目贊助商就能很容易地看出系統是否提供了必需的功能。

圖6-2  用例圖示例
6.1.3  類圖和對象圖
類圖表示不同的實體(人、事物和數據)如何彼此相關,顯示了系統的靜態結構。類圖可用於表示邏輯類,邏輯類通常就是業務人員所談及的事物種類,比如搖滾樂隊、CD、廣播劇,或者貸款、住房抵押、汽車信貸及利率的抽象描述。類圖還可用於表示實現類,實現類就是程序員要編寫的類。實現類圖與邏輯類圖可能會用來描述一些相同的類。然而,實現類圖與邏輯類圖不會使用相同的描述屬性。
類圖是一個分為三個部分的矩形。最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的操作(或者說“方法”)。實際上,最常用、最簡單的類圖就是一個在裡面顯示了類名的長方形,因為在UML中,大多數類只要有一個能夠清楚表達的命名就可以了。文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]


在類名部分還可以顯示類的構造類型。類的構造型顯示在一對雙角括符號“« »”之間,經常放在類的名稱上面。常見的構造類型包括實現類(直接顯示類名)、接口(在類名上面顯示 «interface»),以及工具類(在類名上面顯示 «utility»)。如果類名用斜體表示,或者在類名下面標上{abstract},就表示這個類是一個抽象類。
在屬性和方法的前面有一個字符用來表示屬性或方法的作用域,它們的意義如下:
—“-”表示屬性或方法是私有的(private);
—“#”表示屬性或方法是保護的(protected);
—“+”表示屬性或方法是公用的(public)。
緊接在屬性或方法的參數名稱的冒號(:)號之後,顯示了屬性的類型或方法的參數的類型。方法的返回值類型顯示在方法後面的冒號之後。
圖6-3顯示了一個類Person的類圖,它對應的類的C#源代碼如下:

Person
+name: string
+sex: char
-age: int
+Work(in type: string): void
+Person(in name: string, in sex: char, in age: int): void
+Speak(): void
+Eat(): void
圖6-3  類圖示意
class Person
{
    public string name;
 &n文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

bsp;  public char sex;
    private int age;
    public Person(string name, char sex, int age)
    {
    }
    public void Eat()
    {
    }
    public void Speak()
    {
    }
    public void Work(string type)
    {
    }
}
對象圖用來表示類的實例化對象。對象圖用一個兩層的矩形來表示,上層標識對象名和類名,下層標識對象的實例化屬性值。下面的代碼將創建一個Person類的對象mary:
Person mary = new Person("Mary", ''F'', 24);
對象mary的對象圖如圖6-4所示。

mary: Person
name: string   ="Mary"
sex: char      =''F''
age: int       =24
圖6-4  對象圖示例
在一個系統中,類之間存在多種關系,如下所示。
— 繼承(inheritance):繼承是指一個類從其父類派生而來,繼承了父類的屬性和方法。基於類的繼承叫做一般化(generalization),基於接口的繼承,叫做實現(realization)。
— 關聯(association):類之間的關聯大多用來表示變量實例持有對其他對象的引用,這種關系是半永久的,但沒有包含關系。
— 依賴(dependency):依賴是不同類的實例之間的暫時關系。
— 聚合(aggregation):聚合是關聯的一種特殊形式,它意味著一種整體/部分(whole/part)的關系,但是部分也可以作為其他整體的組分,而且部分和整體之間也沒有生命期的依賴。文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]


— 組合(composition):組合是聚合的一種特殊形式,組合的關聯性比聚合更強,部分只能作為唯一的一個整體的部分,而且部分的生命周期依賴於整體的生命周期。
UML類圖對這些關系的表示方法如圖6-5所示。具有關聯、聚合和組合關系的兩個對象之間可能是沒有數量關系的一種聯系,也可能存在數量關系,比如1對1(不標識)、0個或1個(標識為0…1)、0個或多個(標識為0…*或0…n)、1個或多個(標識為1…*或1…n)或者確切的數字(直接標識數字)。
圖6 -6顯示了一個包含了圖6-2中的對象的類圖。其中包括一個繼承關系和兩個關聯關系。CDSalesReport類繼承自Report類。一個 CDSalesReport類與一個CD類關聯,但是CD類並不知道關於CDSalesReport類的任何信息。CD類和Band類都彼此知道對方,兩個類彼此都可以與一個或者多個對方類相關聯。

圖6-5  UML類圖之間的關系表示方法

圖6-6  包含關系的類圖
圖6 -7顯示了一個包含多種關系的類圖的另一個例子。Person類實現了IHuman接口,Author類繼承了Person類;Book類與Author 類之間的關聯是1對多的,即一本書可能有一個或多個作者;Person讀書,這是一種暫時的單向依賴;Book由一個或多個Page組成,每一個Page 只能作為一本Book的一部分,這是一種組合關系;Bookshelf裡可以不放或者放多本Book,Book也可以放在其他的Bookshelf中, Bookshelf的存在並不能影響Book的存在性,這是一種聚合關系。
文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]


圖6-7  一個包含多種關系的類圖
表示各對象之間的關系的對象圖說明了系統在某一個特定時刻的狀態,經常叫做系統的快照(snapshot)。

 內幕:UML與源代碼
UML是一種設計語言,它的目的不是表現細節,而是表現結構,僅僅展示必要的細節。因此,UML不可能與源代碼一一對應,只存在結構上的對應關系。作為一種參考,下面列出了圖6-7中的類圖的C#源代碼:
interface IHuman
{
}
class Person : IHuman
{
    void Read(Book book)
    {
         // …
    }
}
class Author : Person
{
    public Book[] books;
}
class Book
{
    public Author author;
    public Page[] pages;
}
class Page
{
}
class Bookshelf
{
    public Book[] books;
}
序列圖
序列圖顯示具體用例(或用例的一部分)的詳細流程。它幾乎是自描述的,並且顯示了流程中不同對象之間的交互關系,同時還可以很詳細地顯示對不同對象的各種調用。
序列圖有兩個維度:垂直維度以發生的時間順序顯示消息/調用的序列;水平維度顯示對象實例之間的交互。
對象之間的交互包括:
— 調用(call):一個對象調用另一個對象(或者自己)的方法。
— 返回(return):返回一個值作為方法調用的結果。
— 發送(send):一個對象給另一個對象(或者自己)異步發送一個消息。
— 創建(create):一個對象實例化另一個對象。
— 銷毀(destroy):一個對象銷毀另一個對象(或者自己)。
序列圖的繪制非常簡單。圖的頂部的框表示類的實例(對象)。在框中,類實例名稱和類名稱之間用空格/冒號/空格來分隔(例如,gen : ReportGenerator)。如果某個類實例向另一個類實例發送一條消息,則繪制一條具有指向接收類實例的開箭頭的連線,並把消息/方法的名稱放在連線上面。對於某些特別重要的消息,可以繪制一條具有指向發起類實例的開箭頭的虛線,將返回值標注在虛線上。包括返回值的虛線,有助於序列圖的閱讀。
閱讀序列圖也非常簡單。從左上角啟動序列的“驅動”類實例開始,然後順著每條消息往下閱讀。
圖6 -8顯示了一個序列圖的例子。文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

圖中的序列圖顯示了許多的細節(比如,其中顯示了每條被發送消息的返回消息,這是可選的),一般的序列圖可能要簡單得多。通過閱讀這個序列圖,就能明白如何創建一個CD銷售報告。其中的aProc對象表示驅動類實例。aProc向名為gen的ReportGenerator類實例發送一條消息。該消息被標為generateCDSalesReport,表示ReportGenerator對象實現了這個消息處理程序。進一步理解可發現,generateCD SalesReport消息標簽在括號中包括了一個cdId,表明aServlet隨該消息傳遞一個名為cdId的參數。當gen實例接收到一條 generateCDSalesReport消息時,它會接著調用CDSalesReport類,並返回一個aCDReport的實例。然後gen實例對返回的aCDReport實例進行調用,在每次消息調用時向它傳遞參數。在該序列的結尾,gen實例向它的調用者aProc返回一個aCDReport。

圖6-8  序列圖示例
 狀態圖
狀態圖表示某個類所處的不同狀態和該類的狀態轉換信息。每個類都有狀態,但不是每個類都應該有一個狀態圖。只有當行為的改變和狀態有關時才創建狀態圖。一般只描述在系統活動期間具有三個或更多潛在狀態的類的狀態圖。
狀態圖的符號集包括5個基本元素:初始起點,它使用實心圓來繪制;狀態之間的轉換,它使用帶箭頭的線段來繪制;狀態,它使用圓角矩形來繪制;判斷點,它使用空心圓來繪制;一個或者多個終止點,它們使用內部包含實心圓的圓來繪制。要想繪制狀態圖,首先需要繪制起點和一條指向該類的初始狀態的轉換線段。狀態本身可以在圖上的任意位置繪制,然後只需使用狀態轉換線條將它們連接起來。
圖6-9顯示了一個培訓班的狀態圖。圖的中心有一個判斷點,如果有學員退學,則需要判斷是否還有學員繼續學習:如果還有,則培訓班繼續,否則只好被迫停止。

圖6-9  一個培訓班的狀態圖
6.1.6  活動圖
活動圖表示在處理某個活動時,兩個或者更多類對象之間的過程控制流。文章整理:學網 http://www.xue5.com (本站) [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

活動圖可用於在業務單元的級別上對更高級別的業務過程進行建模,或者對低級別的內部類操作進行建模。
活動圖的符號集與狀態圖中使用的符號集類似。像狀態圖一樣,活動圖也從一個連接到初始活動的實心圓開始。活動是通過一個圓角矩形(活動的名稱包含在其內)來表示的。活動可以通過轉換線段連接到其他活動,或者連接到判斷點,這些判斷點連接到由判斷點的條件所保護的不同活動。結束過程的活動連接到一個終止點(就像在狀態圖中一樣)。作為一種選擇,活動可以分組為泳道(swimlane),泳道用於表示實際執行活動的對象。
圖6 -10中顯示的活動圖有兩個泳道,因為有兩個對象控制著各自的活動:樂隊經理和報告工具。整個過程首先從樂隊經理選擇查看他的樂隊銷售報告開始。然後報告工具檢索並顯示他管理的所有樂隊,並要求他從中選擇一個樂隊。在樂隊經理選擇一個樂隊之後,報告工具就檢索銷售信息並顯示銷售報告。該活動圖表明,顯示報告是整個過程中的最後一步。

圖6-10  活動圖示例
6.1.7  組件圖
組件圖提供系統的物理視圖,它的用途是顯示系統中的軟件與其他軟件組件(例如,庫函數)的依賴關系。組件圖可以在一個非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次上顯示。
圖6 -11中的組件圖顯示了四個組件:Reporting Tool、Billboard Service、ASP .NET和ADO .NET。從Reporting Tool組件指向Billboard Service、ASP .NET API和ADO .Net組件的帶箭頭的線段,表示Reporting Tool依賴於那三個組件。
6.1.8  部署圖
部署圖表示該軟件系統如何部署到硬件環境中。它的用途是顯示該系統不同的組件將在何處物理地運行,以及它們將如何彼此通信。因為部署圖是對物理運行情況進行建模,系統的生產人員就可以很好地利用這種圖。
部署圖中的符號包括組件圖中所使用的符號元素,另外還增加了幾個符號,包括節點的概念。一個節點可以代表一台物理機器,或代表一個虛擬機器節點(例如,一個大型機節點)。用三維立方體來表示節點,節點的名稱位於立方體的頂部。所使用的命名約定與序列圖中相同:[實例名稱] : [實例類型](例如,"w3.reporting.myco.com : Application Server")。

圖6-11  組件圖示例
圖6 -12中的部署圖表明,用戶使用運行在本地機器上的浏覽器訪問Reporting Tool,並通過公司intranet上的HTTP協議連接到Reporting Tool組件。這個工具實際運行在名為w3.reporting.myco.com的服務器上。Reporting Tool通過ADO .Net與數據庫相連。除了與報告數據庫通信外,Report Tool組件還通過HTTPS上的SOAP與Billboard Service進行通信。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved