新聞中心
復(fù)用可以說是任何一個軟件企業(yè)都不能漠視的課題,因為復(fù)用可能對軟件的開發(fā)效能產(chǎn)生絕大影響,而開發(fā)效能直接影響利潤,甚至生存。

創(chuàng)新互聯(lián)建站是專業(yè)的尚志網(wǎng)站建設(shè)公司,尚志接單;提供成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行尚志網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
但復(fù)用本身將增加當(dāng)前項目的成本,是一種以當(dāng)前投入來換取遠期收益的行為。與此同時遠非所有代碼都可以復(fù)用,復(fù)用本身也有自己內(nèi)在的一些規(guī)律,讓我們來試做一些分析。
從結(jié)論上來說,只有滿足下面兩條原則的程序,才可能真正的被復(fù)用,否則的話只能采用代碼級別的復(fù)用。
***條原則是,程序本身的職能非常獨立與業(yè)務(wù)層面基本無關(guān)聯(lián),是功能型的模塊(包)。
代碼中的邏輯表述的是一種關(guān)聯(lián)性,當(dāng)這種關(guān)聯(lián)只在確定的方面存在的時候,通常我們可以切割出比較獨立的模塊,而這種模塊可以成為復(fù)用的基礎(chǔ)之一。這也就是常說的【閉包】。
這種復(fù)用有許多表現(xiàn)形式,但其本質(zhì)相同。
比如JPEG的庫,XML的庫,比如我們常提到的組件或控件。
在這類復(fù)用中扮演關(guān)鍵角色的是一組接口,以及這組接口的基本使用規(guī)則。
REP(重用發(fā)布等價原則),CRP(共同重用原則)中提到的重用都是這類重用。
第二條原則是,程序本身所描述的過程足夠抽象,同具體實現(xiàn)細節(jié)可以切的很開。
概念在衍化的過程中其內(nèi)含的細節(jié)會逐漸豐富,但又會共享某些共同的基本特征。很多時候邏輯要處理的是這種根本特征,而非細節(jié)。在這個時候,就需要抽象。
好比人可以分為男人和女人,也可以分為老人,青年人和小孩。但因為同屬于人這一范疇,所以不管如何分類,必有共通之處。也正因此,某些針對【人】的規(guī)則或者價值標(biāo)準(zhǔn)是可以通用于所有人的,即是可以復(fù)用的。比如說法律。大多時候,我們不需要指定分別針對于男人,女人的法律
這種類型的復(fù)用不是很好理解,我們用迭代器的例子來進行進一步的說明。
當(dāng)我們想遍歷一個容器的時候,從【頭到尾的循環(huán)】和【逐個遍歷】是屬于任何容器的,而同具體的容器無關(guān)。但如何從***個元素,遍歷到第二個元素則和容器的具體實現(xiàn)有關(guān)。把這種和具體實現(xiàn)細節(jié)無關(guān)的邏輯提取出來的過程,也即抽象的過程。只有能做到這種程度抽象,非獨立的功能性的代碼才可能真正的做到被重用。
《設(shè)計模式》這本書有個副標(biāo)題,叫《可復(fù)用面向?qū)ο筌浖幕A(chǔ)》?;A(chǔ)這個詞的意指與上述說明相同。
由第二條原則而產(chǎn)生的復(fù)用的形式可以是,設(shè)計模式與框架。歷史上的MFC的文檔視圖結(jié)構(gòu)就是一個典型代表。
一個比較典型的是近來很受關(guān)注的Map-Reduce的函數(shù)式編程方法,據(jù)說這種方法在Google被用來支持并行計算。--參見《軟件隨想錄》
假設(shè)說某一功能的主要部分已經(jīng)實現(xiàn),比如排序。這時候已經(jīng)實現(xiàn)的部分是既定算法,可能是選擇排序,也可能是插入排序。但對于排序而言,對兩個數(shù)值進行比較的部分則依賴于被比較的對象,需要被靈活指定。這也就意味著重用排序的實現(xiàn),等于實現(xiàn)兩段代碼的對接,實現(xiàn)一部分代碼,但另一部分則由用的人在使用的時候指定。
這種方法可以更好的支持并行計算的原因在于,他可以把實現(xiàn)中的可優(yōu)化部分分割開來。對于查詢而言,如何遍歷所有數(shù)據(jù)是可以并行優(yōu)化的。
如果上述兩條原則都無法滿足,那么為了達到提升效能的目的,就需要做以實現(xiàn)為基礎(chǔ)的代碼級別的復(fù)用,即完全不做抽象,直接復(fù)用代碼片段---也許這反倒是應(yīng)用的最為廣泛的復(fù)用方法。
很多人恐怕已經(jīng)習(xí)慣了解決某個具體問題前,先到codeproject.com或者codeguru.com上確認一下有沒有參考代碼。如果不論這種方法的諸多缺點,比如:版權(quán)問題,引起代碼風(fēng)格混亂等等,這種方法的現(xiàn)實意義仍是比較巨大。其正面意義可以體現(xiàn)為下面幾個方面:
可執(zhí)行的代碼片段可以清楚的告訴我們類庫API等等的具體用法,進而縮短我們掌握領(lǐng)域知識的時間。在具體項目中使用某種語言,完全從零開始來完成某項工作的機會非常***,我們更多的時候要依賴于某些通用的領(lǐng)域知識。而通過幫助文檔來學(xué)習(xí)類庫等的使用方法效率相對低下,而這種可執(zhí)行的片段代碼則精準(zhǔn),且具體的描述了類庫等的某一使用方法,使程序員可以更快上手。
可執(zhí)行的代碼片段可以是高質(zhì)量的。如果我們承認代碼的質(zhì)量是要持續(xù)提高,那么這類代碼片段,無疑的可以擁有比剛剛寫成的代碼更高的質(zhì)量。因此這類代碼對生產(chǎn)率的貢獻還不僅只與提高編碼速度。
如果真的想在組織中使用這種復(fù)用方法的話,一個關(guān)鍵點是要控制可執(zhí)行代碼片段的規(guī)模。
當(dāng)前文章:代碼復(fù)用的幾點思考
文章出自:http://www.dlmjj.cn/article/djiseep.html


咨詢
建站咨詢
