天天看點

10.關聯(Association)

      關聯關系是類與類之間最常用的一種關系,它是一種結構化關系,用于表示一類對象與另一類對象之間有聯系。它展現的是兩個類、或者類與接口之間語義級别的一種強依賴關系,比如我和我的朋友。這種關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的,關聯可以是單向、雙向的。表現在代碼層面,為被關聯類B以類屬性的形式出現在關聯類A中,也可能是關聯類A引用了一個類型為被關聯類B的全局變量。

      在UML類圖中,用實線連接配接有關聯的對象所對應的類,在使用Java、C#和C++等程式設計語言實作關聯關系時,通常将一個類的對象作為另一個類的屬性。

1.雙向關聯

      預設情況下,關聯是雙向的,雙向的關聯可以有兩個箭頭或者沒有箭頭。

2.單向關聯

      類的關聯關系也可以是單向的,單向關聯用帶箭頭的實線表示。

      單向關聯和雙向關聯的UML示例圖如下所示:

10.關聯(Association)

      【說明】:上圖中,Teacher與Student是雙向關聯,Teacher有多名Student,Student也可能有多名Teacher(兩個類連線下面的*表示多對多的關系)。但Student與Course間的關系為單向關聯,一名Student可能有多門Course,課程是個抽象的東西,是以不擁有Student。

      單向關聯和雙向關聯的示例代碼如下(Teacher、Student類的定義):

class Course
{ }

class Teacher
{
    var student: Student?;
}

class Student
{
    var teacher: Teacher?;
    var course: Course?;
}      

3.自關聯

      在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關系稱為自關聯。比如我們在資料結構中描述樹結構,會建一個節點Node類,Node類有一個指針父節點也是Node類型。

無善無惡心之體,

有善有惡意之動,

知善知惡是良知,

為善去惡是格物。