面向對象和面向過程其實并沒有本質的區別。試想,對于面向過程的程序看作一個大的對象,那么全局變量就是屬性,全局函數就是方法。只不過這個系統只有一個類。
面向對象是什么?這個話題說起來比較長,要追溯到計算機最初的產生。
最開始圖靈用“心內求法”的方式,在思想中構建出了計算機的理論模型——圖靈機。簡單地說,圖靈機是這樣一個“輸入-輸出系統”:輸入數據,根據預先編制的程序,改變機器內部的狀態,并產生輸出。這里面,使得圖靈機具有計算能力的關鍵就是程序,根據需要編制不同的程序,似乎就賦予了圖靈機“無限”的計算能力。
后來,馮.諾伊曼用電路實現了圖靈機,就是電子計算機。用寄存器處理輸入輸出,用CPU執行指令進行計算。馮.諾伊曼認識到對于復雜數據的輸入輸出需要研究數據結構,對于復雜的數據處理需要研究算法。所以提出程序=數據結構+算法。他老人家的這個觀點是非常正確的,畢竟計算機是他發明的,原理他最清楚。這也是由計算機的物質基礎決定的。
剛開始的時候,人們沒期望計算機能干那么多事情,所以按照計算機的“思維”,使用機器語言編寫程序告訴計算機該做什么。后來覺得計算機其實很能干,只是跟他說話有點費盡,于是發明了一層層的“翻譯程序”,使用越來越接近自然語言的方式編寫程序。經過了機器語言-匯編語言-高級語言這么一個過程。
最開始的高級語言是面向過程的,后來才發展到面向對象。其實在我看來,面向對象與面向過程并沒有本質的區別。試想,如果我們把面向過程的程序看作一個大的對象,那么全局變量就是屬性,全局函數就是方法。只不過這個程序只有一個類,但是整個程序也可以算做是面向對象的。
說了這么多,到底想說什么呢?就是,面向對象其實也沒有多“高深”,面向對象的很多原理和面向過程是非常接近的。而且,面向對象編程最基本的原理仍沒有超出數據結構和算法。但是,面向對象是其后面向組件,面向服務,面向方面等一系列方法的基礎,而且面向對象有其特有的思考問題的方式,即以對象為基礎分析和解決問題。這就引出了下一個問題:什么是面向對象的思考問題的方式?
本人的最新博客遷移到http://thinkinside.tk,使用GitHub Pages建立。我會陸續將所寫的文章遷移過去,并進行補充和修正,
歡迎過來圍觀。