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