淺談計算機(jī)信息隱蔽性設(shè)計
摘要:包含在計算機(jī)模塊內(nèi)的信息對于無需這些信.g-的其他模塊是不可存取的,即將不需要的信息都隱藏起來,只允許其他模塊知道其本身所需的信息。這樣可以使問題求解簡單化,從而達(dá)到好理解、好實現(xiàn)、好驗證、好重用的目標(biāo)。它可以從整體上保證計算機(jī)軟件的質(zhì)量,降低計算機(jī)軟件的開發(fā)和維護(hù)成本。
關(guān)鍵詞:隱蔽原則;抽象原則;關(guān)系;對象;黑盒
有關(guān)計算機(jī)軟件工程的隱蔽原則一般是這樣描述的:包含在模塊內(nèi)的信息對于無需這些信息的其他模塊是不可存取的,即將不需要的信息都隱藏起來,只允許其他模塊知道其本身所需的信息。
如果說最簡單的就是最好的,那么計算機(jī)信息隱蔽性最強(qiáng)的就是最簡單的。從方法學(xué)的總結(jié)到推廣,從軟件設(shè)計到軟件實現(xiàn),從手工開發(fā)到工具輔助,信息隱蔽原則無時無處不發(fā)揮著極有效的指導(dǎo)作用。
l 計算機(jī)隱蔽原則與其他原則的統(tǒng)一
1.1 方法學(xué)都基于軟件工程基本原則
基本原則是行為所依據(jù)的法則和規(guī)范。無論什么方法學(xué)從知識工程角度來說,都是運(yùn)用軟件工程方法學(xué)基本原則的規(guī)則、策略及工具的集合。其中抽象原則是最重要的,它給出軟件工程問題求解全過程的最基本原則,其他原則是對抽象原則的補(bǔ)充。
指導(dǎo)如何抽象的基本原則大體上可以分為體系規(guī)范原則和模塊規(guī)范原則兩類。前者是規(guī)范整體解題思路及解得驗證,包括形式化原則、分割原則、層次原則、概念完整性原則、完備性原則;后者則是與子問題有關(guān)的原則,包括隱蔽原則、局部化原則、邏輯獨(dú)立性原則。面向?qū)ο蟮?ldquo;關(guān)系”抽象較多受前者規(guī)范,“對象”抽象較多受后者規(guī)范。
1.2 基本原則間的相互關(guān)聯(lián)
雖然可以做“體系規(guī)范”和“模塊規(guī)范”的大體分類,但基本原則之間并不是無關(guān)的,而是整體與局部間的相互制約,形成一個統(tǒng)一體。
要求將信息最大限度地隱蔽在計算機(jī)模塊內(nèi)的隱蔽原則,使模塊內(nèi)部信息封裝化、模塊的外部形象黑盒化,與外部的關(guān)系最少,所以使?jié)M足體系抽象原則的抽象過程和驗證工作簡單化,同時也很容易滿足模塊規(guī)范的其他原則,如局部化原則和邏輯獨(dú)立性原則。
例如將具有多重關(guān)聯(lián)的多個數(shù)據(jù)庫表的條件組合查詢,
由一個駐在服務(wù)器端的存儲過程來統(tǒng)一完成??蛻舳擞脩艨梢栽谕粋€窗口上對數(shù)十項多層交叉的查詢條件任意選擇組合,將選定條件送給相應(yīng)存儲過程。從外部來看,存儲過程的任務(wù)極為單純,即根據(jù)指定條件找出所有符合條件的記錄,將結(jié)果寫到一個有共享結(jié)構(gòu)的工作表中,然后把查詢正常與否的消息通報給客戶端的調(diào)用程序。該程序接到正常查詢結(jié)束消息后,到指定暫時存放查詢結(jié)果的工作表中,按一定格式取出結(jié)果并報告給用戶。
我認(rèn)為,這是一個全面符合軟件工程基本原則的設(shè)計典范,而其關(guān)鍵技術(shù)是信息隱蔽設(shè)計。首先是遵循隱蔽原則將具有復(fù)雜關(guān)系結(jié)構(gòu)的多個數(shù)據(jù)庫表的操作和庫表結(jié)構(gòu)封裝在一起,實現(xiàn)了完全的信息隱蔽。由于高度信息隱蔽的實現(xiàn)使這一組相關(guān)庫表的所有多層交叉組合結(jié)構(gòu)有可能在一個對象中完成,高度滿足了局部化原則。由于它的功能單純、明確,數(shù)據(jù)庫表間接口通過對相應(yīng)存儲過程傳遞參數(shù)來完成,屬于內(nèi)聚性最強(qiáng)的功能內(nèi)聚和耦合性最弱的數(shù)據(jù)耦合,因而具有很好的邏輯獨(dú)立性。
不難想象,幾十項查詢條件的組合,查詢結(jié)果顯示方式達(dá)三四十種是很正常的。由于在局部化、功能獨(dú)立化原則下應(yīng)用對象只是抽象成一個超類窗口對象,在信息隱蔽設(shè)計支持下,這三四十種結(jié)果顯示功能可以全部相互獨(dú)立地掛在查詢父窗口下,自然地滿足了分割原則、層次原則、概念完整性原則等體系規(guī)范原則。
2 信息隱蔽性設(shè)計的目的和優(yōu)越性
2.1 目的
探討信息隱蔽性設(shè)計的目的是:分析將信息隱蔽起來有什么好處,以便使問題求解簡單化。
2.1.1 好理解
一般的復(fù)雜問題有兩個特征,一是解題要參照的接口太多、太復(fù)雜,二是解題的方法太復(fù)雜。那么要想使之簡化,無非是從問題接口和問題解法上人手。將復(fù)雜的接口信息與復(fù)雜算法隱蔽起來,剩下的自然是簡單的。換句話說就是實現(xiàn)對象的外部數(shù)據(jù)結(jié)構(gòu)與算法的封裝。
需要知道的東西越少越好理解。在軟件工程中,理解是最繁重的工作之一。開發(fā)過程中從分析人員對用戶需求的理解,到設(shè)計人員對需求規(guī)格的理解,直至編程人員對軟件設(shè)計的理解,是一個理解傳遞的過程。每一級開發(fā)人員的目的都應(yīng)是將經(jīng)過自己加工后的、更簡單的抽象結(jié)果更抽象、更好理解。因此好的設(shè)計人員就是經(jīng)其加工后傳給下級開發(fā)人員的設(shè)計最容易理解,即給出的問題定義越簡單、接口越少越好。
2.1.2 好實現(xiàn)
有時好理解卻不好實現(xiàn),即實現(xiàn)算法復(fù)雜。但是,如果把復(fù)雜算法做成一個封裝的模塊對象,使實現(xiàn)者只需知道模塊的作用和使用方法就可以得到所期待的輸出結(jié)果,而無須知道模塊內(nèi)部的具體實現(xiàn),因此實現(xiàn)的問題就可以得到簡化。
2.1.3 好驗證
復(fù)雜問題也不好驗證。有些設(shè)計看起來好理解,也不難實現(xiàn),但驗證起來卻很難。例如如果設(shè)計了相當(dāng)多的功能熱鍵用戶接口。對于輸入數(shù)據(jù)窗口和數(shù)據(jù)項較多的應(yīng)用程序,測試起來十分困難。多個功能熱鍵、多種激活方式、多個輸入數(shù)據(jù)窗口和數(shù)據(jù)項之間前后控制跳轉(zhuǎn),這些都是黑盒測試的出發(fā)點(diǎn),而每個控制節(jié)點(diǎn)都以2以上的指數(shù)方式遞增著測試用例數(shù)目。即使一般復(fù)雜的應(yīng)用,其測試用例也超過200類。
由于采用了這種多控制、多轉(zhuǎn)移的復(fù)雜輸入方式設(shè)計,算法復(fù)雜是不可避免的。簡化的辦法還是信息隱蔽性設(shè)計,將每個熱鍵的多種激活方式觸發(fā)的內(nèi)部處理都寫成公共對象且封裝起來,供各應(yīng)用程序繼承調(diào)用。顯然這種隱蔽技術(shù)直接簡化了理解和實現(xiàn)。由于公共父類對象已經(jīng)做過全面集中測試,下層程序繼承后的有關(guān)測試絕大部分可以“免檢”,所以間接簡化了驗證,達(dá)到“好驗證”的目的。
2.1.4 好重用
好驗證的設(shè)計方法是把算法復(fù)雜的對象泛化為超類對象,進(jìn)行集中實現(xiàn)和集中測試,使多個下層子類共享父類的實現(xiàn)和測試,所以它也是一種重用方案。好重用往往是好理解、好實現(xiàn)、好驗證的必然結(jié)果。不過它是從更高層次上審視信息隱蔽性的目的。
2.2 優(yōu)越性
由于信息隱蔽性設(shè)計重用性高,因此可以大大降低開發(fā)和維護(hù)成本。具體可以從兩方面來看其優(yōu)越性。
1)由于將復(fù)雜內(nèi)容都隱蔽到公共超類之中,可以集中優(yōu)勢兵力對公共超類對象統(tǒng)一進(jìn)行設(shè)計攻關(guān)、設(shè)計優(yōu)化和代碼優(yōu)化及測試和修改,所以不僅利于保證設(shè)計和實現(xiàn)的正確性,而且利于提高可維護(hù)性、保證數(shù)據(jù)安全性??傊?,有利于從整體上保證軟件的基本質(zhì)量,降低維護(hù)成本。
2)由于簡化了編程難度,避免了重復(fù)勞動,降低了對程序員技術(shù)經(jīng)驗水平的要求,減少了設(shè)計說明和理解交流及編輯的工作量,因而利于減少開發(fā)成本。
倘若前述的軟件設(shè)計不是采用信息隱蔽性設(shè)計,倘若我們只有對復(fù)雜的庫表結(jié)構(gòu)了如指掌之后才能進(jìn)行多層交叉組合查詢程序的實現(xiàn),這不僅將需要許多時間理解庫表結(jié)構(gòu),還需要構(gòu)筑同樣的數(shù)據(jù)庫,錄入能體現(xiàn)復(fù)雜數(shù)據(jù)關(guān)系的各種測試數(shù)據(jù)。由于數(shù)據(jù)關(guān)系映射著應(yīng)用對象的關(guān)系,為此我們還必須了解滿足各種組合查詢的數(shù)據(jù)與應(yīng)用業(yè)務(wù)處理間的對應(yīng)關(guān)系,因為稍有理解偏差,取出的用于統(tǒng)計的數(shù)據(jù)就會全面失去意義。所以信息隱蔽性設(shè)計對于大型軟件開發(fā),特別是分式的異地開發(fā),是不可或缺的。
實際上,前述軟件設(shè)計提供給我們的是與復(fù)雜數(shù)據(jù)庫結(jié)構(gòu)封裝在一起的組合查詢存儲過程,只是一個樁程序。在我們開發(fā)客戶端組合查詢程序時,它完全是個黑盒子,甚至沒有放到服務(wù)器端。但是,它使得組合查詢程序只剩下輸入數(shù)據(jù)檢驗這一單純功能了。
3 信息隱蔽性設(shè)計的基本思路與實踐
信息隱蔽是個原則而不是方法,按此原則設(shè)計的系統(tǒng)具有信息隱蔽性,這是設(shè)計優(yōu)化的一種表現(xiàn)。結(jié)構(gòu)化方法和面向?qū)ο蠓椒ǘ甲非笮畔㈦[蔽性,并且各自具有一套抽象與實現(xiàn)的思路與方法。在此,我們嘗試歸納一下不拘泥于方法學(xué)的有關(guān)設(shè)計思路與方法。
3.1 哪些場合應(yīng)考慮隱蔽性設(shè)計
總的來說,凡是可以用信息隱蔽性設(shè)計、使復(fù)雜問題簡單化的場合,都應(yīng)該采用此設(shè)計。
首先,可以對共同事件、共同處理采用隱蔽性設(shè)計。因為重復(fù)是問題復(fù)雜化的一個重要原因。例如“輸入數(shù)據(jù)檢驗”、“退出事件”、“打開事件”、“打印處理”、“熱鍵的轉(zhuǎn)移控制”、“系統(tǒng)信息輸出處理”等,甚至對打印報表的“制表時間與頁號編輯”功能的共同處理。
其次,可以對接口和環(huán)境采用隱蔽性設(shè)計。因為接口也是問題復(fù)雜化的重要原因之一。例如,可將靜態(tài)數(shù)據(jù)庫表及其查詢操作隱蔽起來,將復(fù)雜關(guān)系表及其存取操作隱蔽起來,甚至可以將所有數(shù)據(jù)庫都隱蔽起來,使低級開發(fā)人員根本不必意識數(shù)據(jù)庫的存在,以及將特殊輸入輸出裝置接口處理隱蔽起來,將與其他系統(tǒng)的接口處理隱蔽起來等。
此外,還可以把復(fù)雜的算法、概念隱蔽起來,也可以把用戶沒有權(quán)限的功能隱蔽起來,以保證數(shù)據(jù)的安全性。
3.2 信息隱蔽的實現(xiàn)方法 .
我們可以把實現(xiàn)信息隱蔽的物理范圍稱為隱蔽黑盒。信息隱蔽實現(xiàn)方法實際上就是隱蔽黑盒的實現(xiàn)方法與調(diào)用方法。隱蔽黑盒一般可以用函數(shù)、存儲過程、超類對象、語句系列來實現(xiàn)。使用隱蔽黑盒時,可以用函數(shù)、存儲過程調(diào)用、祖先繼承及程序段復(fù)制等相應(yīng)辦法來引用。
3.2.1 服務(wù)器端的隱蔽黑盒設(shè)計技術(shù)
我們使用觸發(fā)器來實現(xiàn)對一些數(shù)據(jù)庫超類表(如流水號表)或共同表操作(如表頭信息寫操作)的盒化。觸發(fā)器是通過將實現(xiàn)方法與調(diào)用方法封裝在一起,把調(diào)用方法也隱蔽起來,是最徹底的隱蔽黑盒。這除了使復(fù)雜問題簡單化以外,還有利于數(shù)據(jù)庫的安全。因為再嚴(yán)密的客戶端操作也無法完全排除網(wǎng)絡(luò)帶來的不安全因素的影響。而隨著網(wǎng)絡(luò)支持性價比的提高,把數(shù)據(jù)庫相關(guān)操作集中在服務(wù)器端,客戶端只負(fù)責(zé)輸入數(shù)據(jù)的正確性檢查和結(jié)果數(shù)據(jù)的處理,這顯然是一種既講效率又能保證數(shù)據(jù)庫數(shù)據(jù)安全體系結(jié)構(gòu)的方法,是“胖服務(wù)器瘦客戶機(jī)”發(fā)展方向的必然取舍。
3.2.2 靜態(tài)表的隱蔽黑盒設(shè)計
從信息隱蔽的角度看程序中分離出去的靜態(tài)表,對程序來說也是一個隱蔽黑盒,它實現(xiàn)了程序中存在變因的控制數(shù)據(jù)或開關(guān)數(shù)據(jù)對程序的隱蔽(隔離)。靜態(tài)表放在服務(wù)器端,便于共享和維護(hù)。同時,我們用邏輯控制靜態(tài)表解決了面向不同應(yīng)用對象動態(tài)組合應(yīng)用功能這個難題,把沒有權(quán)限的那一部分功能對用戶隱蔽了起來。
總之,隱藏黑盒就是重用單元,重用單元越多軟件開發(fā)越簡單,與數(shù)據(jù)庫有關(guān)的隱蔽黑盒放在服務(wù)器端要比放在客戶端好處更多,因此隱藏黑盒有著廣闊的重用前景。
參考文獻(xiàn)
[1] 沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計(第二版)[M].北京:清華大學(xué)出版社,2001.9.
[2] 張世和.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2000.12.
[3] 葉忠杰.計算機(jī)網(wǎng)絡(luò)安全技術(shù)(第二版)[M].北京:科學(xué)出版社。2004.9.