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

《瘋狂 Java 講義》第 2 章精華:面向對象核心思想與 UML 建模實戰

     編輯:Java 綜合教學

《瘋狂 Java 講義》第 2 章精華:面向對象核心思想與 UML 建模實戰

本章系統闡述從結構化程序設計到面向對象的思維轉變,深度解析封裝、繼承、多態三大特征,並引入 UML 統一建模語言作為溝通藍圖。以下為核心知識點提煉與實戰擴展。

1. 兩種思維的本質對決

維度結構化(面向過程)面向對象
核心單元函數/模塊類/對象
分解方式自頂向下,功能遞歸分解業務領域建模,對象職責分配
數據與行為分離:數據結構 + 操作函數封裝:成員變量 + 方法 = 類定義
擴展機制修改現有函數/增加函數繼承/組合/多態,開閉原則
認知負荷需理解全局調用鏈局部封裝,符合人類直覺

經典比喻:組裝電腦

  • 面向過程:採購二極管、電阻、晶體管 → 焊接電路板 → 組裝機箱
  • 面向對象:採購 CPU、主板、內存、硬盤 → 插槽組裝 → 開機
  • 對象粒度更大,復用度更高,維護成本更低

語言直觀性對比

// 面向過程:動詞居中,主賓語模糊
eat(豬八戒, 西瓜);

// 面向對象:名詞居中,主謂賓清晰
豬八戒.吃(西瓜); // 更接近自然語言

2. 面向對象三大特征深度解析

封裝:信息隱藏與契約承諾

  • 核心:將實現細節隱藏,暴露公共接口
  • 實現:private 字段 + public getter/setter + 參數校驗
  • 進階:不可變對象(final 字段、無 setter、構造器注入)、防御性拷貝
  • 意義:降低耦合、便於變更、保證不變約束

繼承:IS-A 關係與代碼復用

  • 語義:子類是父類的一種特殊形式(里氏替換原則)
  • 機制:獲得父類非 private 成員、可覆寫方法、可添加新成員
  • 陷阱:濫用繼承導致脆弱基類問題、層次過深難維護
  • 原則:優先組合,必要時繼承;最終類用 final 禁止繼承

多態:同一接口,多種實現

  • 三要素:繼承/實現 + 方法覆寫 + 父類引用指向子類對象
  • 靜態綁定:編譯期確定(private、static、final、構造器方法)
  • 動態綁定:運行期根據實際對象類型分派(虛方法表機制)
  • 應用:策略模式、模板方法、依賴倒置、插件架構

3. 類與對象:模板與實例

// 類 = 狀態數據(成員變量) + 行為(方法)
public class Person {
    // 狀態
    private String name;
    private int age;
    // 行為
    public void eat(String food) { ... }
    public void sleep() { ... }
}

// 對象 = 類的具體實例,佔據堆內存
Person p1 = new Person("張三", 25);
Person p2 = new Person("李四", 30);

關鍵區別

  • 類是抽象概念,不佔業務數據內存(僅元空間存類元數據)
  • 對象是具體實體,擁有唯一標識、獨立狀態、生命週期
  • new 關鍵字觸發:內存分配 → 默認初始化 → 構造器執行 → 返回引用

4. UML 統一建模語言:溝通的通用語言

核心圖表分類

類別圖表用途
結構圖類圖類、接口、關係(繼承、實現、關聯、依賴、聚合、組合)
對象圖運行時對象快照,驗證類圖正確性
組件圖物理組件依賴,架構設計
部署圖硬件節點與軟件分佈,運維視角
行為圖用例圖參與者與功能需求,需求分析
序列圖對象交互時間順序,業務流程
狀態圖對象生命週期狀態遷移
活動圖流程控制與數據流,業務邏輯

類圖關係強度排序

實現 < 依賴 < 關聯 < 聚合 < 組合 < 繼承
(弱)                                                    (強)
  • 依賴:方法參數、局部變量、靜態方法調用
  • 關聯:成員變量引用,雙向/單向、多重度
  • 聚合:整體-部分,部分可獨立存在(空心菱形)
  • 組合:整體-部分,部分不可獨立,生命週期綁定(實心菱形)
  • 繼承:泛化關係,IS-A(空心三角箭頭)
  • 實現:接口實現,虛線空心三角箭頭

5. Java 面向對象語法映射

概念Java 關鍵字/機制
類定義class、interface、enum、record (Java 14+)
封裝private/protected/public、getter/setter
繼承extends、super、final、@Override
多態向上轉型、動態分派、instanceof、模式匹配 (Java 16+)
抽象abstract class、interface、default/static 方法 (Java 8+)
對象創建new、工廠模式、構建者模式、反射、序列化反序列化
對象比較== (引用)、equals() (值)、比較器

6. 實戰設計原則(SOLID 前身)

  1. 單一職責:類只負責一個業務領域
  2. 開閉原則:對擴展開放,對修改關閉(多態實現)
  3. 里氏替換:子類必須能替換父類不破壞業務
  4. 接口隔離:接口細粒度,不強制依賴無用方法
  5. 依賴倒置:高層模塊依賴抽象,不依賴具體實現

「面向對象不是語法糖,而是一種建模思維。掌握封裝邊界、繼承契約、多態分派、UML 表達,才能駕馭複雜系統,寫出經得起變化的代碼。」

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