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