面向对象软件开发代码结构(1)
類內(nèi)部結(jié)構(gòu)
類內(nèi)部架構(gòu)實際上是一個小型的狀態(tài)機,成員變量是狀態(tài)變量,成員函數(shù)是處理機。一般提倡一個類實現(xiàn)一種特定的功能,這樣可以降低實現(xiàn)的復(fù)雜性,狀態(tài)機越簡單,越利于實現(xiàn)。
實例間通信
軟件的功能是多個模塊共同協(xié)作來實現(xiàn)的。這就需要多個模塊的實例進行通信、相互調(diào)用。
相互調(diào)用和訪問對類或模塊來說,就是設(shè)計對外接口。這也是public、private關(guān)鍵字的設(shè)計思想。
對外接口數(shù)量越少,每個模塊間的耦合越少,代碼維護起來越簡單;反之,模塊間交互越多,耦合性越高,軟件維護難度越高。
對于開發(fā)人員來說,類或者模塊實例間的相互訪問,要求程序員控制好實例的可見性。如果控制不好,軟件后期的維護難度會增加。
實例可見性管理
實例可見性管理分為實例生命周期管理和實例訪問路徑管理兩個方面。
實例生命周期管理
每個實例都有生命周期,生命周期是軟件開發(fā)人員可以控制的。例如基本類型的變量只能存在于作用域內(nèi),超出作用域其保存的數(shù)據(jù)就會失效。實例也一樣,實例只有在生存期內(nèi)才可以被訪問。這是一切訪問的前提。
生命周期管理,即要求軟件開發(fā)人員正確分配實例存活時間。
- 如果實例存活時間太短,會導(dǎo)致找不到此實例,無法實現(xiàn)預(yù)期功能。
- 如果實例存活時間太長,會持續(xù)占用內(nèi)存等資源,造成資源利用率低。例如將所有實例采用全局變量保存,優(yōu)點是此實例在整個軟件運行時間,任何模塊都能訪問,缺點是這樣的軟件資源消耗會很嚴重。
實例訪問路徑管理
訪問途徑和實例的嵌套程度有關(guān)。
例如,全局實例、可全局訪問的單例、位于全局實例內(nèi)的實例(半全局)可以通過最多一次函數(shù)調(diào)用獲取到實例地址。而對于嵌套的類來說,嵌套的層數(shù)即獲取實例地址需要間接尋址或函數(shù)調(diào)用的次數(shù)。顯然,訪問路徑越簡單,需要編寫的代碼越少,開發(fā)和運行效率也越高。
所以最簡單的路徑還是全局的或半全局的,并且在軟件設(shè)計中,減少類嵌套,簡化訪問路徑。
例如,你現(xiàn)在參與一個已在開發(fā)中的項目后,為了添加一個需求,你需要訪問一些已有的實例數(shù)據(jù)。你可能會遇到暫時獲取不到目標(biāo)實例指針的問題,這就需要你自己添加獲取目標(biāo)實例指針的代碼,或者調(diào)整代碼結(jié)構(gòu),這無疑是不少的工作量。但是對客戶來說,明明窗口都在那擺著,直接一句話訪問不就行了嗎?而客戶卻不知道你為了修改一個功能,要考慮如何更好的管理實例生命周期。最后的結(jié)果是加班或者拖延項目進度。
從上面的例子可知,已有的代碼可以幫助你,也可以讓你發(fā)瘋。
實例可見性管理是會隨著需求的改變而需要動態(tài)調(diào)整的。例如有的變量本來只需要在內(nèi)部訪問,在需求改變后,需要在幾個模塊間共享,這就需要對其可見性進行修改。
正因為可見性管理是會隨需求改變而改變的,所以在實際開發(fā)中,可以將其生命周期設(shè)置得靈活一點,或者留有一些余量,以便于對未來的改變做較少的調(diào)整。
有一種比較松散的實例管理方式。每種實例設(shè)置一個全局的管理器,多個相關(guān)實例具有相同的id。根據(jù)其中一種數(shù)據(jù),查找相關(guān)數(shù)據(jù)時,只需要用同一個id去查找。一個實例銷毀,不影響其他實例,可以自由控制實例的生存時間。
量化
如果將實例的訪問管理交給軟件開發(fā)者管理,會增加軟件開發(fā)者的負擔(dān),同時也因為軟件開發(fā)者能力或項目預(yù)算等因素導(dǎo)致軟件的開發(fā)、維護工作量不穩(wěn)定,降低軟件質(zhì)量。
所以如果可以將實例的訪問管理進行量化,讓所有的需要交互的實例(即相對非內(nèi)部的實例或數(shù)據(jù))均為全局、半全局實例,在開發(fā)完成后進行自動優(yōu)化,及時釋放資源未被使用的資源,這就會減輕軟件開發(fā)者的負擔(dān),提高開發(fā)效率,最終有更多的時間去減少bug,優(yōu)化交互等等,從而提升軟件質(zhì)量。
總結(jié)
本文主要介紹了使用面向?qū)ο蟮姆椒ㄩ_發(fā)軟件時,程序中對象協(xié)作方式與實例管理相關(guān)內(nèi)容,為了寫出更好的軟件,可以參考上述內(nèi)容考慮代碼的組織結(jié)構(gòu)。
總結(jié)
以上是生活随笔為你收集整理的面向对象软件开发代码结构(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于来了!《电锯人》漫画第二部7月13日
- 下一篇: 【iOS开发】崩溃问题汇总