首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 基礎深度講解:面向物件程式設計思想(一)——世界、論調與物件的本質

     編輯:C++ 入門

面向物件不只是語法糖,而是一種**程式設計思想**。本文從「世界」、「論調」、「物件」三大核心概念切入,建立正確的 OOP 認知框架。

編程思想:如何描述方法

同一目標(去人民公園),不同描述(地標導航 vs 道路名導航) → 不同程式碼結構。好的編程思想產出條理分明、可維護代碼;壞的產出晦澀難懂代碼。本系列核心主張:**一切按語義編寫**——代碼在人類世界中的意義。

世界:規則的集合

  • 客觀世界:力學定律、能量守恆……
  • 遊戲世界:怪物移動、碰撞判定、掉落機率……
  • 童話世界:白雪公主吃毒蘋果中毒、魔鏡回答問題……
  • **世界 = 規則集合**。演算法建立在特定世界規則之上,換個世界可能失效。

論調:世界的描述 = 程式設計的核心

「商人過河」問題,兩種論調:

  1. 商人僕人論: 定義「商人」「僕人」兩名詞概念,各有「位置」狀態、「坐船」功能,「商人被殺」為動詞概念。
  2. 河岸論: 僅定義「河岸」一名詞概念,屬性「商人數」「僕人數」,動詞概念「坐船」「商人被殺」。

**河岸論更優**:名詞概念越少,架構越簡單(種類越少複雜度越低)。**設計程式 = 設計論調**。

物件:名詞性概念的實例

  • 物件 = 實例。商人僕人論中 3 商人 + 3 僕人 = 6 物件。
  • 屬性 vs 狀態: 桌子顏色(屬性,主要讀、運作期不變)vs 人臉色(狀態,主要寫、運作期變化)。同為成員變數,語義截然不同。
  • 無狀態物件: 無成員變數的類(如 struct Search { virtual int search(int*,int,int); }),邏輯大小為 0,編譯器配 1 byte 保證位址唯一。STL 函數物件即此模式。
  • 物件與實例概念上微異:物件可為抽象概念實現(無狀態),實例必須具體存在。

從函數到類:語義升級

搜尋功能需三參數:條件、容器、排序方法。傳函數指標語義為「引用」,不精確。映射為無狀態類 Search,語義為「搜尋功能這一抽象概念的實例」,支援多態(BSearch : Search)、策略替換,這就是面向物件的威力。

核心洞見

**面向物件不是把所有東西變成類**,而是:
1. 識別領域中的「名詞性概念」→ 類
2. 識別「動詞性概念」→ 傾向函數,必要時封裝為包裝類
3. 以「論調」為藍圖設計架構,而非演算法細節
4. 代碼表達領域語義,而非機器指令序列

下一篇將深入剖析「封裝」的真實含義與常見誤區。

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