組合 聚合 依賴 關聯


首先類之間的關系從宏觀上可以分為:關聯、依賴、繼承(泛化),而其中關聯又有兩種特例:聚合和組合,不過在UML2.X中聚合和組合合成一種關系了。

  • 從使用的頻率來看,關聯(包括聚合和組合)關系是使用最為廣泛的;其次是依賴和繼承
  • 關聯和依賴的區別:
    1. 從類之間關系的強弱程度來分,關聯表示類之間的很強的關系;依賴表示類之間的較弱的關系;
    2. 從類之間關系的時間角度來分,關聯表示類之間的“持久”關系,這種關系一般表示一種重要的業務之間的關系,需要保存的,或者說需要“持久化”的,或者說需要保存到數據庫中的。比如學生管理系統中的Student類和Class(班級)類,一個Student對象屬於哪個Class是一個重要的業務關系,如果這種關系不保存,系統就無法管理。另外,依賴表示類之間的是一種“臨時、短暫”關系,這種關系是不需要保存的,比如Student類和StuEditScreen(學生登錄界面)類之間就是一種依賴關系,StuEditScreen類依賴Student類,依賴Student對象的信息來顯示編輯學生信息。
    3. 設計類之間的關系是遵循的原則:首先判斷類之間是否是一種“關聯”關系,若不是再判斷是否是“依賴關系”,一般情況下若不是關聯,就是依賴關系
    4. 依賴一般情況下是以下幾種情況之一:a、ClassA中某個方法的參數類型是ClassB;這種情況成為耦合;b、ClassA中某個方法的參數類型是ClassB的一個屬性;這種情況成為緊耦合;c、ClassA中某個方法的實現實例化ClassB;d、ClassA中某個方法的返回值的類型是ClassB;如果出現了上述四種情況之一,兩個類很有可能就是“依賴”關系。
    5. 依賴關系(Dependency):是類與類之間的連接,依賴總是單向的。依賴關系代表一個類依賴於另一個類的定義。下面的例子中class A 依賴與class B、C、D。

      java 代碼
      1. public class A{
      2. public B getB(C c, D d){
      3. E e = new E();
      4. B b = new B(c, d, e);
      5. }
      6. }

       

    6. 關聯是一種結構關系,說明一個事物的對象與另一個事物的對象相聯系。給定一個連接兩各類的關聯,可以從一個類的對象導航到另一個類的對象。 關聯可以有方向,即導航。一般不作說明的時候,導航是雙向的,不需要在線上標出箭頭。大部分情況下導航是單向的,可以加一個箭頭表示。關聯在代碼中一般表示為屬性(成員變量),例如下面例子中 class A與B關聯
      java 代碼
       
      1. public class A{
      2. private B b;
      3. }
      如果B也關聯到A,那么它們就是雙向的關聯。
      java 代碼
      1. public class B{
      2. private A a;
      3. }
    7. 聚合關系(Aggregation):是關聯關系的一種,是強的關聯關系。聚合是整體與個體之間的關系。如汽車類與引摯類,輪胎類之間的關系就是整體與個體的關系。

      與關聯關系一樣,聚合關系也是通過實例變量來實現的。

      ***關聯關系所涉及的兩個類是處於同一層次上的,而在聚合關系中,兩個類處在不平等的層次上的,一個代表整體,一個代表部分。(關聯與聚合僅僅從語法上是區分不開的,需要察所涉及的類之間的邏輯關系。

    8. 組成關系(Composition):是關聯關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表的對象負責代表部分的對象的生命周期,合成關系是不能共享的。

      代表整體的對象需要負責保持對象的存活,在一些情況下負責將代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,

      *******代表部分的對象在每一個時刻只能與一個對象發生合成關系,由后者排它的負責其生命周期。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM