UML ------Unified Modeling Language (統(tǒng)一建模語言)
UML誕生于1997年,綜合了當(dāng)時(shí)已經(jīng)存在的多種面向?qū)ο蟮慕UZ言而形成的圖標(biāo)式軟件設(shè)計(jì)語言.主要功能如下:
1.可視化功能:
可視化將促進(jìn)對問題的理解和解決,方便設(shè)計(jì)人員彼此交流和溝通.
可以較容易發(fā)現(xiàn)設(shè)計(jì)草圖中可能的邏輯錯(cuò)誤,保證最后完成的軟件能夠按要求運(yùn)行,避免和減少意外發(fā)生.
2.說明功能:
是一個(gè)通用的,精確的,沒有歧義的對系統(tǒng)進(jìn)行說明的機(jī)制.
3.建造功能:
UML有自己的語法規(guī)則,使得人們可以使用建模工具軟件對一個(gè)系統(tǒng)設(shè)計(jì)模型加以解釋,并將設(shè)計(jì)模型映射到一種計(jì)算機(jī)語言(如JAVA)上.
通過UML可以看到系統(tǒng)總體的圖像,可以很容易發(fā)現(xiàn)可復(fù)用的代碼,從而使系統(tǒng)更有效率.
4.建文檔功能:
使用UML進(jìn)行設(shè)計(jì)可以同時(shí)產(chǎn)生系統(tǒng)設(shè)計(jì)文檔.
新加入項(xiàng)目的程序員可以借助UML圖形文檔資料很快熟悉開發(fā)中的系統(tǒng).
UML包括一系列的圖:
1.結(jié)構(gòu)型圖:?
??????類圖
??????對象圖
??????構(gòu)件圖
??????部署圖
2.行為型圖:
??????使用案例圖
??????時(shí)序圖
??????合作圖
??????狀態(tài)圖
??????活動(dòng)圖
所有這些圖中,類圖,使用案例圖和時(shí)序圖是最有用的.
類圖,是顯示出類和接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的圖.如下:
----------------------------
??????????Animal
----------------------------
-age:int
-weight:double
----------------------------
+Animal
+Animal
+grow:void
+getAge:int
+getWeight:double
#die:void
----------------------------
name:String
可見,類圖是分層結(jié)構(gòu),最上面是類名層,往下是屬性層,方法層,性質(zhì)層.
類名層不能省略,其他層都可以省略.
如果類名是正字體,表明類是具體的,如果是斜字體,表明類是抽象的.
注意屬性或方法的左邊的符號,
???如果是加號(+), 表示它是 public;
???如果是減號(-),?表示它是 private;
???如果是井號(#), 表示它是 protected;
如果在方法下面有下劃線,表明這是個(gè)靜態(tài)方法.
性質(zhì)層是由一個(gè)屬性(內(nèi)部變量),一個(gè)get方法,一個(gè)set方法組成的結(jié)構(gòu).
上面的UML圖可以解析成JAVA代碼,如下:
public
?
class
?Animal?{
?
//
私有屬性
?
private
?
int
?age;
?//私有屬性
?
private
?
double
?weight;
?//私有屬性
?
private
?String?name;
?
//
公開默認(rèn)構(gòu)造子
?
public
?Animal()?{
??
//
?}
?
//
公開構(gòu)造子
?
public
?Animal(String?name)?{
??
this
.name?
=
?name;
?}
?
//
公開方法
?
public
?
void
?grow()?{
??
//
?}
?//公開方法
?
public
?
int
?getAge()?{
??
//
?}
?//公開方法
?
public
?
double
?getWeight()?{
??
//
?}
?
//
保護(hù)方法
?
protected
?
void
?die()?{
??
//
?}
?
//
公開方法
?
public
?String?getName()?{
??
return
?name;
?}
?//公開方法
?
public
?
void
?setName(String?name)?{
??
this
.name?
=
?name;
?}
}
類圖
中的
關(guān)
系
?
1
、
?
一般化
關(guān)
系(
Generalization
)
?
類
與
類
之
間
的
繼
承
關(guān)
系,接口與接口
間
的
繼
承
關(guān)
系,或者
對
接口的
實(shí)現(xiàn)關(guān)
系。
?
方向與
繼
承相反。從子
類
指向父
類
。
對應(yīng)關(guān)鍵
字
為
extends
和
implements.
?
2
、
?
關(guān)聯(lián)關(guān)
系
( Association)
?
類
與
類
之
間
的
連
接,一個(gè)
類
可以知道另一個(gè)
類
的屬性和方法。
?
關(guān)聯(lián)
用
實(shí)線
+
箭
頭
來表示。
?
關(guān)聯(lián)
可以雙向,也可以是
單
向的。雙向
關(guān)聯(lián)
使用兩個(gè)箭
頭
或者沒有箭
頭
。
單
向
關(guān)聯(lián)
有一個(gè)箭
頭
,表示
關(guān)聯(lián)
的方向。一般多使用
單
向
關(guān)聯(lián)
,不鼓勵(lì)使用雙向
關(guān)聯(lián)
。
?
Java
中,
關(guān)聯(lián)
通
過實(shí)
例
變
量
實(shí)現(xiàn)
的。在一個(gè)
類
A
中,出
現(xiàn)
了
類
型
為
B
的
實(shí)
例
變
量,體
現(xiàn)
了兩個(gè)
類
之
間
的
關(guān)聯(lián)關(guān)
系。可以用一個(gè)箭
頭
指向
B
的
關(guān)聯(lián)
來表示它
們
的
關(guān)
系。
關(guān)聯(lián)
都有個(gè)名字。而且
還
可以有基數(shù),表示
這
一端的
類
可以有幾個(gè)
實(shí)
例。
記
號
n..m
表示一個(gè)取
值
區(qū)
間
。
?
關(guān)聯(lián)關(guān)
系可以
進(jìn)
一
步
確定
為
聚合
關(guān)
系或合成
關(guān)
系。
關(guān)聯(lián)關(guān)
系中兩個(gè)
類處
于同一
層
次。
?
3
、
?
聚合
關(guān)
系
( Aggregation)
?
聚合
關(guān)
系是更
強(qiáng)
的
關(guān)聯(lián)關(guān)
系。聚合是整體和部分之
間
的
關(guān)
系。聚合
關(guān)
系中的兩個(gè)
類
的
關(guān)
系是不平等的,是整體和部分的
關(guān)
系。也是通
過實(shí)
例
變
量
實(shí)現(xiàn)
的。一般的
關(guān)聯(lián)
和聚合
關(guān)
系需要通
過
兩個(gè)
類
的
邏輯關(guān)
系來區(qū)分。如果不確定,就將聚合
關(guān)
系
設(shè)
置成
關(guān)聯(lián)關(guān)
系。
?
表示方法:空心菱形+
實(shí)線
+箭
頭
,箭
頭
指向部分。
整體的一端用空心菱形表示,部分的一端用箭
頭
表示。
?
4
、
?
合成
關(guān)
系(
Comp os ition
)
?
合成
關(guān)
系是更
強(qiáng)
的聚合
關(guān)
系。合成
關(guān)
系不能共享。表示部分的
類
只能與一個(gè)表示整體的
類
建立合成
關(guān)
系。
?
代表整體的
對
象要
負(fù)責(zé)
代表部分的
對
象的生命周期。
負(fù)責(zé)
將代表部分的
對
象湮
滅
掉。也可以將代表部分的
對
象
傳遞給
另一個(gè)
對
象,由后者
負(fù)責(zé)
此
對
象的生命周期。
?
表示方法:
實(shí)
心菱形+
實(shí)線
+箭
頭
,
整體的一端用
實(shí)
心菱形表示,部分的一端用箭
頭
表示。如果不能確定
為
合成
關(guān)
系,可以將它
設(shè)
置
為
聚合
關(guān)
系,甚至是
關(guān)聯(lián)關(guān)
系。
?
5
、
依
賴關(guān)
系(
Dependency
)
?
依
賴總
是
單
向的。表示一個(gè)
類
依
賴
于另一個(gè)
類
的定
義
。與
關(guān)聯(lián)
不同是,此
處
沒有
類實(shí)
例作
為
屬性,而是將
類
B
的
實(shí)
例作
為
方法的參數(shù)
傳
入的。
?
表示方法:虛
線
+箭
頭
,箭
頭
指向作參數(shù)的
類
一方。
?
一般,在
Java
中表示
為
局域
變
量、方法的參數(shù),以及
對
靜
態(tài)
方法的
調(diào)
用。
?
如果
類
A
的某個(gè)局域
變
量的
類
型是另一個(gè)
類
B
,那
么類
A
就依
賴
于
類
B
。
?
如果
類
A
方法的參數(shù)是
類
B
的
實(shí)
例,那
么類
A
依
賴
于
類
B
。
?
如果一個(gè)
類
A
調(diào)
用另一個(gè)
類
B
的靜
態(tài)
方法,那
么類
A
依
賴
于
類
B
。
?
如果
類
B
出
現(xiàn)
在
類
A
的
實(shí)
例
變
量中,那
么類
A
和
類
B
的
關(guān)
系就超越了依
賴關(guān)
系,而
變
成了某一
種關(guān)聯(lián)關(guān)
系。
?
注:
一般
關(guān)
系表
現(xiàn)為繼
承或
實(shí)現(xiàn)關(guān)
系
(is?? a)
,
關(guān)聯(lián)關(guān)
系表
現(xiàn)為變
量
(has?? a )
,依
賴關(guān)
系表
現(xiàn)為
函數(shù)中的參數(shù)
(use?? a)
。
posted on 2006-07-04 19:00
小言身寸 閱讀(511)
評論(0) 編輯 收藏 所屬分類:
UML