「信息隱藏」在軟件開發(fā)領(lǐng)域中是一個非常重要的核心要點(diǎn), 它的另一個名稱叫做「封裝」, 但是因?yàn)楝F(xiàn)代面向?qū)ο蠹夹g(shù)流行的原因, 「封裝」似乎已被視為和private是等價的, 這就導(dǎo)致了封裝的含意并不那么準(zhǔn)確了, 事實(shí)上它的使用范圍在代碼的編寫中無處不在, private只是封裝的其中一項(xiàng)用途而已。 因?yàn)榉庋b一詞已經(jīng)被誤用太久,所以使用「信息隱藏」能更簡單的闡述清楚這個概念,這能避免受對「封裝」先入為主的錯誤理解的影響。
信息隱藏, 顧名思義就是將信息給隱藏起來。 信息是什么? 在編程語言中, 信息包括變量、常量、語句、函數(shù)、類等等一切組成代碼的元素, 信息隱藏的意義就是在高級別的代碼元素層面上對低級別的代碼元素進(jìn)行隱藏。 比如說
函數(shù)的作用就是將變量、語句等最低級的代碼元素給包裹起來, 使之對于函數(shù)外部不可見, 對于函數(shù)的調(diào)用者來說,他只需知道函數(shù)的作用, 而無需了解函數(shù)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié), 這樣才能將問題簡單化, 這便是函數(shù)的信息隱藏的能力。
類的作用就是將private成員給包裹起來,使之對于類外部不可見,這就是類的信息隱藏功能,而類的信息隱藏能力就是為大眾所知的封裝功能。 在面向?qū)ο缶幊陶Z言中還有一項(xiàng)protected的訪問修飾級別, 它也能起到信息隱藏的作用, 只是能力相對較弱, 因?yàn)楫?dāng)類成員啟用protected訪問修飾以后, 對于類外部雖然起到隱藏的作用, 但是對于繼承它的子類而言,是沒有信息隱藏的能力的。 因此我們在編寫類的時候, 能使用private就不要使用protected, 能使用protected的就不要使用public,以此來最大限度的保證類的信息隱藏能力。 public是完全公開的, 沒任何隱藏的能力,因此能不使用盡量不使用。 從理論上來說, 一個完美的類的所有成員都應(yīng)該是private的,但是這樣的類的是無法正常使用, 然而,在寫代碼的時候我們應(yīng)該讓自己編寫的類無限趨向于這種方式,以最大限度獲得信息隱藏能力。
信息隱藏能帶來什么好處呢?其實(shí)最主要的核心作用就一點(diǎn):降低軟件開發(fā)的復(fù)雜性, 使問題盡量簡單化。 復(fù)雜的代碼項(xiàng)目是程序員的惡夢, 許多兢兢業(yè)業(yè)的前沿科學(xué)工作都無時無刻不在想方設(shè)法發(fā)明或者發(fā)現(xiàn)各種降低軟件代碼復(fù)雜性的工具和方法, 信息隱藏就是一項(xiàng)經(jīng)過實(shí)踐并已被證明是行之有效的工具。 這個道理其實(shí)很簡單, 就拿世界上最好的語言php實(shí)現(xiàn)發(fā)送http請求來說明信息隱藏能將問題簡單化的能力。 php發(fā)送http請求一般有兩種方式, 一種是使用curl庫,另一種是使用file_get_contents函數(shù),使用curl勢必要寫許多代碼來實(shí)現(xiàn)完整的發(fā)送http請求的功能, 如下圖
這便是沒有經(jīng)過信息隱藏(封裝)的代碼示例, 它復(fù)雜且難以使用,以這種方式發(fā)送http請求肯定會導(dǎo)致功能實(shí)現(xiàn)的效率降低, 出錯的機(jī)率增加。
而以file_get_content方式發(fā)送請求則要簡單許多,一行代碼就可以搞定
$response = file_get_content($url);
足夠高效,足夠簡單, 因?yàn)樗邪l(fā)送請求的具體細(xì)節(jié)都被封裝(