提高代碼質量的重要手段:將細節隱藏起來


「信息隱藏」在軟件開發領域中是一個非常重要的核心要點, 它的另一個名稱叫做「封裝」, 但是因為現代面向對象技術流行的原因, 「封裝」似乎已被視為和private是等價的, 這就導致了封裝的含意並不那么准確了, 事實上它的使用范圍在代碼的編寫中無處不在, private只是封裝的其中一項用途而已。 因為封裝一詞已經被誤用太久,所以使用「信息隱藏」能更簡單的闡述清楚這個概念,這能避免受對「封裝」先入為主的錯誤理解的影響。


信息隱藏, 顧名思義就是將信息給隱藏起來。 信息是什么? 在編程語言中, 信息包括變量、常量、語句、函數、類等等一切組成代碼的元素, 信息隱藏的意義就是在高級別的代碼元素層面上對低級別的代碼元素進行隱藏。 比如說

函數的作用就是將變量、語句等最低級的代碼元素給包裹起來, 使之對於函數外部不可見, 對於函數的調用者來說,他只需知道函數的作用, 而無需了解函數內部的實現細節, 這樣才能將問題簡單化, 這便是函數的信息隱藏的能力。

類的作用就是將private成員給包裹起來,使之對於類外部不可見,這就是類的信息隱藏功能,而類的信息隱藏能力就是為大眾所知的封裝功能。 在面向對象編程語言中還有一項protected的訪問修飾級別, 它也能起到信息隱藏的作用, 只是能力相對較弱, 因為當類成員啟用protected訪問修飾以后, 對於類外部雖然起到隱藏的作用, 但是對於繼承它的子類而言,是沒有信息隱藏的能力的。 因此我們在編寫類的時候, 能使用private就不要使用protected, 能使用protected的就不要使用public,以此來最大限度的保證類的信息隱藏能力。 public是完全公開的, 沒任何隱藏的能力,因此能不使用盡量不使用。 從理論上來說, 一個完美的類的所有成員都應該是private的,但是這樣的類的是無法正常使用, 然而,在寫代碼的時候我們應該讓自己編寫的類無限趨向於這種方式,以最大限度獲得信息隱藏能力。

信息隱藏能帶來什么好處呢?其實最主要的核心作用就一點:降低軟件開發的復雜性, 使問題盡量簡單化。 復雜的代碼項目是程序員的惡夢, 許多兢兢業業的前沿科學工作都無時無刻不在想方設法發明或者發現各種降低軟件代碼復雜性的工具和方法, 信息隱藏就是一項經過實踐並已被證明是行之有效的工具。 這個道理其實很簡單, 就拿世界上最好的語言php實現發送http請求來說明信息隱藏能將問題簡單化的能力。 php發送http請求一般有兩種方式, 一種是使用curl庫,另一種是使用file_get_contents函數,使用curl勢必要寫許多代碼來實現完整的發送http請求的功能, 如下圖

這便是沒有經過信息隱藏(封裝)的代碼示例, 它復雜且難以使用,以這種方式發送http請求肯定會導致功能實現的效率降低, 出錯的機率增加。

而以file_get_content方式發送請求則要簡單許多,一行代碼就可以搞定

$response = file_get_content($url);

足夠高效,足夠簡單, 因為所有發送請求的具體細節都被封裝(隱藏)在這個函數里面, 函數的調用者只需要知道如何使用這個函數就可以了。 當然, 這只是一個簡單到不能再簡單的示例,可能無法足夠的深刻說明信息隱藏的威力。但是以小觀大, 在寫程序時, 信息隱藏無時無刻不伴隨着我們, 我們在使用各種類庫、框架、組件等都是信息隱藏的范例, 我們平時經常提及「底層」這個術語,它一般表示高難度、復雜、功能強大,但是使用效率低等特點,因為它從某種角度顯現出來的都是未經過信息隱藏的細節內容。而那些在「底層」的基礎上進行信息隱藏(封裝)的框架或者庫, 使用簡單且高效,所以在現代軟件開發中往往會使用各種框架來進行軟件的開發,脫離框架編寫原生代碼的情形非常罕見, 這便是信息隱藏價值的體現了。

因此,在編寫代碼的時候要時不時的問下自己:“我還需要隱藏些什么嗎?”, 只要能做到這點,寫出來的代碼的質量將會有長足的進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM