面向?qū)ο蠛兔嫦蜻^程其實并沒有本質(zhì)的區(qū)別。試想,對于面向過程的程序看作一個大的對象,那么全局變量就是屬性,全局函數(shù)就是方法。只不過這個系統(tǒng)只有一個類。
面向?qū)ο笫鞘裁矗窟@個話題說起來比較長,要追溯到計算機最初的產(chǎn)生。
最開始圖靈用“心內(nèi)求法”的方式,在思想中構(gòu)建出了計算機的理論模型——圖靈機。簡單地說,圖靈機是這樣一個“輸入-輸出系統(tǒng)”:輸入數(shù)據(jù),根據(jù)預(yù)先編制的程序,改變機器內(nèi)部的狀態(tài),并產(chǎn)生輸出。這里面,使得圖靈機具有計算能力的關(guān)鍵就是程序,根據(jù)需要編制不同的程序,似乎就賦予了圖靈機“無限”的計算能力。
后來,馮.諾伊曼用電路實現(xiàn)了圖靈機,就是電子計算機。用寄存器處理輸入輸出,用CPU執(zhí)行指令進行計算。馮.諾伊曼認識到對于復(fù)雜數(shù)據(jù)的輸入輸出需要研究數(shù)據(jù)結(jié)構(gòu),對于復(fù)雜的數(shù)據(jù)處理需要研究算法。所以提出程序=數(shù)據(jù)結(jié)構(gòu)+算法。他老人家的這個觀點是非常正確的,畢竟計算機是他發(fā)明的,原理他最清楚。這也是由計算機的物質(zhì)基礎(chǔ)決定的。
剛開始的時候,人們沒期望計算機能干那么多事情,所以按照計算機的“思維”,使用機器語言編寫程序告訴計算機該做什么。后來覺得計算機其實很能干,只是跟他說話有點費盡,于是發(fā)明了一層層的“翻譯程序”,使用越來越接近自然語言的方式編寫程序。經(jīng)過了機器語言-匯編語言-高級語言這么一個過程。
最開始的高級語言是面向過程的,后來才發(fā)展到面向?qū)ο蟆F鋵嵲谖铱磥恚嫦驅(qū)ο笈c面向過程并沒有本質(zhì)的區(qū)別。試想,如果我們把面向過程的程序看作一個大的對象,那么全局變量就是屬性,全局函數(shù)就是方法。只不過這個程序只有一個類,但是整個程序也可以算做是面向?qū)ο蟮摹?
說了這么多,到底想說什么呢?就是,面向?qū)ο笃鋵嵰矝]有多“高深”,面向?qū)ο蟮暮芏嘣砗兔嫦蜻^程是非常接近的。而且,面向?qū)ο缶幊套罨镜脑砣詻]有超出數(shù)據(jù)結(jié)構(gòu)和算法。但是,面向?qū)ο笫瞧浜竺嫦蚪M件,面向服務(wù),面向方面等一系列方法的基礎(chǔ),而且面向?qū)ο笥衅涮赜械乃伎紗栴}的方式,即以對象為基礎(chǔ)分析和解決問題。這就引出了下一個問題:什么是面向?qū)ο蟮乃伎紗栴}的方式?
本人的最新博客遷移到http://thinkinside.tk,使用GitHub Pages建立。
我會陸續(xù)將所寫的文章遷移過去,并進行補充和修正,
歡迎過來圍觀。