關於UML 依賴、關聯、聚合、組合幾種類間關係的思考

依賴關係:表示一個類的定義依賴於另一個類的定義。一般而言,依賴關係體現爲局部變量、方法的形參、或者靜態方法的調用

關聯關係:使一個類知道另一個類的屬性和方法,體現爲指針或引用成員變量,一般特指處於並列關係的類包含對方類型的成員變量。比如杯子和碗,桌子和椅子等。

聚合關係:關聯關係中的一種強關聯,表現的是整體和個體之間的關係。比如汽車與汽車零件之間的關係,但是整體和個體有各自的生命週期,整體並不負責個體的創建和析構。體現爲指針或引用成員變量,但只是構造時賦值,不會在該類中new或delete。對比於關聯的並列,聚合描述的是整體與個體的一種層次關係,但整體不能控制個體的創建和銷燬。比如學校和學生,人羣和人等。

組合關係:關聯關係中的一種強關聯,與聚合類似,表現的是整體和部分之間的關係。但是組合關係中,整體負責部分的整個生命週期,也就是創建和析構。部分必須依賴於整體才能存在,整體被銷燬了,部分也就被銷燬了,沒有單獨存在的意義。體現爲非指針或引用的成員變量,如果是指針類型需要在該類中構造和析構。比如人和眼睛。

       個人感覺,我們不用太糾結於這幾種關係文字上的描述,它更重要的目的是爲了體現程序層面設計的意義。比如汽車和輪胎,從描述上看,的確更偏向於聚合關係,因爲輪胎可以脫離汽車存在。但是如果在實際程序中,我們讓輪胎對象在汽車類中進行實際的創建以及析構,汽車對象delete,輪胎對象也被delete,那麼此時汽車和輪胎就是組合關係。

       UML 依賴、關聯、組合、聚合這幾種關係的存在目的是爲了程序架構設計,是爲了指引我們怎麼寫代碼,而不是爲了哲學思考。我們要通過這幾種關係體現出我們的設計,現實世界的關係最多隻是一個參考,不一定非要根據現實世界的關係去進行程序設計。我仔細思考了下,現實生活中,組合關係也太難見到了。畢竟,誰脫離了誰會不能繼續存在呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章