让我们一起来了解下代码复用法则

編寫代碼最重要壹條,是怎樣復用其他程序員的代碼和思路來解決問題。

 

       通過修改他人的代碼來解決復雜問題是種錯誤的做法,不僅成功的機率很低,就算成功也不會提供什麽經驗。按照這種方式進行編程,無法成長為壹名真正的程序員,在軟件開發領域,前景也是非常有限。

       壹旦問題達到了壹定規模,期望程序員從頭開發壹個解決方案不太現實,這會導致程序員大量時間浪費在低效率工作中,並且極大地依賴程序員精通各個方面的知識。另外,這種做法也容易導致程序充滿缺陷或難以維護。

良好的復用和不良的復用:

       良好的復用幫助我們編寫更好的程序,並且提高程序的編寫速度。不良的復用可能短時間內幫助我們借用其他程序員的思維,但最終會導致不良的開發。下面表格對它們之間的區別進行了總結。

       左邊壹列顯示了良好復用的屬性,右邊壹列顯示了不良復用的屬性。在考慮是否對代碼進行復用時,要考慮它很可能會產生左邊壹列的屬性還是右邊壹列的屬性。

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

表:良好的復用和不良的復用

值得註意的是,良好的復用和不良的復用之間的區別,並不是我們復用了什麽代碼或者我們怎樣復習它們,而是在於我們所借用的代碼和概念之間的關系。

按照編程的術語,良好的復用是指我們通過閱讀某個人對壹個基本概念的描述後編寫代碼或者利用自己以前所編寫的代碼。

……

可復用組件的 5 種類型

 

       知道了我們打算采用的復用類型之後,現在可以對代碼的不同復用方法進行分類了。

 

       在本文中,組件表示由壹位程序員所創建的、可以被其他人復用以幫助解決編程問題的任何東西。

 

       組件可以在任何地方出現,它可以是抽象的,也可以是具體的。它可以是壹個思路,也可以是壹段完整實現的代碼。如果我們把解決壹個編程問題看成是處理壹個手工項目,我們所學會的解決問題的技巧就像工具壹樣,而組件就像是專用的零件。下面的每種組件都是復用程序員的以前工作的不同方式。

1. 代碼塊 Code Block

 

       代碼塊就是將壹塊代碼從壹個程序清單復制到另壹個程序清單。按照更通俗的說法,我們可以稱為復制粘貼工作。這是最低級形式的組件用法,常常代表了不良的復用,會出現不良復用可能導致的所有問題。當然,如果被復制的代碼是自己所編寫的,那就不會有實際的危害,但最好還是把壹段現有的代碼包裝成為壹個類庫或其他結構,允許它以壹種更清晰和更容易維護的方式被復用。

 

2. 算法 Algorithm

 

       算法是壹種編程配方,它是完成壹個目標的特定方法,是以日常語言或流程圖的形式表達的。算法是壹種高級形式的復用,壹般具有良好的復用屬性。算法在本質上只是思路。

 

3. 模式 Pattern

 

       在編程中,模式(或設計模式)表示具有壹種特定編程技巧的模板,比如 singleton。這個概念與算法有關,但又存在區別。算法就像解決特定問題的配方,而模式是在特定的編程情況下所使用的基本技巧。模式所解決的問題壹般是在代碼本身的結構內部。

 

        和算法壹樣,模式也是高級形式的組件復用。

 

4. 抽象數據類型 Abstract Data Type

 

       抽象數據類型是由它的操作而不是由這些操作的實現方法所定義的類型。堆棧類型就是壹個很好的例子。抽象數據類型與模式的相似之處在於它們定義了操作的效果,但並沒有特別地定義這些操作的實現方式。但是,和算法壹樣,這些操作存在壹些眾所周知的實現技巧。

 

5. 庫 Library

 

       在編程中,庫表示壹些相關代碼片段的集合。庫壹般包含了已編譯形式的代碼以及所需的源代碼聲明。庫可以包含獨立的函數、類、類型聲明以及任何可以出現在代碼中的東西。在C++中,最顯而易見的例子就是標準庫。

 

       壹般而言,庫的使用是良好的代碼復用。代碼被包含在庫中,因為它提供了各種程序壹般需要使用的功能。庫的代碼可以幫助程序避免“重新發明輪子”。然而,作為程序開發人員,當我們使用庫代碼時,必須從中學到些什麽,而不是單純走捷徑。

創建可復用組件的方法

 

        組件非常有用,因此程序員應該盡可能地利用組件。

 

        優秀的程序員必須養成習慣向他的工具箱中不斷添加組件。

 

        對組件的收集可以通過兩種不同的方式進行:程序員可以明確分配時間學習新組件,把它作為壹項基本任務,或者可以搜索壹個組件來解決壹個特定的問題。我們把第壹種方法稱為探索式學習,把第二種方法稱為根據需要學習。

 

1. 探索式學習組件

 

       我們首先從壹個探索式學習的例子開始。假設我們想學習關於設計模式的更多知識,對於頻繁使用的設計模式,人們已經達成了廣泛的共識。因此我們能接觸大量的資源。

 

       通過簡單地查找壹些設計模式並對它們進行研究,我們就可以從中受益。如果實現了其中壹些模式,就可以得到更多的收獲。

 

       我們在典型的模式列表中可以找到的壹種模式叫策略。這是壹種思路,允許壹種算法(或算法的壹部分)在運行時才被選擇。在策略模式的最基本形式中,它允許更改函數或方法的操作方式,但不允許對……

由于附件上传及字数限制,部分图片、内容无法显示,全文详情请见:

http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000310&idx=3&sn=68a6a55368c83a0106c77e17f998d606#rd

欢迎大家一起交流。

扫描以下二维码,获取更多更精美文章!

关注我们微信订阅号( uniguytech100) 与服务号(uniguytech),获取更多更精美文章!

也欢迎加入【大家技术网讨论QQ群】,群号码:256175955,请备注你个人的介绍!让我们一起聊聊it的那些事!

转载于:https://my.oschina.net/uniguy/blog/673958

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值