## 連載:面向對象葵花寶典:思想、技巧與實踐(3) - 面向過程 vs 面向對象
**面向過程**
在介紹面向對象之前,我們首先要介紹“面向過程“,首先是因為”面向過程“是軟件思想中的鼻祖;其次是因為只有了解了面向過程,你才能更好的了解面向對象!正所謂:知己知彼百戰百勝!?
面向過程是一種以“過程”作為中心的編程思想,其中過程的含義就是“完成一件事情的步驟”。?
面向過程其實是一種“機械的思想”,它就像流水線一樣,一個階段銜接一個階段,每個階段都有自己的輸入、處理、輸出,而在流水線上流動的就是我們的原料或者中間產品,每個階段都有一個機械進行處理,最后的輸出就是我們的產品。
?在運用面向過程的方法時,你也需要設計這樣一條程序流水線:將程序劃分為不同的階段,設計好各個階段如何銜接,然后定義好每個階段需要處理的數據。?
但凡學過編程的都知道這么一個說法:程序=算法?+?數據結構,這個總結其實正好契合了機械化的特征,“算法”=“流水線”,“數據結構”=?“原料/中間產品”,“程序”=?“產品”。?
面向過程的這種特征其實是和計算機的本質相關的,計算機本質上是一臺機器,其核心-CPU處理的是指令流水,簡單點說就是01串,要讓計算機跑起來,按照CPU的特點進行思考和處理是理所當然的。?
即使我們使用面向對象的語言進行開發,最后轉換為CPU能執行的指令,還是面向過程的,所以說,面向過程無處不在,是計算機的基石。?
如下圖片是啤酒生產線的全流程圖,形象的說明了面向過程的處理方式:

**面向對象**
面向對象是一種以“對象”作為中心的編程思想,其中對象的含義可以理解為“存在的東西”。?
與面向過程的方法相比,面向對象不再局限于計算機的機器本質,而更加側重于對現實世界的模擬。面向過程的方法中,有一套設計嚴格的操作順序,有一個類似中央控制器的角色來進行統一調度;而面向對象的方法中,并沒有明確的中央控制的角色,也不需要指定嚴格的操作順序,而是設計了很多對象,并且指定了這些對象需要完成的任務,以及這些對象如何對外界的刺激做出反應。
如果說面向過程像一條流水生產線,那么面向對象就像是一個足球隊。沒有哪個人能夠在一場比賽開始的時候,就精確指定每個隊員的每一次跑動,每一次出腳,每一次傳球。。。。。。而只能指定隊員的角色(前鋒、中場、后衛、門將),然后由隊員門自己根據情況做出反應。所以世界上有兩個一樣的生產線,但絕對不會存在兩場一模一樣的比賽。?
面向對象這種對現實世界的模擬的思想,其本質上就是“人的思想”,這是一個質的飛躍,意味著程序員可以按照人的思想來觀察、分析、設計系統。?
什么叫做“人的思想”?你可以放下書本,關上電腦,站起來,環顧四周,你看到的是什么?可能是你的同事、桌子、墻、電腦、花盆;或者是電話、窗子、書本。。。。。。怎么樣,這些都是“對象”吧?除了觀察目標聚焦于“對象”外,當我們觀察人類世界各種事情的運作的時候,我們也不知不覺的聚焦于“對象”。例如,一個公司的運作,由董事長、經理、主管、員工等人分工合作,根據不同的任務或者外界競爭而去做各種各樣的事情。?
人大部分的時間都是按照面向對象的方式進行思考的,而且人類世界主要也是按照面向對象的方式進行運轉的,所以說,“面向對象”其實更加符合人的思維習慣。?
面向過程中有“程序=算法+數據結構”的經典總結,面向對象也有類似的總結:“程序=對象?+?交互”。其中對象就是具體存在的事物,而交互則是事物之間的相互作用、互動等。?
如下是一張醫院的組織結構圖,形象的說明了面向對象的處理方式:

- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版