類與類之間的關係

2021-09-25 07:53:56 字數 2592 閱讀 2297

一、繼承關係

繼承指的是乙個類(稱為子類、子介面)繼承另外的乙個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力。在uml類圖設計中,繼承用一條帶空心三角箭頭的實線表示,從子類指向父類,或者子介面指向父介面。 

二、實現關係

實現指的是乙個class類實現inte***ce介面(可以是多個)的功能,實現是類與介面之間最常見的關係。在uml類圖設計中,實現用一條帶空心三角箭頭的虛線表示,從類指向實現的介面。 

三、依賴關係

簡單的理解,依賴就是乙個類a使用到了另乙個類b,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是類b的變化會影響到類a。比如某人要過河,需要借用一條船,此時人與船之間的關係就是依賴。表現在**層面,為類b作為引數被類a在某個method方法中使用。在uml類圖設計中,依賴關係用由類a指向類b的帶箭頭虛線表示。 

四、關聯關係

關聯體現的是兩個類之間語義級別的一種強依賴關係,比如我和我的朋友,這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的。關聯可以是單向、雙向的。表現在**層面,為被關聯類b以類的屬性形式出現在關聯類a中,也可能是關聯類a引用了乙個型別為被關聯類b的全域性變數。在uml類圖設計中,關聯關係用由關聯類a指向被關聯類b的帶箭頭實線表示,在關聯的兩端可以標註關聯雙方的角色和多重性標記。 

五、聚合關係

聚合是關聯關係的一種特例,它體現的是整體與部分的關係,即has-a的關係。此時整體與部分之間是可分離的,它們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享。比如計算機與cpu、公司與員工的關係等,比如乙個航母編隊包括海空母艦、驅護艦艇、艦載飛機及核動力攻擊潛艇等。表現在**層面,和關聯關係是一致的,只能從語義級別來區分。在uml類圖設計中,聚合關係以空心菱形加實線箭頭表示。 

六、組合關係

組合也是關聯關係的一種特例,它體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合。它同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束,比如人和人的大腦。表現在**層面,和關聯關係是一致的,只能從語義級別來區分。在uml類圖設計中,組合關係以實心菱形加實線箭頭表示。 

七、總結

對於繼承、實現這兩種關係沒多少疑問,它們體現的是一種類和類、或者類與介面間的縱向關係。其他的四種關係體現的是類和類、或者類與介面間的引用、橫向關係,是比較難區分的,有很多事物間的關係要想準確定位是很難的。前面也提到,這四種關係都是語義級別的,所以從**層面並不能完全區分各種關係,但總的來說,後幾種關係所表現的強弱程度依次為:組合》聚合》關聯》依賴。

繼承與組合的優缺點

類繼承和物件組合是復用的兩種最常用的技術。

一:繼承

繼承是is a 的關係,比如說student繼承person,則說明student is a person。繼承的優點是子類可以重寫父類的方法來方便地實現對父類的擴充套件。

繼承的缺點有以下幾點:

①:父類的內部細節對子類是可見的。

②:子類從父類繼承的方法在編譯時就確定下來了,所以無法在執行期間改變從父類繼承的方法的行為。

③:如果對父類的方法做了修改的話(比如增加了乙個引數),則子類的方法必須做出相應的修改。所以說子類與父類是一種高耦合,違背了物件導向思想。

二:組合

組合也就是設計類的時候把要組合的類的物件加入到該類中作為自己的成員變數。

組合的優點:

①:當前物件只能通過所包含的那個物件去呼叫其方法,所以所包含的物件的內部細節對當前物件時不可見的。

②:當前物件與包含的物件是乙個低耦合關係,如果修改包含物件的類中**不需要修改當前物件類的**。

③:當前物件可以在執行時動態的繫結所包含的物件。可以通過set方法給所包含物件賦值。

組合的缺點:①:容易產生過多的物件。②:為了能組合多個物件,必須仔細對介面進行定義。

由此可見,組合比繼承更具靈活性和穩定性,所以在設計的時候優先使用組合。只有當下列條件滿足時才考慮使用繼承:

子類是一種特殊的型別,而不只是父類的乙個角色

子類的例項不需要變成另乙個類的物件

子類擴充套件,而不是覆蓋或者使父類的功能失效

類與類之間的關係

uml uml是統一建模語言 為軟體開發提供一些標準的圖例,統一開發思想,從而促進團隊協作 在軟體過程中,會用到uml 分析 設計 編碼 測試 維護 主流的有 rup rational unified process 合理的統一過程 強調軟體開發一開始就要有好的設計 才能有好的設計 xp程式設計 e...

類與類之間的關係

1.在乙個類中將被聚合元素作為其屬性 如果所有類都會用到乙個類的物件,則把它作為屬性 在任何方法的任何類,都可以建立物件 package 聚合 public class car public static void main string args package 聚合 public class w...

類與類之間的關係

泛化 繼承 指的是乙個類 稱為子類 子介面 繼承另外乙個類 稱為父類 父介面 的功能。在uml類圖設計中,泛化 繼承 使用一條帶空心的三角箭頭的實線表示,從子類指向父類,或者是從子介面指向父介面。示例 public class father class sonextends father 實現 實現...