UML建模的要點總結
預備知識:
一、UML的特性與發展現狀
UML是一種Language(語言)
UML是一種Modeling(建模)Language
UML是Unified(統一)Modeling Language
1. 已進入全面應用階段的事實標準
2. 應用領域正在逐漸擴展,包括嵌入式系統建模、業務建模、流程建模等多個領域
3. 成為“產生式編程”的重要支持技術:MDA、可執行UML等
二、建模的目的與原則
1. 幫助我們按照實際情況或按我們需要的樣式對系統進行可視化;提供一種詳細說明系統的結構或行為的方法;給出一個指導系統構造的模板;對我們所做出的決策進行文檔化。
2. 僅當需要模型時,才構建它。
3. 選擇要創建什么模型對如何動手解決問題和如何形成解決方案有著意義深遠的影響;每一種模型可以在不同的精度級別上表示;***的模型是與現實相聯系的;單個模型是不充分的。對每個重要的系統***用一組幾乎獨立的模型去處理。
三、誰應該建模
1. 業務建模:以領域專家為主,需求分析人員是主力,系統分析員、架構師可參與
2. 需求模型:以需求分析人員為主,系統分析員是主力,領域專家提供指導,架構師和資深開發人員參與
3. 設計模型:高層設計模型以架構師為主,系統分析員從需求方面提供支持,資深開發人員從技術實現方面提供支持。詳細設計模型則以資深開發人員為主,架構師提供指導。
4. 實現模型:以資深開發人員(設計人員)為主,架構師提供總體指導。
5. 數據庫模型:以數據庫開發人員為主,架構師提供指導,資深開發人員(設計人員)予以配合。
正式開始
UML組成,三部分(構造塊、規則、公共機制),關系如下圖所示:
#p#
一、構造塊
1. 構造塊是對模型中***有代表性的成分的抽象
建模元素:UML中的名詞,它是模型基本物理元素。
行為元素:UML中的動詞,它是模型中的動態部分,是一種跨越時間、空間的行為。
分組元素:UML中的容器,用來組織模型,使模型更加的結構化。
注釋元素:UML中的解釋部分,和代碼中的注釋語句一樣,是用來描述模型的。
a. 建模元素
◆ 類(class)和對象(object)
◆ 接口(interface)
◆ 主動類(active class)
◆ 用例(use case)
◆ 協作(collaboration)
◆ 構件(component)
◆ 節點(node)
類(class)和對象(object)
類是對一組具有相同屬性、相同操作、相同關系和相同語義的對象的抽象。UML中類是用一個矩形表示的,它包含三個區域,最上面是類名、中間是類的屬性、最下面是類的方法。
對象則是類的一個實例 (object is a Instance of Class)
接口(interface)
接口是描述某個類或構件的一個服務操作集。
主動類(active class)
主動類實際上是一種特殊的類。引用它的原因,實際上是在開發中需要有一些類能夠起到啟動控制活動的作用。主動類是指其對象至少擁有一個進程或線程,能夠啟動控制活動的類。
用例(use case)
用例是著名的大師Ivar Jacobson首先提出的,現已經成為了面向對象軟件開發中一個需求分析的最常用工具。用例實例是在系統中執行的一系列動作,這些動作將生成特定執行者可見的價值結果。一個用例定義一組用例實例。
協作(collaboration)
協作定義了一個交互,它是由一組共同工作以提供某協作行為的角色和其他元素構成的一個群體,對于某個用例的實現就可以表示為一個協作。
構件(component)
在實際的軟件系統中,有許多要比“類”更大的實體,例如一個COM組件、一個DLL文件、一個JavaBeans、一個執行文件等等。為了更好地對在UML模型中對它們進行表示,就引入了構件(也譯為組件)。構件是系統設計的一個模塊化部分,它隱藏了內部的實現,對外提供了一組外部接口,在系統中滿足相同接口的組件可以自由地替換。
節點(node)
為了能夠有效地對部署的結構進行建模,UML引入了節點這一概念,它可以用來描述實際的PC機、打印機、服務器等軟件運行的基礎硬件。節點是運行時存在的物理元素,它表示了一種可計算的資源,通常至少有存儲空間和處理能力。
b. 行為元素
交互(interaction)
是在特定語境中,共同完成某個任務的一組對象之間交換的信息集合。交互的表示法很簡單,就是一條有向直線,并在上面標有操作名。
狀態機(state machine)
是一個對象或交互在生命周期內響應事件所經歷的狀態序列。在UML模型中將狀態畫為一個圓角矩形,并在矩形內寫出狀態名稱及其子狀態。
c. 分組元素
對于一個中大型的軟件系統而言,通常會包含大量的類,因此也就會存在大量的結構事物、行為事物,為了能夠更加有效地對其進行整合,生成或簡或繁、或宏觀或微觀的模型,就需要對其進行分組。在UML中,提供了“包(Package)”來完成這一目標。
e. 注釋元素
結構事物是模型的主要構造塊,行為事物則是補充了模型中的動態部分,分組事物而是用來更好地組織模型,似乎已經很完整了。而注釋事物則是用來錦上添花的,它是用來在UML模型上添加適當的解釋部分。
#p#
2. 關系
UML模型的關系比較多,如下圖:
a. 關聯關系
關聯(Association)表示兩個類之間存在某種語義上的聯系。關聯關系提供了通信的路徑,它是所有關系中最通用、語義最弱的。
在UML中,使用一條實線來表示關聯關系。在關聯關系中,有兩種比較特殊的關系:聚合和組合。
聚合:聚合(Aggregation)是一種特殊形式的關聯。聚合表示類之間的關系是整體與部分的關系。
如果發現“部分”類的存在,是完全依賴于“整體”類的,那么就應該使用“組合”關系來描述。
組合:組合是聚合的變種,加入了一些重要的語義。也就是說,在一個組合關系中一個對象一次就只是一個組合的一部分,“整體”負責“部分”的創建和破壞,當“整體”被破壞時,“部分”也隨之消失。聚合就像汽車和車胎,汽車壞了胎還可以用。組合就像公司和下屬部門,公司倒閉了部門也就不存在了!
b. 泛化、實現與依賴
泛化關系描述了一般事物與該事物中的特殊種類之間的關系,也就是父類與子類之間的關系。
實現關系是用來規定接口和實現接口的類或組件之間的關系。接口是操作的集合,這些操作用于規定類或組件的服務。
有兩個元素X、Y,如果修改元素X的定義可能會引起對另一個元素Y的定義的修改,則稱元素Y依賴(Dependency)于元素X。
二、規則
命名:也就是為事物、關系和圖起名字。和任何語言一樣,名字都是一個標識符
范圍:與類的作用域相似.
可見性:Public,Protected,Private,Package
三、UML公共機制
1. 規格描述
在圖形表示法的每個部分后面都有一個規格描述(也稱為詳述),它用來對構造塊的語法和語義進行文字敘述。這種構思,也就使可視化視圖和文字視圖的分離。
2. UML修飾與通用劃分
在為了更好的表示這些細節,UML中還提供了一些修飾符號,例如不同可視性的符號、用斜體字表示抽象類。
UML通用劃分:
◆ 類與對象的劃分:類是一種抽象,對象是一個具體的實例
◆ 接口與實現的分離:接口是一種聲明、是一個契約,也是服務的入口;實現則是負責實施接口提供的契約
3. UML擴展機制
構造型:在實際的建模過程中,可能會需要定義一些特定于某個領域或某個系統的構造塊
標記值則是用來為事物添加新特性的。標記值的表示方法是用形如“{標記信息}”的字符串
約束是用來增加新的語義或改變已存在規則的一種機制(自由文本和OCL兩種表示法)。約束的表示法和標記值法類似,都是使用花括號括起來的串來表示,不過它是不能夠放在元素中的,而是放在相關的元素附近。
4. UML視圖和圖
附:開發過程與圖的對應關系