UML中類之間的關系分為以下幾種:依賴、關聯、泛化、聚合、組合。
依賴是指一個類使用了另一個類,它是一種使用關系,描述了一個事物的規格說明的變化可能會影響到使用它的另一個事物(反之不一定)。最常見的依賴關系是一個類內部中使用到了另一個類的定義。在UML中表示為一條指向被依賴事物的虛線。
依賴可以采取多種方式來實現,如以下代碼
internal
class
DependReturnType
{
}
internal
class
DependParameter
{
}
internal
class
DependVarible
{
}
class
Depend
{
public
DependReturnType Test(DependParameter param)
{
DependVarible var
=
new
DependVarible();
return
new
DependReturnType();
}
}
Depend類依賴于DependReturnType類、DependParameter類和DependVarible類,這就表明依賴的關系可以通過返回值、方法參數或者內部定義變量的形式來實現。
當類之間在概念上有連接關系時,類之間的連接稱之為關聯,關聯是一種結構關系,說明一個事物的對象與另一個事物的對象相聯系。給定一個連接兩各類的關聯,可以從一個類的對象導航到另一個類的對象。
一般把關聯畫為連接相同或者不同的類一條實線。關聯可以有方向,即導航。一般不作說明的時候,導航是雙向的,不需要在線上標出箭頭。大部分情況下導航是單向的,可以加一個箭頭表示。
關聯一般采取全局變量的方式來實現,如以下代碼

Code
internalclass Employee
{
publicvoid DoWork()
{
}
}
class Association
{
private Employee myEmployee;
public Employee MyEmployee
{
get
{
return myEmployee;
}
set
{
myEmployee = value;
}
}
publicvoid DoSomething()
{
myEmployee.DoWork();
}
}
Association類關聯Employee類。
依賴和關聯都是一個類中使用了另一個類,那它們有什么區別呢?
依賴和關聯都是兩個或多個相對獨立的類之間的關系。當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現
為依賴關系;當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。依賴關系表現在局部變量,方法的參數,以及對
靜態方法的調用;關聯關系是使用實例變量來實現。
泛化就是面向對象中的繼承。它表示類與類之間的繼承關系,接口與接口之間的繼承關系,或類對接口的實現關系。一般化的關系是從子類指向父類的,與繼承或實現的方法相反。
代碼如下

Code
internalclass Father
{
}
internalclass Child : Father
{
}
class Generalization
{
publicvoid Test()
{
Father father =new Child();
}
}
當對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚合關系。聚合是關聯關系的一種,是較強的關聯關系,強調的是整體與部分之間的關系。
與關聯關系一樣,聚合關系也是通過實例變量來實現這樣關系的。關聯關系和聚合關系來語法上是沒辦法區分的,從語義上才能更好的區分兩者的區別。
聚合用帶一個空心菱形(整體的一端)的實線表示。
聚合與關聯的區別:關聯關系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關聯關系,而不是聚合關系,因為人不是由自行車組成的。
組合是一種特殊的聚合關系,它是一種強類型的聚合,組合中的部分不能脫離整體而獨立存在。例如Windows的窗口和窗口上的菜單就是組合關
系。組合中的整體和部分的生命周期一致,即部分必須在組合創建的同時或者之后創建,在組合銷毀之前或者同時銷毀,部分的生命周期不會超出組合的生命周期。
組合是用帶實心菱形(整體的一端)的實線來表示。
組合與聚合的區別:
- 生命周期的實現上,組成需要負責其部分的創建和銷毀,聚合不需要
- 組合中的一個對象在同一時刻只能屬于一個組成對象,而聚合的一個部分對象可以被多個整體對象聚合,例如一個學生可以在多個學校就讀,而一個菜單在同一時刻只能是某個窗口內的對象。