天天看點

《UML面向對象設計基礎》—第1章1.2節資訊/實作隐藏

本節書摘來自異步社群《uml面向對象設計基礎》一書中的第1章1.2節資訊/實作隐藏,作者【美】meliir page-jones,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

1.2 資訊/實作隐藏

uml面向對象設計基礎

你可以從對象的外部(“公共角度”)或對象的内部(“私有角度”)兩種不同的角度來看待封裝單元。好的封裝結果是對公共視角封閉大量的細節。這種封閉有兩種形式即資訊隐藏和實作隐藏。

術語“資訊隐藏”指不能被外界察覺的單元内的資訊。術語“實作隐藏”指不能被外界察覺的單元内的實作細節。

資訊/實作隐藏(information/implementation hiding)是使用封裝将某些資訊或實作方法限制在封裝結構内部,限制外部的可見性。

機器人對象包含一些外界無法通路的私有資訊,它說明資訊隐藏特性。例如,機器人所代表的方向,從該對象外部可以改變這一資訊(也許通過turnleft),但不能得到它的值,除非假設顯示該機器人本身并說明機器人鼻子的朝向。

然而,術語“資訊隐藏”隻說明好的封裝可以隐藏的部分。封裝通常提供資訊而隐藏實作方法。這點對面向對象是十分重要的:對象内部變量存儲的屬性資訊無需用與屬性本身一樣的方法實作,其他對象也可利用。

例如,盡管機器人對象(通過location操作)告訴我們它所處的位置,但我們卻不知道對象内部如何存儲它的位置。可能為(xcoord,ycoord)或(ycood,xcoord)或經緯度坐标或是設計者在半夜1點鐘想出的某個重要方法。隻要對象能以我們所能接受的方式輸出其位置,我們就不會關心它是如何存儲位置的。

是以,hominoid的方向既是資訊隐藏又是實作隐藏的例子。我們不知道對象中存儲的方向資訊是以數字角的方式(取值範圍從0°到359°),還是以單個字元(n、e、s及w)或是precentdirection ,表示機器人的朝向占整個圓的百分比(從0到99.999)。

在以後的再設計中,我們也許決定顯示方向資訊并提供将direction屬性輸出給其他對象的操作。即便如此,我們仍保留實作隐藏,因為仍不需知道對象内的實作是否與公共資訊的實作一樣。

例如,我們可能決定對象内部以字元形式儲存direction,然後經轉換以角的公共形式輸出。換言之,提供該屬性值的操作可以将特殊的内部表示轉換為大多數人希望看到的數字角的形式,與direction屬性一樣。

資訊/實作隐藏是降低軟體複雜性的有效技術。對外部觀察者而言,可以将對象看作一個黑箱子。換言之,即外部觀察者知道對象可以做什麼,而不知道對象如何做或對象内部是如何構造的。如圖1.5所示。

《UML面向對象設計基礎》—第1章1.2節資訊/實作隐藏

資訊/實作隐藏有兩個主要優點:

① 設計決策局部化。私有設計決策(在對象内)對系統的其餘部分影響很小或沒有影響。是以,這種局部決策的修改對整個系統影響最小。這樣限制了“修改波及”的影響。

② 其表示形式減弱了資訊的内容。是以,對象外部的資訊使用者不會受到任何特殊的内部資訊格式的困擾。這樣,對象的外部使用者(如其他程式員)就不用幹涉對象内部的事情,也防止無聊的程式員對對象引入不穩定的連接配接(我知道你不會幹這種事情,但你可能交叉運作我曾提到過的軟體庫)。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀