???
++++++++++++++
第九章:?系統(tǒng)構架
++++++++++++++
182.一個系統(tǒng)可以(在重大的系統(tǒng)中也確實如此)同時出多種不同的構架類型.?以不同的
方式檢查同一系統(tǒng)|分析系統(tǒng)的不同部分|或使用不同級
別的分解,?都有可能發(fā)現(xiàn)不同的構架類型.
183.協(xié)同式的應用程序,?或者需要協(xié)同訪問共享信息或資源的半自治進程,?一般會采用
集中式儲存庫構架.
184.黑板系統(tǒng)使用集中式的儲存庫,?存儲非結(jié)構化的鍵/值對,?作為大量不同代碼元件之
間的通信集線器.
185.當處理過程可以建模|設計和實現(xiàn)成一系列的數(shù)據(jù)變換時,?常常會使用數(shù)據(jù)流(或管
道—過濾器)構架.
186.在批量進行自動數(shù)據(jù)處理的環(huán)境中,?經(jīng)常會采用數(shù)據(jù)流構架,?在對數(shù)據(jù)工具提供大
量支持的平臺上尤其如此.
187.數(shù)據(jù)流構架的一個明顯征兆是:?程序中使用臨時文件或流水線(pipeline)在不同進
程間進行通信.
188.使用圖示來建模面向?qū)ο髽嫾苤蓄惖年P系.
189.可以將源代碼輸入到建模工具中,?逆向推導出系統(tǒng)的構架.
190.擁有大量同級子系統(tǒng)的系統(tǒng),?常常按照分層構架進行組織.
191.分層構架一般通過堆疊擁有標準化接口的軟件組件來實現(xiàn).
192.系統(tǒng)中每個層可以將下面的層看作抽象實體,?并且(只要該層滿足它的需求說明)不
關心上面的層如何使用它.
193.層的接口既可以是支持特定概念的互補函數(shù)族,?也可以是一系列支持同一抽象接口
不同底層實現(xiàn)的可互換函數(shù).
194.用C語言實現(xiàn)的系統(tǒng),?常常用函數(shù)指針的數(shù)組,?表達層接口的多路復用操作.
195.用面向?qū)ο蟮恼Z言實現(xiàn)的系統(tǒng),?使用虛方法調(diào)用直接表達對層接口的多嘴復用操作
.
196.系統(tǒng)可以使用不同的|獨特的層次分解模型跨各種坐標軸進行組織.
197.使用程序切片技術,?可以將程序中的數(shù)據(jù)和控制之間依賴關系集中到一起.
198.在并發(fā)系統(tǒng)中,?一個單獨的系統(tǒng)組件起到集中式管理器的作用,?負責啟動|停止和協(xié)
調(diào)其他系統(tǒng)進程和任務的執(zhí)行.
199.許多現(xiàn)實的系統(tǒng)都會博采眾家之長.?當處理此類系統(tǒng)時,?不要徒勞地尋找無所不包
的構架圖;?應該將不同構架風格作為獨立但相關的實體
來進行定位|識別并了解.
200.狀態(tài)變遷圖常常有助于理清狀態(tài)機的動作.
201.在處理大量的代碼時,?了解將代碼分解成單獨單元的機制極為重要.
202.大多數(shù)情況下,?模塊的物理邊界是單個文件|組織到一個目錄中的多個文件或擁有統(tǒng)
一前綴的文件的集合.
203.C中的模塊,?由提供模塊公開接口的頭文件和提供對應實現(xiàn)的源文件組成.
204.對象的構造函數(shù)經(jīng)常用來分配與對象相關的資源,?并初始化對象的狀態(tài).?函數(shù)一般
用來釋放對象在生命期中占用的資源.
205.對象方法經(jīng)常使用類字段來存儲控制所有方法運作的數(shù)據(jù)(比如查找表或字典)或維
護類運作的狀態(tài)信息(例如,?賦給每個對象一個標識符的
計數(shù)器).
206.在設計良好的類中,?所有的字段都應在聲明為private,?并用公開的訪問方法提供對
它們的訪問.
207.在遇到friend聲明時,?要停下來分析一下,?看看繞過類封裝在設計上的理由.
208.可以有節(jié)制地用運算符增強特定類的可用性,?但用運算符重載,?將類實現(xiàn)為擁有內(nèi)
建算術類型相關的全部功能的類實體,?是不恰當?shù)?
209.泛型實現(xiàn)不是在編譯期間通過宏替換或語言所支持的功能(比如C++模板和Ada的泛型
包)來實現(xiàn),?就是在運行期間通過使用數(shù)據(jù)元素的指針
和函數(shù)的指針|或?qū)ο蟮亩鄳B(tài)性實現(xiàn).
210.抽象數(shù)據(jù)類型經(jīng)常用來封裝常用的數(shù)據(jù)組織方案(比如樹|列表或棧),?或者對用戶隱
藏數(shù)據(jù)類型的實現(xiàn)細節(jié).
211.使用庫的目的多種多樣:?重用源代碼或目標代碼,?組織模塊集合,?組織和優(yōu)化編譯
過程,?或是用來實現(xiàn)應用程序各種特性的按需載入.
212.大型的|分布式的系統(tǒng)經(jīng)常實現(xiàn)為許多互相協(xié)作的進程.
213.對于基于文本的數(shù)據(jù)儲存庫,?可以通過瀏覽存儲在其中的數(shù)據(jù),?破譯出它的結(jié)構.
214.可以通過查詢數(shù)據(jù)字典中的表,?或使用數(shù)據(jù)庫專有的SQL命令,?比如show?table,?來
分析關系型數(shù)據(jù)庫的模式.
215.識別出重用的構架元素后,?可以查找其最初的描述,?了解正確地使用這種構架的方
式,?以及可能出現(xiàn)的誤用.
216.要詳細分析建立在某種框架之上的應用程序,?行動的最佳路線就是從研究框架自身
開始.
217.在閱讀向?qū)傻拇a時,?不要期望太高,?否則您會感到失望.
218.學習幾個基本的設計模式之后,?您會發(fā)現(xiàn),?您查看代碼構架的方式會發(fā)生改變:?您
的視野和詞匯將會擴展到能夠識別和描述許多通用的形
式.
219.頻繁使用的一些模式,?但并不顯式地指出它們的名稱,?這是由于構架性設計的重用
經(jīng)常先于模式的形成.
220.請試著按照底層模式來理解構架,?即使代碼中并沒有明確地提及模式.
221.大多數(shù)解釋器都遵循類似的處理構架,?圍繞一個狀態(tài)機進行構建,?狀態(tài)機的操作依
賴于解釋器的當前狀態(tài)|程序指令和程序狀態(tài).
222.多數(shù)情況下,?參考構架只是為應用程序域指定一種概念性的結(jié)構,?具體的實現(xiàn)并非
必須遵照這種結(jié)構.