uml對很多人來說應該不是乙個陌生的概念,這一兩年來,uml被大家越來越多的討論著。本來uml跟我這個主題似乎並不能扯上多大的關係(它是語言無關的,甚至可以說其本身就是一種語言――用於交流的)。我在此談到它有兩個目的:
1. uml是針對物件導向軟體開發的,而c++正是這樣的一種語言
類圖
靜態檢視說明了物件的結構,其中最常用的就是類圖,類圖可以幫助我們更直觀的了解乙個系統的體系結構,有時侯,描述系統快照的物件圖(object diagram)也是很有用的。在這裡,我們主要介紹類圖,下面的圖就是乙個簡單的類圖:
在類圖中,類由矩形框來表示,如上圖中,定義了4個類,分別為base、a、b、c,類之間的關係通過各種線條和其他符號來表示,在上圖中,空心的三角表示繼承關係,在uml的術語中,這種關係被稱為泛化(generalization),所以上面的類用等價**表示為:
1.
class
base;
2.
class
a:
public
base;
3.
class
b:
public
base;
4.
class
c:
public
base;
我們再看下一幅圖:
這幅圖與上幅幾乎沒有什麼區別,唯一的不同就是base類中增加了成員,乙個私有的integer _x(uml術語為property)和乙個公有的fun()的函式(method),是否需要這些類的內部細節uml本身並沒有限制,完全取決於你自己如何使用,uml的用處在於幫助你了解系統,所以只要你自己覺得足夠清楚,那麼夠了,不要再複雜了。
接著看第三幅圖:
上面圖中的箭頭表示一種關係,箭頭另一邊有乙個菱形(空心)表示聚合(aggregation),聚合的意義表示has-a關係,其等價**如下:
1.
class
a;
2.
class
b;
聚合是一種相對鬆散的關係,聚合類b不需要對被聚合的類a負責。
下面的圖:
這幅圖與上面的唯一區別是菱形為實心的,它代表了一種更為堅固的關係――組合(composition)。組合表示的關係也是has-a,不過在這裡,a的生命期受b控制,通常情況,等價**如下:
1.
class
a;
2.
class
b;
即a會隨著b的建立而建立,隨b的消亡而消亡。
下圖:這裡b與a的關係只是一種依賴關係,這種關係表明,如果類a被修改,那麼類b會受到影響,乙個簡單的例子就是:
1.
class
a;
2.
class
b;
常用的關係就是我們上面用的這些,通過這些關係和類表示的類圖,我們可以用圖形化的方式描述乙個系統的設計部分,當你習慣使用uml後,你會發現,這往往比你告訴同伴某某類從某某類派生,派生類又和某某類具有什麼關係容易的多。
順序圖:
uml中另外乙個常用的圖形就是互動檢視中的順序圖,在以往的過程化語言中,我們通常使用流程圖來描述乙個函式(系統)是如何工作的,而在物件導向的系統中,這顯然是不可行的,而順序圖正是來解決這個問題的。
假設有如下的偽**:
01.
class
circle
02.
;
08.
void
draw()
09.
;
12.
};
13.
14.
class
window
15.
;
21.
private
:
22.
circle _circle;
23.
};
對於下面的呼叫:
1.
window wnd;
2.
wnd.drawcircle();
對應的順序圖如下:
圖中上方的方塊表示參與的物件,垂直的虛線表示物件的生命線,方框表示啟用,其中箭頭表示了乙個呼叫訊息(也可以有回送return),如果是非同步的訊息,則用半箭頭表示,其中draw表示了乙個自呼叫(self call)
如果你看過《設計模式》著本書,你會發現與我上面所描述的有一些細微的不同,不要緊張,《設計模式》是gof95年的作品,那時候uml還沒有形成,而且,其中也明確那是omt方法(jim rumbaugh在通用電氣發表的建模技術――object modeling technique)和booch方法。如果你覺得uml有些讓你無所適從,也不必緊張,uml本身只是乙個輔助工具,它的目的是幫助你描述系統,不是複雜你的工作,如果你的系統很簡單,一句話可以說的很清楚,那麼不要用uml,如果你只想說明類之間的關係,而不是類的介面描述,那麼像第一副圖那樣簡單的描述就很好,總之不要去追求細節,只要能說明問題,那麼你的目的就達到了(甚至你沒有必要完全遵守規範)。
參考書目:
《設計模式――可復用物件導向軟體的基礎》
譯者: 姚淑珍 唐髮根 機械工業出版社2001
《uml精粹――標準物件建模語言簡明指南(第2版)》
《design patterns explained》alan shalloway, james r. trott
addison-wesley pub 2001
reference:
C 程式設計雜談之漫談UML
靜態檢視說明了物件的結構,其中最常用的就是類圖,類圖可以幫助我們更直觀的了解乙個系統的體系結構,有時侯,描述系統快照的物件圖 object diagram 也是很有用的。在這裡,我們主要介紹類圖,下面的圖就是乙個簡單的類圖 順序圖 uml中另外乙個常用的圖形就是互動檢視中的順序圖,在以往的過程化語言...
C 程式設計雜談之漫談UML
類圖 靜態檢視說明了物件的結構,其中最常用的就是類圖,類圖可以幫助我們更直觀的了解乙個系統的體系結構,有時侯,描述系統快照的物件圖 object diagram 也是很有用的。在這裡,我們主要介紹類圖,下面的圖就是乙個簡單的類圖 在類圖中,類由矩形框來表示,如上圖中,定義了4個類,分別為base a...
程式設計漫談(四) 基本功
讀 程式設計珠璣i 有感 program.program better.program faster.要從事軟體開發,首先要學會程式設計。如何程式設計呢?如何編寫更高效更優雅的程式呢?程式設計珠璣 通過簡單而熟悉的示例,揭示了許多非常有益的程式設計原理和技巧,極具啟發性。基本流程 問題定義 應用框架...