详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合
文章目錄
- 1.面向對象程序設計概述
- 1.1 面向對象程序設計
- 1.2 傳統結構化程序設計
- 1.3 面向對象與面向過程舉例
- 2.類之間的關系
- 2.1 泛化/繼承
- 2.2 實現
- 2.3 依賴
- 2.4 關聯
- 2.5 聚合
- 2.5 組合
- 2.6 強弱順序
- 2.7 一張圖融會貫通
- 3. 參考文獻
本文已同步到:https://www.bithachi.cn/posts/769cd987.html
1.面向對象程序設計概述
- 面向對象程序設計(簡稱 OOP) 是當今主流的程序設計范型, 它已經取代了 20 世紀 70 年代的“ 結構化” 過程化程序設計開發技術。
1.1 面向對象程序設計
- Java 是完全面向對象的, 必須熟悉 OOP 才能 夠編寫 Java 程序。
- 面向對象的程序是由對象組成的, 每個對象包含對用戶公開的特定功能部分和隱藏的實 現部分。程序中的很多對象來自標準庫,還有一些是自定義的。
1.2 傳統結構化程序設計
- 傳統的結構化程序設計通過設計一系列的過程(即算法)來求解問題。一旦確定了這些 過程, 就要開始考慮存儲數據的方式。這就是 Pascal 語言的設計者 Niklaus Wirth將其著作命 名為《算法 + 數據結構 = 程序》
- 在 Wirth命名的書名中, 算法是第一位的,數據結構是第二位的,這就明確地表述了程序員的工作方式。 先要確定如何操作數據, 然后再決定如何組織數據, 以便于數據操作。 而 OOP 卻調換了這個次序, 將數據放在第一位,然后再考慮操作數據的算法。
1.3 面向對象與面向過程舉例
舉個例子簡單說明面向過程開發與面向對象oop開發的不同:
- 對于一些規模較小的問題, 將其分解為過程的開發方式比較理想。
- 而面向對象更加適用 于解決規模較大的問題。
- 要想實現一個簡單的 Web 瀏覽器可能需要大約 2000 個過程,這些過程可能需要對一組全局數據進行操作。
- 采用面向對象的設計風格, 可能只需要大約 100 個 類,每個類平均包含 20 個方法(如圖 4-丨所示)。
- 后者更易于程序員掌握, 也容易找到 bug 假設給定對象的數據出錯了,在訪問過這個數據項的 20 個方法中查找錯誤要比在 2000 個過 程中查找容易得多
2.類之間的關系
在類之間, 最常見的關系有:
2.1 泛化/繼承
- 含義:繼承指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力。
- 代碼體現:在Java中繼承關系通過關鍵字extends明確標識
- 箭頭指向:繼承用一條帶空心三角箭頭的實線表示,從子類指向父類,或者子接口指向父接口。
2.2 實現
- 含義:實現指的是一個class類實現interface接口(可以是多個)的功能,實現是類與接口之間最常見的關系。
- 代碼體現:在Java中此類關系通過關鍵字implements明確標識
- 箭頭指向:實現用一條帶空心三角箭頭的虛線表示,從類指向實現的接口。
2.3 依賴
-
含義:一種使用的關系,即一個類的實現需要另一個類的協助,要盡量不使用雙向的互相依賴.
這種使用關系是具有偶然性的、臨時性的、非常弱的,類B的變化會影響到類A。
-
代碼表現:局部變量、方法的參數或者對靜態方法的調用;類B作為方法參數(局部變量)被類A在某個method方法中使用
-
箭頭指向:用帶箭頭的虛線表示,指向被使用者
2.4 關聯
-
含義:是一種擁有的關系,它使一個類知道另一個類的屬性和方法;
這種關系比依賴更強、不存在依賴關系的偶然性、關系也不是臨時性的,一般是長期性的,而且雙方的關系一般是平等的。
如:老師與學生,丈夫與妻子關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
-
代碼體現:成員變量。被關聯類B以類的屬性形式出現在關聯類A中,也可能是關聯類A引用了一個類型為被關聯類B的全局變量。
-
箭頭指向: 帶普通箭頭的實心線,指向被擁有者
2.5 聚合
-
含義:聚合是關聯關系的一種特例,它體現的是整體與部分的關系,即has-a的關系。
此時整體與部分之間是可分離的,它們可以具有各自的生命周期,部分可以屬于多個整體對象,也可以為多個整體對象共享。
比如計算機與CPU、公司與員工的關系等,比如一個航母編隊包括海空母艦、驅護艦艇、艦載飛機及核動力攻擊潛艇等。
-
代碼體現:成員變量;和關聯關系是一致的,只能從語義級別來區分
-
箭頭指向:帶空心菱形的實心線,菱形指向整體
2.5 組合
-
含義:組合也是關聯關系的一種特例,它體現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合。
它同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味著部分的生命周期結束,比如人和人的大腦。比如公司和部門是整體和部分的關系,沒有公司就不存在部門。
-
代碼體現:成員變量;和關聯關系是一致的,只能從語義級別來區分
-
箭頭指向:帶實心菱形的實線,菱形指向整體
2.6 強弱順序
各種關系的強弱順序:泛化/繼承 = 實現 > 組合 > 聚合 > 關聯 > 依賴
2.7 一張圖融會貫通
下面這張UML圖,比較形象地展示了各種類圖關系:
3. 參考文獻
- http://www.uml.org.cn/oobject/201609062.asp#
- https://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html
總結
以上是生活随笔為你收集整理的详解:面向对象与面向过程的比较 类之间的关系:泛化、实现、依赖、关联、聚合、组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.3.3 计算机网络传输层之TCP拥塞
- 下一篇: java《算法》第四版一些API方法笔记