Posted on 2005-11-14 15:37
canonical 閱讀(330)
評論(0) 編輯 收藏 所屬分類:
設計理論
全局變量在現(xiàn)代程序設計中可謂是臭名昭著。函數之間通過全局變量形成隱蔽的couple, 其聯(lián)系難以追蹤,難以控制,也使得程序的意圖變得非常隱晦。但從另一方面說,隱蔽的關聯(lián)也意味著兩個函數的關聯(lián)沒有被固化,可以隨時根據需要做出調整。例如,
funcA(varA,varB,varC);
funcB(varA,varB,varC,varD);
funcC(varA);
funcD(varA,varB,varC,varD);
在以上程序中,funcA將調用funcB,但是funcB需要一個特殊的參數varD。我們可以選擇在funcA的參數列表中增加這一參數,但這樣 funcA的定義就破壞了它本身的意圖:它包含了一些具體的與自身意圖無關的實現(xiàn)細節(jié)。一旦funcB的實現(xiàn)改變,例如它不再需要varD, 或者需要更多的參數, 則funcA需要隨之進行調整。
實際上在程序中我們可以通過兩兩關系進行參數接力,也可以采用中心化的方式,即各個函數都從環(huán)境(公共變量區(qū))中取得所需參數。面向對象是一種折衷的解決方案:對象的成員函數之間通過成員變量形成隱蔽的依賴,但是這種依賴又不會擴散到對象之外。最理想的情況下,我們可以采用無參數的函數調用,函數名揭示出我們的意圖而不用考慮交互的細節(jié)。在寫偽代碼的時候,經??梢园l(fā)現(xiàn)我們實際定義并使用的參量要遠少于最終實現(xiàn)所用到的參量。如果我們要實現(xiàn)偽代碼方式的程序書寫,那么在變量生存空間上還要做出比面向對象更加靈活,更加精細的控制。