Java OOP(面向對象編程)基本概念圖文解說

ramostear 發佈 2020-01-16T00:11:42+00:00

10.關聯,聚合和組合之間的異同​ 一般地,關聯是一種非常通用的術語,用於表示一個類何時使用另一個類提供的功能。

面向對象編程是一種編程概念,其核心思想是允許用戶創建所需要的對象,然後提供處理這些對象的方法,使用者通過操作對象而獲得運算數據。

本文將以簡潔的方式對面向對象編程中的概念進行梳理。

1. Class(類)

​ 你可以將類理解為對一組相似實體的統稱。類只是一個邏輯組件,並不是具體的物理實體。例如,你可以創建一個名為「Bird」的鳥類,則它可能包含烏鴉,喜鵲,麻雀,鸚鵡等對象。其屬性(數據)可以是這些鳥的顏色,體重或者身高。除此之外,你還可以為鳥類提供飛行,捕食,鳴叫等方法。

2. Object(對象)

​ 你可以將對象理解為類的一個實例或者具體的一個個體。在Java中一個類可以有多個對象實例,但一個對象實例只能對應一個類。對象既包含數據又包含對數據進行操作的方法。例如,我們日常生活中能夠體現具體物理事物的鋼筆,電腦桌,顯示器,自行車,玻璃杯等等。

3. Inheritance(繼承)

​ 繼承是Java中的一種機制,它允許其中一個對象獲取父對象的所有屬性和行為(方法)。他是面向對象編程系統(OOPS)的重要組成部分。Java繼承的思想是可以創建基於現有類的新類。從現有類繼承時,可以重用父類的欄位和方法。除此之外,你還可以在當前類中添加新的欄位和方法。

​ 在Java中,類的繼承可以分為三種:單繼承,多繼承和分層繼承。但需要注意的是,這裡提到的多繼承是相對於被繼承類而言的,Java中不允許一個類繼承多個類。Java中的多重繼承可以通過接口來實現。

4. Polymorphism(多態)

​ 簡單來說,多態是指類的屬性和方法在不同的對象實例中具有不同的表現形式。例如,在Animal(動物)類中有一個speak()方法,在不同的對象實例中,如狗的speak()是「汪汪~」,貓的speak()是「喵喵~」,牛的speak()是「哞哞~」,羊的speak()是「咩咩~」等等。

5. Abstraction(抽象)

​ 抽象是指只表示一個類的基本特徵而隱藏其內部細節的行為。例如,我們可以把汽車抽象為一個具備發動機,輪子,方向盤,剎車,變速箱,座椅等部件的物體,但發動機是幾缸的,加汽油還是柴油,變速箱是手動還是自動,座椅是帶加熱還是不帶加熱的等細節我們不去關心,僅僅描述一台汽車的基本特徵即可。

6. Encapsulation(封裝)

​ 簡單來說,封裝是一種將代碼和數據包裝到一個單元中的OOP技術。在OOPs概念中,一個類的變量始終對其他類隱藏,想要獲取類中的變量,只能使用當前類提供的方法對其進行訪問。我們以膠囊藥物為例,基本上,膠囊封裝了藥物的幾種組合,如果藥物的組合看成是變量和方法的,則膠囊將充當一個類,使用膠囊包裹藥物的過程則稱為封裝。

7. Association(關聯)

​ 關聯是指兩個對象之間存在某種聯繫,它定義了對象之間的多樣性。例如,學生與老師之間存在著關聯,學生上老師的課,老師教學生知識。在Java中,關聯關係可以有一對一關聯,一對多關聯,多對多關聯和多對一關聯。

8. Aggregation(聚合)

​ 聚合是關聯的一種特定情況,屬於關聯的子集。與繼承不同的是聚合表示一種「has-a」的關係,而繼承表示一種「is-a」的關係。以汽車為例子,一台車子由發動機,變速箱,外殼,輪子,剎車系統等組成。在這種模式中,父類的生命周期結束,不會影響到子類的生命周期,換而言之,在聚合中,每個對象都有自己的生命周期,例如,一輛汽車被拆卸開後,器發動機,大燈,方向盤,輪子,座椅等子部件仍然還能正常工作。

9. Composition(組合)

​ 組合是聚合的一種特殊關係,它表現為整體與局部具有某種「死亡契約」。當整體的生命周期結束時,局部的生命周期也隨之結束。例如,我們以人為例,人簡單的可概括為由頭,手,腳和軀幹四個部分組成,當人死亡時,組成人的這四個部分也隨之死亡。也就是說,局部不能離開整體而單獨工作。

​ 大部分剛剛接觸面向對象編程的同學都會被關聯,聚合和組合這三種關係搞暈,這裡簡單的總結一下這三者之間的關係。

10. 關聯,聚合和組合之間的異同

​ 一般地,關聯是一種非常通用的術語,用於表示一個類何時使用另一個類提供的功能。如果一個父類對象擁有另一個子類對象並且如果父類對象生命周期結束子類對象也無法正常工作時,則稱為組合,反之則稱為聚合。

關鍵字: