.NET企業級架構解決方案:什么是UML
引言
設計一個系統,任何科學領域的系統,你首先需要做的是對它進行抽象。抽象模型為系統的視圖、結構、行為、參與實體和流程方面具體的實現提供一個代理。在系統的參與人員(包括:開發者,架構師,所有者,用戶)之間應該共享一個模型。為了能夠提出反饋,提出錯誤的假設,改進建議,模型應該能夠被系統的參與者所理解。盡管共享了一個模型,你還是需要用一種通用的,被廣泛接受的的形式和符號來表達模型。例如:模型語言。
顯然,建模語言是基于一系列規則、符號、圖表和關鍵字的圖形或者文字語言。語言的元素用來表達模型的結構和行為,給任何熟悉語言的人傳達清晰的認識和信息。
有很多著名的建模語言例子,最流行的一個就是UML(Unified Modeling Language 統一建模語言)。UML是一種通用的圖形建模語言,在過去的很多年,已經變成了工業的標準。UML特別適合于建立面向對象的系統。
正文
1、簡介
建模在任何軟件項目中都是一個關鍵的階段,對于大型的、企業級的應用更是至關重要。
在復雜的情況下,模型是一個本質。它可以幫助檢查詳細設計的正確性和遵守程度,使得軟件可以更加容易的構建和維護。一個清晰的、良好的模型同樣可以在任何時候幫助開發者找到斷點的正確位置,并且修復bug。在軟件中,模型應該和站點地圖、藍圖同樣重要,它是必須的,而不是一個可選的工具。
2、UML的優缺點
在現實世界,沒有東西比公認的標準更加吸引公眾的批評。令每一個人都滿意確實很難。UML也不例外。盡管到目前為止它是使用最廣的建模語言,但是從根本上來說它是一個臃腫的語言。毫無疑問,1.0需要改進,2.0有了提高。但是一些人還是認為2.0還是很臃腫和復雜,還是很難學習。
3、在實踐中使用UML
該要的說,使用UML你需要一個方法來收集和分析需求,然后用建模工具轉換為模型。通常,建模工具有自己的方法,你只需要找到最適合自己的工具就可以了。類似的工具有很多,包括:微軟的Viso,IBM的Rational Rose,Sparx Systems的EA。
4、UML中的圖形
UML2.0包括13中不同的圖形,分為兩組:行為和結構。結構圖定義類,屬性,操作和關系。行為圖顯示系統中對象的協作關系。
圖 | 組 | 目的 |
活動圖Activity | 行為 | 顯示一個活動中的操作流程 |
類圖Class | 結構 | 顯示類、接口、及他們的關系 |
Communication | 行為 | 顯示對象之間的交互 |
Component | 結構 | 顯示組件和他們之間的依賴關系 |
Composite Structure | 結構 | 顯示類的內部結構 |
Deployment | 結構 | 顯示組件如何映射到硬件資源 |
Interaction Overview | 行為 | 顯示順序和活動 |
Object | 結構 | 顯示系統在特定時間的狀態 |
Package | 結構 | 顯示類如何分布在邏輯的相關組中 |
序列Sequence | 行為 | 顯示對象之間的交互 |
State machine | 行為 | 顯示在事件發生之后,對象的狀態如何變化 |
Timing | 行為 | 顯示在特定時期中,對象的行為 |
Use Case |
行為 | 顯示參與者在系統中進行放入操作 |
UML圖之間的等級關系
4.1用例圖Use Case
用例圖提供了一個圖形化的用例描述。一個用例圖代表一個或者多個參與者和系統之間的相互作用。用例圖顯示了參與者要做的事情。一個參與者可以是一個人,也可以是和系統進行交互的任何外部系統。參與者不受系統控制,參與者是在系統之外定義的。
用例圖主要包括:系統,參與者,用例,關系。
上圖就是一個用例圖,有兩個參與者和兩個用例。兩個參與者分別得用戶和數據庫,兩個用例分別是獲取訂單,獲取商品的詳細信息。
4.2類圖
類圖在UML使用較為廣泛。類圖代表系統的靜態結構。系統的靜態結構由類和他們之間的關系組成。
類圖包括屬性,操作,和關系。關系則包括我們常說的1:1,1:n,0:1,0:n,n:n等
上圖是一張類圖,有三個類:Customer用戶,Order訂單,OrderDetail訂單明細。
Customer上面有三個屬性:CustomerID,CustomerName,Address。CustomerID是public,前面的符號是+;CustomerName是protected,前面的符號是#;Address是private,前面的符號是-。
連接類之間的線代表他們之間的關系,也就是我們常說的1:1,1:n,0:1,0:n,n:n,0:n其中之一,關系還區分從哪個類的角度來看。圖中的Customer和Order的關系,從Customer角度來看,一個Customer可以沒有Order,也可以由多個Order,所以他們之間就是0:n的關系;從Order角度看,一個Order肯定屬于一個Customer,所以他們之間就是1:1的關系。
一個Order肯定有一個以上的Detail,一個Detai肯定屬于一個Order。
上面的類圖是在PowerDesigner中畫的,下面是自動生成的c#代碼,當然了,肯定是需要調整的。
- // File: Customer.cs
- // Author: zy
- // Created: 2010年8月6日 6:40:04
- // Purpose: Definition of Class Customer
- using System;
- public class Customer
- {
- private string address;
- protected string customerName;
- public Customer GetCustomerByID()
- {
- throw new NotImplementedException();
- }
- public int GetCustomerOrders()
- {
- throw new NotImplementedException();
- }
- public int customerID;
- public System.Collections.Generic.List<Order> order;
- /// <summary>
- /// Property for collection of Order
- /// </summary>
- /// <pdGenerated>Default opposite class collection property</pdGenerated>
- public System.Collections.Generic.List<Order> Order
- {
- get
- {
- if (order == null)
- order = new System.Collections.Generic.List<Order>();
- return order;
- }
- set
- {
- RemoveAllOrder();
- if (value != null)
- {
- foreach (Order oOrder in value)
- AddOrder(oOrder);
- }
- }
- }
- /// <summary>
- /// Add a new Order in the collection
- /// </summary>
- /// <pdGenerated>Default Add</pdGenerated>
- public void AddOrder(Order newOrder)
- {
- if (newOrder == null)
- return;
- if (this.order == null)
- this.order = new System.Collections.Generic.List<Order>();
- if (!this.order.Contains(newOrder))
- this.order.Add(newOrder);
- }
- /// <summary>
- /// Remove an existing Order from the collection
- /// </summary>
- /// <pdGenerated>Default Remove</pdGenerated>
- public void RemoveOrder(Order oldOrder)
- {
- if (oldOrder == null)
- return;
- if (this.order != null)
- if (this.order.Contains(oldOrder))
- this.order.Remove(oldOrder);
- }
- /// <summary>
- /// Remove all instances of Order from the collection
- /// </summary>
- /// <pdGenerated>Default removeAll</pdGenerated>
- public void RemoveAllOrder()
- {
- if (order != null)
- order.Clear();
- }
- }
UML是一種標準的對象建模語言。它獨立于任何編程語言。這是一個關鍵的特性,既是一個優點,也是一個缺點。說它是一個優點,是因為它使得在使用UML進行建模以及表達業務流程的時候,變成一個非常強大的工具。同時可以用它產生一個通用的模型。缺點就是因為優點產生的,獨立性越強,也就越是遠離了系統運行的代碼。
原文標題:用微軟.NET架構企業解決方案 學習筆記(二)UML概要
鏈接:http://www.cnblogs.com/virusswb/archive/2010/08/06/architecture-microsoft-net-solution-2.html
【編輯推薦】