首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

《Java 編程思想》讀書筆記(一):面向對象核心思想與設計原則

     編輯:Java 綜合教學

前言

《Java 編程思想》被公認為 Java 程序員「必讀聖經」。本筆記記錄第一章核心觀點,結合生活化比喻(可樂瓶、皇帝繼位等)輔助理解,適合初學者建立 OOP 思維模型,也適合資深開發者回顧重構認知。

一、抽象過程:從機器到對象

每種編程語言提供抽象機制。面向對象的抽象是抽象出對象。

對象 = 狀態 + 行為
可樂瓶:狀態=容量 600ml,行為=裝可樂()
顯示器:狀態=尺寸 27寸,行為=顯示圖像()
原子:狀態=原子核,行為=形成分子()

二、面向對象五大基本特性

1. 萬事萬物皆為對象

對象是「奇特的能量」:既存儲數據,又能在自身上執行操作。
理解關鍵:封裝數據與操作,而非分離的結構體+函數。

2. 程序是對象的集合,通過發送消息協作

消息 = 方法調用請求。
打電話例子:你(對象) → 發送消息「打電話」 → 電話(對象) → 執行 dial() 方法。
程序運行本質:對象間相互調用方法完成任務。

3. 每個對象都有由其他對象構成的存儲

組合/聚合關係:對象包含其他對象引用。
人對象包含:衣服對象、手機對象、心臟對象...
這就是「Has-a」關係,區別於「Is-a」繼承關係。

4. 每個對象都有其類型

類 = 類型 = 對象模板。
老人/孩子類型都是「人」,美人魚類型是「魚」。
類型決定對象能接收什麼消息(擁有什麼方法)。

5. 特定類型的所有對象都能接收相同消息

多態基礎:Person p = new Student(); p.walk();
只要類型是 Person,無論具體是 Student/Teacher/OldMan,都能調用 walk()。

Booch 對象定義:狀態、行為、標識

  • 狀態:屬性(可樂容量)
  • 行為:方法(裝可樂)
  • 標識:內存地址唯一性,但業務上常用類型+業務鍵區分

三、接口:對象的服務契約

接口由類型決定。類定義了對象能做什麼(方法簽名),對象只能響應接口定義的消息。

可樂類 KeLe 定義 zhuang() 方法 → 百事可樂對象只能「裝可樂」,不能「裝水」。
接口限制對象能力,保證契約一致性。

四、服務:對象作為服務提供者

可樂配料(糖、水、色素)協作成就可樂服務。
軟件同理:將問題分解為一系列協作對象。
單一職責原則 (SRP):糖只負責甜,水只負責稀釋。對象只做一件事,做好一件事。
好處:高內聚、易理解、易復用、易測試。

五、隱藏具體實現:面向接口編程

角色稱呼關注點
創建新類型類創建者如何實現(演算法、數據結構、優化)
使用類型客戶端程序員能做什麼(接口、參數、返回值)

可樂配方保密:只告訴你「給糖水給可樂」,不告訴「加熱/冰鎮順序」。
兩大收益:

  1. 防止客戶端誤改脆弱實現導致背鍋
  2. 實現變更不影響調用者(不會被拿刀追殺)

六、復用實現:組合優於繼承

方式一:直接使用對象(最簡單復用)

創建可樂類,實例化百事/可口可樂對象。對象復用。

方式二:組合——新類包含現有對象

套餐類包含:雞腿對象 + 小菜對象 + 可樂對象。
套餐類只知「我有什麼」,不知「它們怎麼實現」。
組合 = Has-a 關係(擁有關係)。動態組合稱聚合。

七、繼承:Is-a / Is-like-a 關係

為什麼需要繼承?

百事/可口可樂共同屬性:價格、容量。
若各自定義類 → 重複代碼 → 新增可樂類型需改動多處。
解決:提取父類 KeLe 含共同屬性/方法,子類繼承。

繼承關係層次

  • Is-a (純繼承):子類無新增成員,子類就是父類。百事可樂 是 可樂
  • Is-like-a (擴展繼承):子類有自己屬性/方法,像父類但不完全相同。李世民繼承李淵皇位,都是皇帝但治國風格不同

方法重寫:子類有權修改父類行為

父類吃麵條,子類吃米飯。同樣是「吃飯」方法,實現不同。
多態:父類引用指向子類對象,調用重寫方法執行子類邏輯。

八、設計原則總結

  1. 單一職責 (SRP):一個類/方法只做一件事
  2. 開閉原則 (OCP):對擴展開放,對修改關閉
  3. 里氏替換 (LSP):子類能替換父類不破壞業務
  4. 接口隔離 (ISP):多個專用接口優於單一臃腫接口
  5. 依賴倒置 (DIP):依賴抽象不依賴具體
  6. 組合優於繼承:Has-a 靈活、低耦合;Is-a 嚴格、強耦合
  7. 面向接口編程:隱藏實現、解耦、可測試

讀書心法:《Java 編程思想》不僅教語法,更教「思維」。用可樂、皇帝、套餐等生活隱喻建立模型:
對象 = 服務提供者
接口 = 契約
封裝 = 隱藏複雜度
繼承 = 分類體系(慎用)
組合 = 靈活拼裝(多用)
多態 = 統一接口、多樣實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved