《抽象是一种美》
《抽象是一種美》
計算機編程語言的每一次進化,都是一種抽象。
?
從最初的面向與非門和數字電路的開關,到基于一種中央處理器架構的匯編語言,這是一種巨大的進步,計算機從此進入可編程時代。
?
再到后來高級語言的發明,更進一步的抽象了硬件,編程者甚至不用考慮硬件問題,從此軟件和硬件有了分界線,高級語言的發明帶來了軟件革命,隨著軟件工業發展,越來越多,越來越大型的軟件工程的發展,面向過程的編程語言的基于流程和邏輯的思想和本色已經不能滿足這種復雜性和生產性的要求。
?
這時候出現了新的編程語言機制,她實現了更進一步的抽象,把過程和邏輯封裝起來,讓他們之間通過合理的設計模式進行溝通,這就是面向對象的編程思想。有了面向對象,“軟件工程”這四個字才有了實質性的意義。
?
但是由于良好的設計模式的實現需要豐富的設計經驗和高超的設計技巧,一般人往往容易陷入其耦合與解耦的泥潭,而不能自拔,于是就有人提出組件化的編程思想,即把各個對象或對象的組合封裝成一個組件,組件之間通過合理的接口進行溝通。就像汽車的零部件一樣,產品是由組件組裝而成,這是更進一步的抽象。Microsoft的COM就是基于這一思想構建的。
?
至此,我們有了軟件工程,有了組件工廠,似乎我們的軟件工業已經很完美了,但其實不然,我們解決了工程的問題,但是還存在工藝的問題:
1.?組件內部的設計仍然具有相當的復雜性
2.?組件之間的接口設計仍然需要考驗設計者的經驗和能力
如果說前面這兩個問題無法避免,他必然依賴人,也就是有良好技能和經驗的設計者和編程者得話,那么下面這個問題,恐怕就不容易通過經驗和能力來解決,或者說他更應該有編程語言本身來提供:
3.?如何讓一個組件做到通用化,他可以適用于不同的軟件架構和目標產品,而不是只是適用于特定的目標產品。
別小看這個問題。
面向對象編程的核心思想就是把編程的標的抽象成一個有行為有屬性的對象,但是這也很容易讓設計者把對象具象化,也就是說你本來是要把做的東西抽象出來,但是在使用OOD或者OOP的過程中,有自然而然的把它具象化了,注意,這是自然而然的。這樣帶來的結果就是:具象化的對象和組件是不具有完整意義的組件的,因為他們往往針對特定的產品和架構的環境而設計,脫離了特定的環境,他是無用的,那么也就失去了組件化的意義。
?
解決這個矛盾的新的編程思想被引入:那就是泛型編程的思想,泛型編程很自然的解決了這個問題,不僅如此,他還帶了抽象的思維方式的轉變。這種轉變,或許已經是進入哲學范疇:世間萬物,皆可抽象。或者用《老子》的第一篇來說:
無,名天地之始;有,名萬物之母。故常無,欲以觀其妙;常有,欲以觀其徼。此兩者同出而異名,同謂之玄,玄之又玄,眾妙之門。
?
我則簡單的認為:?抽象,是一種美!
總結
- 上一篇: 看博客学学Android(五)
- 下一篇: Expert Shell Scripti