按照技術由概念到原型再到產品的5--5--5規則,面向對象技術現在已經走向成熟,是時候該考慮OO以后是什么了。在這個還沒有出現新技術標準的時期,每個人都有權力去思考,以下就是我關于OO以后的思考。
OO之后是什么呢?我認為是FO--Function Oriented(面向職能)。這里的Function不同于我們在當前編程所用的函數Function。這里的Function指職能模塊。所謂職能模塊,是指可獨立完成特定任務,而對無力完成的任務可自行找到具備完成該任務功能的其它職能模塊,并與之建立聯系以合力完成工作的功能體。
在闡述我的理由之前,先來看一看我們經歷了什么。我們首先經歷了PO--面向過程,然后是OO--面向對象。為什么會是這樣一個過程呢?因為它是一個由具體變得越來越抽象的過程。人為了更輕松的解決問題,總是希望盡可能抽象的描述問題、解決問題,過于具體有時候會使人感到很痛苦。在面向過程中,我們的方法是“先做什么,再做什么,最后做什么”,這就好像一個成年人做事的方法,他知道每一步該干什么,它按那個步驟去干。在面向對象中,我們的方法是“不管對象是怎么實現的,我們只需知道它可以干什么,怎么讓它去干”,這就像一個孩子的做事方法,他不知道那個東西是怎么來的,他只知道那個東西可以用來干什么以及利用它去干他想干的事。管它板凳是怎么做的呢?它可以拿來坐就行啦!更小的孩子是怎么做的呢?他們甚至還不知道板凳可以拿來坐。很簡單,“媽咪,我要……”管他媽媽要去干什么或要請誰幫忙干什么呢?反正媽媽會把一切辦好,媽媽是萬能的。
再來看一看我們的工業生產。一開始是手工作坊,一個人從頭做到尾,一步一步地做,就好像OP。然后是機器化大生產,各臺機器在那造著不同的零件,然后將它們組裝到一塊;造零件的只知道一個零件單獨的作用,但不知道它到底是用到自行車上還是飛機上;組裝的則不用知道零件是從哪來的,是誰做的;這就好像是OO?,F在的模式是什么呢?公司接到生意,再將生意分散委托給別人做;需要法律顧問,到律師樓請律師;需要企劃,找公共關系公司;需要做廣告,找廣告公司;生產找專門的制造公司;自己公司需要做的就是接到生意,干自己公司可以干的,將干不了和自己干效益不高的部分交給專門的公司干。
職能模塊就是“媽媽”,就是現在的公司。它干自己可以干的任務;對于干不了的,它知道到那可以找到能干這個任務的模塊,并與之協作共同完成工作。顧客將問題交給軟件人員,軟件人員完成包含職能模塊A的程序并將之提交給顧客。顧客使用該程序解決問題,模塊A完成它能完成的部分,不能完成的部分由A自動去尋找可以完成剩余部分的B、C、D,B、C、D又可以去尋找E、F、G、H……再一級一級反饋回到A,由A組裝成結果提交給顧客。
以上是通過其它領域的情況推出OO以后是FO的,那么在我們的計算機領域有些什么來支持這種想法呢?大家知道,在計算機領域關于程序有過三個公式:
1、程序=數據結構+算法
2、程序=邏輯+控制
3、程序={對象1,對象2,……,對象n} 對象=數據結構+方法
第一個公式是FO時代提出的,第三個公式是OO時代提出的??梢钥闯龅谌齻€公式中關于對象的定義與第一個公式中程序的定義的相似性。事實上對象和以前的程序的確很相似,它所缺乏的就是程序的控制結構,因此不論是框架編程還是控件編程,都需由程序員來完成控制結構?,F在我們可以想象,數據結構和方法相結合產生對象,下一步干什么呢?當然是將控制結合進去。這就是我們的職能模塊,結合了控制的、自動的、智能的模塊。
大家知道,不久前Microsoft公布了其“.net”計劃。它以后的產品將在本地機上實現基本的功能,而更高端的功能將由程序向Microsoft的服務器提出請求,由服務器來完成。這雖然是由客戶端軟件向固定地址提出請求,不是由模塊自身完成且缺乏智能性,但是我們仍然可以將其看作是FO的一種很原始很原始的雛形。
實現FO需要什么呢?需要高速智能網絡、智能接口、分布式技術、并行技術,最重要的是需要一個國際化的管理機構。
為什么需要這些呢?很顯然,面向職能是基于全球性的Internet的,這就必然用到分布式技術。大家知道,分布式技術最大的問題就是網絡上大量信息的傳輸,這需要一個高速的Internet。信息在網絡上消耗了時間,用并行技術可彌補回來,以空間換時間。職能模塊要求自己去尋找可幫助其完成任務的其它模塊,當前的網絡辦不到這一點,這需要的是一個智能網絡。模塊A需要其它模塊與之協作時,要將其要求提出并發消息到網絡上的模塊搜索器,模塊搜索器將找到一到多個具有所要求功能的模塊,模塊A要找到最符合自己要求的模塊B,并按B的接口要求發送B所要求的信息;與此同時,B要能很好的描述自己的功能,很確切的提出自己的要求,并能從A發送來的消息中提取自己需要的信息,這就要求智能模塊擁有智能接口。智能模塊的標準的定義、大量模塊的登記、模塊信息的組織、模塊使用的協調等等都需要一個國際化的組織來進行管理。
我們現在又有什么來支持這些呢?提到分布式計算,當然會想到CORBA。事實上,CORBA和我們這職能模塊的工作方式是很相似的。使用職能模塊,在模塊完成不了工作時,通過網絡向其它模塊求助。CORBA應用程序也是通過向Smart Agent發送消息,再通過smart agent找到相應的CORBA對象來完成工作。但CORBA對象的接口是如此的確定,大量的控制工作仍是由程序員完成。職能模塊的接口是模糊的、智能化的,一切控制由模塊自己去完成。尋找模塊必須通過高速智能網絡。高速現在已越來越不成為問題了。而智能化,由CISCO公司提出的基于DEN的智能網絡解決方案讓人看到解決問題的曙光。最麻煩的是智能接口,這需要極端先進的人工智能技術。人工神經元網絡也許是解決問題的途徑,但一切離徹底解決問題還太遙遠。
當一切都解決時,我們桌面上的應用程序將變得如此的簡單,如此的相似。它們擁有不同的界面,但它們所做的事情都一樣:接受命令,聯系模塊搜索器,將一切具體的工作都交給模塊供應商提供的職能模塊去干吧!
在機器能理解自然語言的時候,用語言命令計算機工作的時代自然也就到來了!