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