.NET企業(yè)級架構(gòu)解決方案:什么是UML
引言
設(shè)計(jì)一個(gè)系統(tǒng),任何科學(xué)領(lǐng)域的系統(tǒng),你首先需要做的是對它進(jìn)行抽象。抽象模型為系統(tǒng)的視圖、結(jié)構(gòu)、行為、參與實(shí)體和流程方面具體的實(shí)現(xiàn)提供一個(gè)代理。在系統(tǒng)的參與人員(包括:開發(fā)者,架構(gòu)師,所有者,用戶)之間應(yīng)該共享一個(gè)模型。為了能夠提出反饋,提出錯(cuò)誤的假設(shè),改進(jìn)建議,模型應(yīng)該能夠被系統(tǒng)的參與者所理解。盡管共享了一個(gè)模型,你還是需要用一種通用的,被廣泛接受的的形式和符號來表達(dá)模型。例如:模型語言。
顯然,建模語言是基于一系列規(guī)則、符號、圖表和關(guān)鍵字的圖形或者文字語言。語言的元素用來表達(dá)模型的結(jié)構(gòu)和行為,給任何熟悉語言的人傳達(dá)清晰的認(rèn)識和信息。
有很多著名的建模語言例子,最流行的一個(gè)就是UML(Unified Modeling Language 統(tǒng)一建模語言)。UML是一種通用的圖形建模語言,在過去的很多年,已經(jīng)變成了工業(yè)的標(biāo)準(zhǔn)。UML特別適合于建立面向?qū)ο蟮南到y(tǒng)。
正文
1、簡介
建模在任何軟件項(xiàng)目中都是一個(gè)關(guān)鍵的階段,對于大型的、企業(yè)級的應(yīng)用更是至關(guān)重要。
在復(fù)雜的情況下,模型是一個(gè)本質(zhì)。它可以幫助檢查詳細(xì)設(shè)計(jì)的正確性和遵守程度,使得軟件可以更加容易的構(gòu)建和維護(hù)。一個(gè)清晰的、良好的模型同樣可以在任何時(shí)候幫助開發(fā)者找到斷點(diǎn)的正確位置,并且修復(fù)bug。在軟件中,模型應(yīng)該和站點(diǎn)地圖、藍(lán)圖同樣重要,它是必須的,而不是一個(gè)可選的工具。
2、UML的優(yōu)缺點(diǎn)
在現(xiàn)實(shí)世界,沒有東西比公認(rèn)的標(biāo)準(zhǔn)更加吸引公眾的批評。令每一個(gè)人都滿意確實(shí)很難。UML也不例外。盡管到目前為止它是使用最廣的建模語言,但是從根本上來說它是一個(gè)臃腫的語言。毫無疑問,1.0需要改進(jìn),2.0有了提高。但是一些人還是認(rèn)為2.0還是很臃腫和復(fù)雜,還是很難學(xué)習(xí)。
3、在實(shí)踐中使用UML
該要的說,使用UML你需要一個(gè)方法來收集和分析需求,然后用建模工具轉(zhuǎn)換為模型。通常,建模工具有自己的方法,你只需要找到最適合自己的工具就可以了。類似的工具有很多,包括:微軟的Viso,IBM的Rational Rose,Sparx Systems的EA。
4、UML中的圖形
UML2.0包括13中不同的圖形,分為兩組:行為和結(jié)構(gòu)。結(jié)構(gòu)圖定義類,屬性,操作和關(guān)系。行為圖顯示系統(tǒng)中對象的協(xié)作關(guān)系。
圖 | 組 | 目的 |
活動(dòng)圖Activity | 行為 | 顯示一個(gè)活動(dòng)中的操作流程 |
類圖Class | 結(jié)構(gòu) | 顯示類、接口、及他們的關(guān)系 |
Communication | 行為 | 顯示對象之間的交互 |
Component | 結(jié)構(gòu) | 顯示組件和他們之間的依賴關(guān)系 |
Composite Structure | 結(jié)構(gòu) | 顯示類的內(nèi)部結(jié)構(gòu) |
Deployment | 結(jié)構(gòu) | 顯示組件如何映射到硬件資源 |
Interaction Overview | 行為 | 顯示順序和活動(dòng) |
Object | 結(jié)構(gòu) | 顯示系統(tǒng)在特定時(shí)間的狀態(tài) |
Package | 結(jié)構(gòu) | 顯示類如何分布在邏輯的相關(guān)組中 |
序列Sequence | 行為 | 顯示對象之間的交互 |
State machine | 行為 | 顯示在事件發(fā)生之后,對象的狀態(tài)如何變化 |
Timing | 行為 | 顯示在特定時(shí)期中,對象的行為 |
Use Case |
行為 | 顯示參與者在系統(tǒng)中進(jìn)行放入操作 |
UML圖之間的等級關(guān)系
4.1用例圖Use Case
用例圖提供了一個(gè)圖形化的用例描述。一個(gè)用例圖代表一個(gè)或者多個(gè)參與者和系統(tǒng)之間的相互作用。用例圖顯示了參與者要做的事情。一個(gè)參與者可以是一個(gè)人,也可以是和系統(tǒng)進(jìn)行交互的任何外部系統(tǒng)。參與者不受系統(tǒng)控制,參與者是在系統(tǒng)之外定義的。
用例圖主要包括:系統(tǒng),參與者,用例,關(guān)系。
上圖就是一個(gè)用例圖,有兩個(gè)參與者和兩個(gè)用例。兩個(gè)參與者分別得用戶和數(shù)據(jù)庫,兩個(gè)用例分別是獲取訂單,獲取商品的詳細(xì)信息。
4.2類圖
類圖在UML使用較為廣泛。類圖代表系統(tǒng)的靜態(tài)結(jié)構(gòu)。系統(tǒng)的靜態(tài)結(jié)構(gòu)由類和他們之間的關(guān)系組成。
類圖包括屬性,操作,和關(guān)系。關(guān)系則包括我們常說的1:1,1:n,0:1,0:n,n:n等
上圖是一張類圖,有三個(gè)類:Customer用戶,Order訂單,OrderDetail訂單明細(xì)。
Customer上面有三個(gè)屬性:CustomerID,CustomerName,Address。CustomerID是public,前面的符號是+;CustomerName是protected,前面的符號是#;Address是private,前面的符號是-。
連接類之間的線代表他們之間的關(guān)系,也就是我們常說的1:1,1:n,0:1,0:n,n:n,0:n其中之一,關(guān)系還區(qū)分從哪個(gè)類的角度來看。圖中的Customer和Order的關(guān)系,從Customer角度來看,一個(gè)Customer可以沒有Order,也可以由多個(gè)Order,所以他們之間就是0:n的關(guān)系;從Order角度看,一個(gè)Order肯定屬于一個(gè)Customer,所以他們之間就是1:1的關(guān)系。
一個(gè)Order肯定有一個(gè)以上的Detail,一個(gè)Detai肯定屬于一個(gè)Order。
上面的類圖是在PowerDesigner中畫的,下面是自動(dòng)生成的c#代碼,當(dāng)然了,肯定是需要調(diào)整的。
- // 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是一種標(biāo)準(zhǔn)的對象建模語言。它獨(dú)立于任何編程語言。這是一個(gè)關(guān)鍵的特性,既是一個(gè)優(yōu)點(diǎn),也是一個(gè)缺點(diǎn)。說它是一個(gè)優(yōu)點(diǎn),是因?yàn)樗沟迷谑褂肬ML進(jìn)行建模以及表達(dá)業(yè)務(wù)流程的時(shí)候,變成一個(gè)非常強(qiáng)大的工具。同時(shí)可以用它產(chǎn)生一個(gè)通用的模型。缺點(diǎn)就是因?yàn)閮?yōu)點(diǎn)產(chǎn)生的,獨(dú)立性越強(qiáng),也就越是遠(yuǎn)離了系統(tǒng)運(yùn)行的代碼。
原文標(biāo)題:用微軟.NET架構(gòu)企業(yè)解決方案 學(xué)習(xí)筆記(二)UML概要
鏈接:http://www.cnblogs.com/virusswb/archive/2010/08/06/architecture-microsoft-net-solution-2.html
【編輯推薦】
- 架構(gòu)師要努力成為內(nèi)功深厚的高手
- 架構(gòu)師:每天要在魚和熊掌之間做選擇
- 優(yōu)美的系統(tǒng)與架構(gòu)師的藝術(shù)氣質(zhì)
- 架構(gòu)師修煉課程:透過問題看本質(zhì)
- 女性架構(gòu)師優(yōu)先?駕馭概念的技能是最高潛力