UML 類圖介紹(轉(zhuǎn))
一、 UML 簡介
UML ( Unified Modeling Language )即統(tǒng)一建模語言,是 OMG ( Object Management Group )發(fā)表的圖標(biāo)式軟件設(shè)計(jì)語言。
UML 的功能:
可視化、說明、建造、建文檔
UML 包括:
?????? ?????? 用例圖( Use case diagrams )
?????? ?????? 類圖( Class diagrams )
?????? ?????? 序列圖( Sequence diagrams )
?????? ?????? 合作圖( Collaboration diagrams )
?????? ?????? 狀態(tài)圖( Statechart diagrams )
?????? ?????? 活動圖( Activity diagrams )
?????? ?????? 構(gòu)件圖( Component diagrams )
?????? ?????? 部署圖( Deployment diagrams )
(藍(lán)色為較重要并且常用的圖)
類圖是最常用的 UML 圖,顯示出類、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系;它用于描述系統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)。
類圖最基本的元素是類或者接口。
二、類圖
1. 類( Class )
一般包含 3 個組成部分。第一個是類名;第二個是屬性( attributes );第三個是該類提供的方法( 類的性質(zhì)可以放在第四部分;如果類中含有內(nèi)部類,則會出現(xiàn)第五個組成部分)。類名部分是不能省略的,其他組成部分可以省略。
類名書寫規(guī)范:正體字說明類是可被實(shí)例化的,斜體字說明類為抽象類。
屬性和方法書寫規(guī)范:修飾符 [ 描述信息 ] 屬性、方法名稱 [ 參數(shù) ] [ :返回類型 | 類型 ]
屬性和方法之前可附加的可見性修飾符:
加號( + )表示 public ;減號( - )表示 private ; # 號表示 protected ;省略這些修飾符表示具有 package (包)級別的可見性。
如果屬性或方法具有下劃線,則說明它是靜態(tài)的。
?????? 描述信息使用 << 開頭和使用 >> 結(jié)尾。
?????? 類的性質(zhì)是由一個屬性、一個賦值方法和一個取值方法組成。書寫方式和方法類似。
例 1 :
?????? public class TaxCalculator
{???
????? private long? taxRate ;
????? private long? salary? ;
?????
????? public TaxCalculator(long taxRate)
????? {
?????????? this.taxRate = taxRate ;
????? }
??????????
????? public long countTax()
????? {???
?????????? return taxRate*salary;?
????? }
?????
????? public int getSalary()
????? {
?????????? return salary;
????? }
?????
????? public void setSalary(int salary)
????? {
?????????? this.salary = salary;
????? }
}
TaxCalculator
|
-taxRate:long
|
+TaxCalculator(a:long)
+countTax():long
|
salary:long
|
2.
包(
Package
)
包是一種常規(guī)用途的組合機(jī)制。 UML 中的一個包直接對應(yīng)于 Java 中的一個包。在 Java 中,一個包可能含有其他包、類或者同時含有這兩者。進(jìn)行建模時,通常使用邏輯性的包,用于對模型進(jìn)行組織;使用物理性的包,用于轉(zhuǎn)換成系統(tǒng)中的 Java 包。每個包的名稱對這個包進(jìn)行了惟一性的標(biāo)識。
例:
?
3.
接口(
Interface
)
接口是一系列操作的集合,它指定了一個類所提供的服務(wù)。它直接對應(yīng)于 Java 中的一個接口類型。接口的表示有大概兩種方式。具體畫法見下例:
例:
public interface TaxCalculator
{
????? public long countTax();
????? public int getSalary();
????? public void setSalary(int salary);
}
畫法一:
????????????
???? 畫法二 :
?????
Interface
TaxCalculator
|
+countTax():long
+getSalary():int
+setSalary()
|
4. 關(guān)系
常見的關(guān)系有:一般化關(guān)系、實(shí)現(xiàn)關(guān)系、聚合關(guān)系、合成關(guān)系和依賴關(guān)系。請注意不同關(guān)系在圖中連線表示的不同。 ?????
4.1 一般化關(guān)系( Generalization )
在有的書籍和資料中也叫做“泛化關(guān)系”。
????? 一般化關(guān)系表示類與類、接口與接口之間的繼承關(guān)系。關(guān)系中的箭頭由子類指向父類。在 Java 中,用 extends 關(guān)鍵字來直接表示這種關(guān)系。
????? 例:
public abstract class Employee{
}
public class Programmer extends Employee{
}
4.2 實(shí)現(xiàn)( Realization )
實(shí)例關(guān)系指定兩個實(shí)體之間的一個合同。換言之,一個實(shí)體定義一個合同,而另一個實(shí)體保證履行該合同。關(guān)系中的箭頭由實(shí)現(xiàn)接口的類指向被實(shí)現(xiàn)的接口。在 Java 中,實(shí)現(xiàn)關(guān)系可直接用 implements 關(guān)鍵字來表示。
例:
public interface CollegePerson{
}
public class Professor implements CollegePerson{
}
表示方法一:(在
Rose2003
下實(shí)現(xiàn)如下,連接線沒有箭頭,因?yàn)榉较蝻@而易見)
???表示方法二:
?
4.3 關(guān)聯(lián)( Association )
關(guān)聯(lián)表示類與類之間的連接,是長期的關(guān)系。在關(guān)聯(lián)中,一個類保存對另一個類實(shí)例的引用,并在需要的時候調(diào)用這個實(shí)例的方法。它使一個類的可見屬性和方法被另一個類使用。關(guān)聯(lián)可以是雙向或者單向的。雙向的關(guān)聯(lián)箭頭是可選的,單向的箭頭指向遍歷或者查詢的方向。在 Java 中,關(guān)聯(lián)使用實(shí)例變量來實(shí)現(xiàn)。在關(guān)聯(lián)關(guān)系中可以使用附加的基數(shù)來說明類之間對應(yīng)的個數(shù)。
基數(shù)
|
含義
|
0..1
|
零個或者一個實(shí)例
|
0..* 或者 *
|
沒有限制,任意
|
1
|
有且只能一個實(shí)例
|
1..*
|
至少有一個實(shí)例
|
常見的基數(shù)
例:以權(quán)限中的用戶組、用戶角色為例,一個用戶角色可以屬于一個或者多個用戶組,一個用戶組則可以包含多個用戶角色。如果用戶組采用下面的方法來獲得用戶角色的權(quán)限 …
????? public class UserGroup{
private UserRole uRole ;
????? ????? ......
}
public class UserRole{
}
則表現(xiàn)在圖中為:(注意箭頭的畫法)
4.4 聚合( Aggregation )
聚合是關(guān)聯(lián)的一種形式,代表兩個類之間的整體
/
局部關(guān)系。聚合暗示著整體在概念上處于比局部更高的一個級別,而關(guān)聯(lián)暗示兩個類在概念上位于相同的級別。在
Java
中,聚合也是使用實(shí)例變量來實(shí)現(xiàn)的。
關(guān)聯(lián)和聚合的區(qū)別純粹是概念上的,在
Java
語法上分辨不出來的。聚合還暗示著實(shí)例圖中不存在回路。換言之,只能是一種單向關(guān)系。
例:汽車與輪胎的關(guān)系可以很好的說問題。
public class Car{
????? private Tyres tyres;
}
public class Tyres{
}
?
4.5 合成( Composition )
合成是聚合的一種特殊形式,暗示 “ 局部 ” 在 “ 整體 ” 內(nèi)部的生存期職責(zé)。合成關(guān)系是不能共享的。所以,雖然局部不一定要隨整體的銷毀而被銷毀,但整體要么負(fù)責(zé)保持局部的存活狀態(tài),要么負(fù)責(zé)將其銷毀。局部不可與其他整體共享。但是,整體可將所有權(quán)轉(zhuǎn)交給另一個對象,后者隨即將承擔(dān)生存期職責(zé)。
????? 例:人和他的腿就是一個好的例子。
public class Man{
????? private Legs legs;
}
public class Legs{
}
4.6 依賴( Dependency )
依賴也是類與類之間的連接,并且依賴總是單向的。依賴是類間最弱的一種關(guān)系,一個類依賴于另一個類是指這個類和它之間存在短期的關(guān)系。實(shí)體之間一個 “ 使用 ” 關(guān)系暗示一個實(shí)體的規(guī)范發(fā)生變化后,可能影響依賴于它的其他實(shí)例。更具體地說,它可轉(zhuǎn)換為對不在實(shí)例作用域內(nèi)的一個類或?qū)ο蟮娜魏晤愋偷囊谩F渲邪ㄒ粋€局部變量,對通過方法調(diào)用而獲得的一個對象的引用(如下例所示),或者對一個類的靜態(tài)方法的引用(同時不存在那個類的一個實(shí)例)。也可利用 “ 依賴 ” 來表示包和包之間的關(guān)系。由于包中含有類,所以你可根據(jù)那些包中的各個類之間的關(guān)系,表示出包和包的關(guān)系。
例:給一個雇員計(jì)算薪水的時候 , 要使用計(jì)算器的例子
public class Employee{
????? public void calcSalary(Calculator cSalary)
????? {
????? }
}
posted on 2006-05-25 09:38 liaojiyong 閱讀(1632) 評論(0) 編輯 收藏 所屬分類: UML