標籤:辛星 軟體工業 軟體 思想 面向
之前我也走不出語言的圈子,感覺語言對於軟體開發上如此重要,不過一個軟體並不應該是依賴生產它的語言,真正讓這個軟體閃光的是軟體本身,並不是生產這個軟體的語言。
軟體工業的革新速度是絕對的速度和效率,先後出現了N種思想不斷的衝擊著軟體工業,那麼我們來看看吧,好吧,我承認可能我寫的不全,因為這也是我隨手寫寫,並未經過深思熟慮。
第一種思想就是“語言“這種思想,這種思想太重要了,我感覺從0和1到組合語言是相當大的一個突破,它開始產生了“語言”的概念,雖然這種所謂的語言只是一個記號,只是單純的翻譯,但是它卻給出了一種在人和電腦之間進行溝通的方案,我們既可以看得清,也可以讓電腦可以得到運行。
第二種思想就是結構化編程的思想,通俗的理解為面向過程也是可以的,這種思想是如此的重要,以至於現在大多數語言都支援sp,沒錯,我承認很多時候麵線過程更加符合人類的思維習慣,我應該先做什麼,後做什麼,而不是我們一開始就想到分為一個個的類,然後去設計這些類。
第三種思想就是物件導向的思想,這個思想真的是徹底顛覆了整個行業界,現在主流程式設計語言大都會支援物件導向,雖然具體實現方式上有很大的不同,但是不可否認的是:物件導向思想是如此的有用。物件導向比面向過程添加了一個東西,因為我們面向過程的時候只是簡單的封裝了功能,但是並未封裝資料,但是物件導向同時封裝了資料,這就使得它的封裝性更深。
從這個角度來說,面向過程可以看作是物件導向的一個特例,也就是說如果一個類沒有屬性,而且只有一個方法,也就是退化為這種簡單形式的時候,物件導向和面向過程是一回事。當然,從數學上這一點太好理解了,前者是後者的簡單情形,所以說後者功能更加強大。
第四種思想就是面向組件的思想,這種思想提供了封裝了特定功能的組件。每個組件就像一個個的小應用程式,但是它們就像整個軟體的零件一樣可以被自由的拆卸,我想任何一個使用過MFC、Qt等這些介面編程的都有拖動“控制項”的經曆,這些控制項的使用是如此的方便,它們的封裝也是如此的深。當然,組件並不等價於控制項,在介面編程上就表現為控制項了,在web開發中也有很多組件的例子。
我感覺面向組件編程相對於物件導向並未有質的飛躍,更多的說是一種補充,它把多個對象組織起來,並且添加了一些內部的規則,而且獨立性更強,但是它還是基於物件導向的,而這些內部的規則還可以是通過物件導向來實現的,因此,我感覺它並未有本質性飛躍,但是這種思想的提出依然是非常不錯的進步。
第五種思想就是面向服務的思想,他通常是將軟體設計成一組可以互相操作電費服務的一套原則或者方法論。當我們在考慮系統構架的時候通常才會考慮SOA。它更加重視規範,而且越來越弱化語言的作用,也就是說,一種語言可以很輕鬆調用另一種語言實現的服務。它更加重視資料的傳遞,因為各個服務之間靠什麼進行交流?沒錯,資料。而且很多資料都是跨語言的,比如xml、json等等,這些跨語言的資料使得我們的面向服務更加簡單。
我感覺面向服務相對於物件導向也並不算質的飛躍,它們是兩種思考方式,面向服務是從構架的角度去考慮的問題,而物件導向自始至終是從編程的角度去考慮問題,也就是說,面向服務真正去實現起來,還是通過物件導向或者面向結構的,也就是說,它並不是從編程的角度去思考問題的,而是從設計的角度去思考問題的。
其實還有很多其他的概念,但是這些概念的提出究竟是創始人的一廂情願,還是會席捲整個軟體工業呢?我不知道,對於其他的思想我就不介紹了,不是我感覺不好,而是我感覺這些都是比較主流的思想。簡單來說,物件導向和面向過程都是從編程的角度去做的,它們直接給出了咱們的程式碼群組合去寫,並且有相應的文法規範。但是面向服務和面向組件更多的是從設計的角度去思考問題的,也就是說,真正的落實到代碼的編寫上,通常還是需要依賴於物件導向和面向過程。
而且面向服務和面向組件通常可以跨語言,這就和物件導向、面向過程產生了本質區別,物件導向的思想是跨語言的,但是每個語言都會有自己的實現方式,它們之間的差別也不容忽視,因為隨時都會有暗礁告訴我們語言之間的不同有時候還是蠻深的。
我是辛星,上面只是淺顯的一點分析,說的不對的地方,笑一笑也就過去了。
辛星漫談軟體思想