如何編寫高質量的代碼

一、提高代碼的重用性

代碼的重用性可以通過兩個方面的實現:函數級封裝與對象級封裝

1、函數級的封裝

重用性不但體現在對對象的封裝,對於重複性的業務無關的代碼進行一層或多層的函數級封裝,可以降低實現過程的複雜性。

進行函數級封裝的特徵:該過程具有簡單的過程性,即只有一條線,無相關的分支或多個入口。

層次:即在編寫函數時需要注重所寫的函數的應用寬度,即有必要考慮先寫通用功能函數,然後編寫相關性功能函數,通用函數可能可以運用於其他方面的代碼,而功能相關性函數,即私有函數則可以使當前的應用具有簡單性,即保證了複用性,又保證了簡單性。

2、對象級的封裝

對象級封裝能夠做到更安全、更完整的封裝,隱蔽不相關的處理分支,使上層調用只感覺到對象的原子特徵。

對象級封裝的特徵:對象作用具有持久性、可能存在多入口或多出口、存在諸多關聯特性、業務無關性等特徵。

二、代碼的一致性

內部一致性:在實現封裝時,不管是函數級封裝,還是對象級封裝,都必須講究一致的格調,比如說對單元格的調用時使用先行後列的入口參數,則不應該出現先列後行的入口參數的封裝形式。

上下一致性:對於繼續的私有級封裝,更應該注意上下級之間的一致性,不應該讓老虎生出一隻貓來,那是應該杜絕的。同時又得保證父類的接口函義不被變更(特殊情況特殊考慮)。

三、代碼的完整性

對象的封裝必須提供完整的接口,在保證內部對象私有化的前提下,如何確保對內部對象的訪問與操作,就必須提供完整的接口支持,對部份數據提供成對接口,如內部屬性對象,提供GetSet接口。

附加:提供完整的錯誤處理機制,由於這個方面並不是所有組件或對象都必須的,但在需要時只體現爲更爲重要。

四、接口的人性化

人性化主要體現有事務處理與參數調用等幾個方面,做到內部可以實現就不要在外部實現,提供儘可能多的默認參數,也就是說從外部來看,對象是有生命的。如對象創建時需要分配一系列的內存,就不必要在創建對象時要求使用者額外地調用對象的某一接口;對象在銷燬時需要釋放內存等工作更應該由對象自身考慮(避免內存泄漏等更爲嚴重的問題)

充分利用對象的多態性,使用調用者體會使用的簡單性,如對一個打包對象,我們可以用一個接口實現對多種類型的數據進行打包,即在接口命名上不再體現打包數據的結構或特徵等。

接口命名的人性化,在命名時要考慮其含義的簡單性,調用者不需要關心的信息就不要表現出來,讓用戶只知道他所調用的只是一個對象,而並非是在調用多個對象。同時在接口應該體現接口的特徵信息,從而使調用者有從接口命名中得到調用的體會。

五、把握封裝的度

並不是封裝都是好事,我們必須把握一個封裝的限度,但最終可能會實現使用者所需要的相關組件,但實際封裝過程可能是一個倒(三角模式,即從最原始的多個組件進行二次封裝實現多個初級組件,依次後推,最終組件可能是由多個高級組件組成。即對每一個組件的封裝應考慮儘可能的簡單(複雜組件可能由多個邏輯概念上簡單的組件所組成,除非對於性能要求非常高有組件可能需要考慮多種因素)。一般情況下由簡單實現的模式的性能要高於直接用複雜實現的單一組件的性能要好。

有限性封裝的另一個作用或好處:每一次的實現都屬於簡單的封裝,邏輯也簡單,不容易出現大問題,容易擴充與維護等。

六、性質的唯一性

封裝不是大集會,儘量只體現相關方面的接口,其他需要的接口可以用其他組件裏完成,再由現組件去調用,儘量避免一個接口多個用度,導致爲了用一個方法而去創建一個大對象(捨本逐末)。

七、防止編碼變相

目前的編碼規範仍停留在變更命名及部份編碼規則,但大量規範仍侷限於程序員自己的編碼習慣。

1、要求程序員儘量減少對全局的使用

全局變量的使用主要是因爲容易使用程序在邏輯方面出現混亂,使程序形成一種網狀結構,難於進行狀態分析。即容易使程序無法進行問題分析與控制,程序可能失去安全性等危險。

對等情況,編寫一個對象(組件),內部定義大量的成員變量,其實對於對象中的成員函數來說,他們就是全局變量,成員變量多了,同樣可以使結構模糊,不易維護、控制、調試等。

2、要求程序員儘量減少或不使用GOTO語句

有相當一部份程序經常在對象之間進行數據傳遞,這裏並不是通過某種機制進行的,而是開放對象的成員權限進行直接數據獲得與設置。從而給內存泄漏提供了可乘之機,這與GOTO沒有兩樣。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

以上是自己多年來的編程經驗的總結,如有補充或新的想法,請給予批評與指教:[email protected]

 

Satchmo

2003425

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章