UML類圖中的六大關系:關聯、聚合、組合、依賴、繼承、實現

原文地址:https://my.oschina.net/jackieyeah/blog/224265

一、簡介

       在UML類圖中,類之間的關系可以分成:關聯(association)、聚合(aggregation)、組合(composition)、依賴(dependency)、泛化(generalization)/繼承(inheritance)和實現(realization)。這六種關系如下圖所描繪:

      

       上面的關系可以解讀如下:

  • (關聯)Association:A類有B類有邏輯上的連接

  • (聚合)Aggregation : A類有一個B類

  • (組合)Composition : A類擁有一個B類

  • (依賴)Dependency : A類使用了B類

  • (繼承)Inheritance : B類是一個A類  (或者B類擴展A類)

  • (實現)Realization : B類實現了接口A

      本篇文章主要是展示在Java中如何表示這些關系 ,以便我們可以更好地理解這些關系并且知道如何以及何時使用每一種關系。

二、關聯(association)

       關聯描述兩個類之間行為的一般二元關系。例如,一個學生選修一門特定的課程是學生類Student和課程類Course之間的一個關聯,而一個教師教授一門課程是師資類Faculty和課程類Course之間的一個關聯。Java代碼中,關聯可以用屬性和方法來實現。

public class Student {    private Course[] courses;    public void addCourse(Course s) {        . . . . . .    }}public class Course {    private Strudent[] students;    private Faculty faculty;    public void addStudent(Student s) {        . . . . . .    }    public void setFaculty(Faculty faculty) {        this.faculty = faculty;    }}public class Faculty {    private Course[] courses;            public void addCourse(Course s) {        . . . . . .    } }

三、聚合(Aggregation)

      聚合是一種特殊的關聯(Association)形式,表示兩個對象之間的所屬(has-a)關系。所有者對象稱為聚合對象,它的類稱為聚合類;從屬對象稱為被聚合對象,它的類稱為被聚合類。例如,一個公司有很多員工就是公司類Company和員工類Employee之間的一種聚合關系。被聚合對象和聚合對象有著各自的生命周期,即如果公司倒閉并不影響員工的存在。

public class Company {    private List<Employee> employees;}public class Employee {    private String name;   }

四、組合(Composition)  

       聚合是一種較弱形式的對象包含(一個對象包含另一個對象)關系。較強形式是組合(Composition). 在組合關系中包含對象負責被包含對象的創建以及生命周期,即當包含對象被銷毀時被包含對象也會不復存在。例如一輛汽車擁有一個引擎是汽車類Car與引擎類Engine的組合關系。下面是組合的一些例子。

       (1)通過成員變量初始化  

public class Car {    private final Engine engine = new Engine();}class Engine {    private String type;}

      (2)通過構造函數初始化

public class Car {    private final Engine engine;           public Car(){       engine  = new Engine();    }}public class Engine {    private String type;}

      (3)通過延遲初始化

public class Car {    private final Engine engine;    public Engine getEngine() {        if (null == engine) {            engine = new Engine();        }        return engine;    }}public class Engine {    private String type;}

五、依賴(Dependency)

   依賴(Dependency)描述的是一個類的引用用作另一個類的方法的參數。例如,可以使用Calendar類中的setTime(Date date)方法設置日歷,所以Calendar和Date之間的關系可以用依賴描述。

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {    public final void setTime(Date date) {        setTimeInMillis(date.getTime());    }          . . . . . .}

       在依賴關系中,類之間是松耦合的。

六、繼承(Inheritance)

      繼承(Inheritance)模擬兩個類之間的is-a關系。強是(strong is-a)關系描述兩個類之間的直接繼承關系。弱是(weak is-a)關系描述一個類具有某個屬性。強是關系可以用類的繼承表示。例如,Spring的ApplicationEvent是一個EventObject,ApplicationEvent和EventObject間就是一種強是關系,可以用繼承描述。

public abstract class ApplicationEvent extends EventObject {    . . . . . .}

七、實現(Realization)

      實現(Realization)描述的是一個類實現了接口(可以是多個)。上面描述的弱是(weak is-a)關系就可以用接口表示。例如字符串是可以被序列化的,這就可以用實現來描述。

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {    . . . . . .}

歡迎關注

歡迎掃描下方二維碼,持續關注:

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容文字的真實性、完整性和原創性本站不作任何保證或承諾,請讀者僅作參考,并自行核實相關內容。

http://image99.pinlue.com/thumb/img_jpg/QyoUQfWPRn8UfThXEsXaiamhMUahsCIHQxYf9icibje6Lutia0e4iccSJjFqziaBvjia8O8FU5gEbvmic5TicaxJAUu6yTg/0.jpeg
我要收藏
贊一個
踩一下
分享到
相關推薦
精選文章
?
分享
評論
首頁
京东快彩是真的吗