UML中類之間的關係

iDotNetSpace發表於2008-09-04
UML中類之間的關係分為以下幾種:依賴、關聯、泛化、聚合、組合。

 

  依賴是指一個類使用了另一個類,它是一種使用關係,描述了一個事物的規格說明的變化可能會影響到使用它的另一個事物(反之不一定)。最常見的依賴關係是一個類內部中使用到了另一個類的定義。在UML中表示為一條指向被依賴事物的虛線。

  依賴可以採取多種方式來實現,如以下程式碼


<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtinternal 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 highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtinternal class Employee
{
public void DoWork()
{

}
}

class Association
{
private Employee myEmployee;

public Employee MyEmployee
{
get
{
return myEmployee;
}
set
{
myEmployee
= value;
}
}

public void DoSomething()
{
myEmployee.DoWork();
}
}
Association類關聯Employee類。

 

  依賴和關聯都是一個類中使用了另一個類,那它們有什麼區別呢?

  依賴和關聯都是兩個或多個相對獨立的類之間的關係。當一個物件負責構造另一個物件的例項,或者依賴另一個物件的服務時,這兩個物件之間主要體現為依賴關係;當一個物件的例項與另一個物件的一些特定例項存在固定的對應關係時,這兩個物件之間為關聯關係。依賴關係表現在區域性變數,方法的引數,以及對靜態方法的呼叫;關聯關係是使用例項變數來實現。

 

  泛化就是物件導向中的繼承。它表示類與類之間的繼承關係,介面與介面之間的繼承關係,或類對介面的實現關係。一般化的關係是從子類指向父類的,與繼承或實現的方法相反。

  程式碼如下


<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtinternal class Father
{

}
internal class Child : Father
{

}
class Generalization
{
public void Test()
{
Father father
= new Child();
}
}

 

  當物件A被加入到物件B中,成為物件B的組成部分時,物件B和物件A之間為聚合關係。聚合是關聯關係的一種,是較強的關聯關係,強調的是整體與部分之間的關係。

  與關聯關係一樣,聚合關係也是通過例項變數來實現這樣關係的。關聯關係和聚合關係來語法上是沒辦法區分的,從語義上才能更好的區分兩者的區別。

  聚合用帶一個空心菱形(整體的一端)的實線表示。

 

  聚合與關聯的區別:關聯關係所涉及的兩個物件是處在同一個層次上的。比如人和自行車就是一種關聯關係,而不是聚合關係,因為人不是由自行車組成的。

 

  組合是一種特殊的聚合關係,它是一種強型別的聚合,組合中的部分不能脫離整體而獨立存在。例如Windows的視窗和視窗上的選單就是組合關係。組合中的整體和部分的生命週期一致,即部分必須在組合建立的同時或者之後建立,在組合銷燬之前或者同時銷燬,部分的生命週期不會超出組合的生命週期。

  組合是用帶實心菱形(整體的一端)的實線來表示。

 

  組合與聚合的區別:

  • 生命週期的實現上,組成需要負責其部分的建立和銷燬,聚合不需要
  • 組合中的一個物件在同一時刻只能屬於一個組成物件,而聚合的一個部分物件可以被多個整體物件聚合,例如一個學生可以在多個學校就讀,而一個選單在同一時刻只能是某個視窗內的物件。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-441857/,如需轉載,請註明出處,否則將追究法律責任。

相關文章