<短評> 本站最年青的一篇文章發表了!陳梓瀚(vczhgame)是團隊年齡最小的成員,今年剛剛高中二年級僑炊雜蝸房⒓際鹺兔嫦蚨韻蠹際跤凶龐判愕牧糊蠔褪導U饈撬尤臚哦雍蟮牡諞黃胛母澹窈蟾嵩贑STC上貢獻給大家更多關於物件導向技術和遊戲開發的文章。希望大家給與特別的鼓勵與支援!在這裡團隊成員祝願vczhgame同學學習進步,考上理想的大學。 電腦科學技術網全體成員賀前言 在這篇文章裡,我會告訴大家把UML轉變為C#代碼的一些方法。 首先,我將會講述一個與UML有關的案例。現在,我們把重點放在如何把UML轉變為C#代碼,而不講述製作UML圖表的方法。這就是為什麼大家會在一開始就看到處與分析設計階段的UML圖表。 案例描述 有個公司想改善他們的資訊系統。第一步是分析職工的培訓程式,將一些任務自動化。
- 當一個職工向培訓官申請培訓的時候,一個培訓程式就開始了。培訓官將決定是否同意這位職工的培訓申請。
- 如果培訓官同意了職工的培訓申請,培訓官將會在目前可以負責的培訓項目裡尋找合適的培訓項目。一旦職工決定了她所要接受的培訓項目,培訓官將會向教員登記。
- 如果職工中途停止了培訓,它必須在最短的時間裡通知培訓官以便登出登記。
- 培訓結束後,職工必須把一張自評和一張出席登記表一起提交給培訓官。
- 培訓官在把表單們提交給匯記服務前先進行檢查。
註:UML in practice, P.Roques, Wiley, 2004 提供案例 主要方法 我們將使用下面的UML圖表來進行講解 : 類圖 類圖用於定義代碼架構, 以可以說成是整個類的聲明。 在一開始,我們可以近似的說:
- 一個UML類圖將成為一個C#類
- UML類圖的屬性將成為C#類的執行個體的變數
- 類圖的操作方法將成為C#類的方法
大家會注意到navigable角色被實現為執行個體變數,就像屬性一樣,但它是卻不是一個簡單類型,而是一個使用者自訂類型。這暗示了一個類的建立。 我將舉一個簡單的圖示說明這些方法。
互動圖 互動圖說明了類的方法的運作過程,特別是相互關聯一些方法的調用次序。 接下來的這個圖示說明了訊息序號與C#方法實現代碼的關係。
| 圖B enregistrerEmprunteur(register borrower)方法的主體 |
|
在這些例子之後,我將會給出一些具體的真實的例子。 從UML類圖到C#架構代碼 大家來看圖C,注意一下“培訓申請”類
前面講過的方法已經住足夠把這張圖錶轉換成C#架構代碼。我們唯一要緊記得是我們必須添加一條匯入語句來保證能夠與其它包中的類建立聯絡(不論是使用者自訂的包還是標準基底類別庫)。 等價的C#架構代碼在圖D上。
如果我們要為一個屬性添加讀寫操作,根據封裝類的方法,我們自然要為類添加一個屬性,就像下面的代碼:
| public int propDateValidite { |
| get { return DateValidite; } |
//這是propDateValidite屬性的“讀”操作 |
| set { DateValidite = value; } |
//這是propDateValidite屬性的“寫”操作 |
| } |
現在讓我們看看圖E,注意裡面的“培訓”類。
以前面的例子相比較, 又產生了一些附加的問題: • 元素之間關係的概括 • 多重性:Theme(Topic)的<<1..*>>和Session的<<0..*>> {ordered} 前面的方法已經不適用了。我們已經看到如何用<<1>>(或<<0..1>>)的多重性來實現navigable聯絡,然而,如何將聯絡轉換為<<*>>的多重性呢? 有個相當簡單的原則:通過用一個具有特定屬性的類型(如對象引用集合)來取代對單個對象的引用來實現<<*>>多重性。 正確地選擇.NET framework提供的集合類型是困難的。雖然用C#建立manager arrays很容易,但這對於一個正確地解決方案來說是不必要的。一般來說,人們更喜歡使用像C#的ArrayList或HashTable這樣的集合類型。 • 如果你想記住對象之間的次序,而且想用整數索引取得對象的話,就選擇ArrayList; • 如果你想用任意的關鍵字取得對象的話,就是用HashTable或SortedList。 這裡有一些應付各種不同需要的解決方案:
對於Formation類,我們將會使用: • 一個ArrayList來實現對Session的組織 • 一個HashTable來實現對Theme的組織而不是用一個簡單的數組。我們使用大綱的名稱作為限定詞 通過以上的說明,我們可以寫出這樣的代碼:
結束語 把UML圖錶轉變成代碼是一件必須規範的敏感的工作。所以,對於一些語言來說,轉換得到的代碼與UML圖表之間可能會有一些衝突。代碼發生工具能自動進行UML與代碼的轉換工作,但它同時也會向對象編輯器提供一些不同的選擇(例如ArrayList與HashTable)。 |