一、類隱藏的基本建議
雖然在JAVA語言中要實現類的隱藏非常簡單,只需要通過三個關鍵字即可以完成。但是在大部分情況下,讓JAVA程序員感到疑惑的是,在什么時候該把什么類隱藏。確實,在JAVA開發語言平臺中,對于什么類需要隱藏,什么類不需要隱藏,往往沒有很嚴格的要求。為此程序開發人員需要根據自己的工作經驗來進行判斷。而即使有一定程序開發經驗的員工,也不一定能夠在這個問題上給出很好的答案。公說公有理,婆說婆有理,為此很難有一個統一的標準。筆者下面幾個建議,也是對自己這幾年來JAVA開發工作的總結。希望這些建議能夠幫助大家解惑。
1、不同模塊之間的類要相互隱藏。現在不少應用系統,為了提高開發效率,都提出了模塊化的設計理念。如最近比較流行的ERP系統,如果按模塊來進行設計的話,則在開發時不同的人員可以負責各自的模塊,而互不干涉。在ERP系統出售的時候,也可以按模塊來進行出售,因為各個模塊的功能是相對獨立的。當然這只是從管理層面來說模塊化設計的重要性,不過這不是我們今天要談論內容的重點。今天要談的是,如果應用系統按模塊化來進行設計,那么不同模塊之間的內如何實現隱藏呢?其實很簡單。如供應商基本信息維護、供應商進貨單、應付帳款分屬于三個不同的模塊,分別為采購管理、庫存管理與應收應付管理。現在在設計應收應付這個模塊時其中有一個生成應付帳款的類,其需要用到采購管理模塊中供應商的信息(付款條件等等)、倉庫管理模塊中的供應商進貨單據(產品編號、數量、到貨日期等等),然后才能夠生成準確的應付帳款。那么在應用程序設計的時候該如何實現呢?是在那個應付帳款作業對應的類中直接從數據庫中去查詢這些信息嗎,又或者去修改采購模塊中對應的類來實現?這雖然都可以達到預定的目的,但是都不是上上之策。個人認為,最好的方法就是程序開發人員先設計一個類(如Vender類),這個類會返回供應商編號、付款條件等信息。然后應付帳款作業中的類就直接調用這個類獲取需要的信息。一方面可能很多地方都需要用到這些信息,如果每次需要的時候都利用SQL代碼來獲取這些信息的話,那么代碼量也會很大。相反直接調用類來實現這些信息反而更加的方面。另一方面,這個Vender類對于其他類是隱藏的。也就是說,其他類只能夠通過預定義的接口向這個類傳遞參數并直接引用其返回的結果,而不能夠修改類內部的元素。如此即使其他有十幾個類或者應用程序需要調用這個類的時候,其只要輸入的參數相同,則其返回的結果也就相同。那么其他類在引用返回結果的時候,就不用擔心不兼容了。所以,應用程序的模塊化設計促使JAVA程序要實現類與類之間的隱藏;同時JAVA類相互之間隱藏的特性也方便了應用程序的模塊化設計。
2、數據類型類與其他類之間需要實現隱藏。在任何一個應用程序開發過程中,都需要根據企業的需要設計一些比較有針對性的數據類型。因為光靠應用程序所提供的那些數據類型往往不能夠滿足程序開發人員的需要。如需要設計一些數組、記錄等等數據類型。但是在設計這些數據類型的時候,程序人員就需要了一個難題。如現在在開發ERP系統的過程中,多個模塊(每個模塊由不同的程序員負責)都需要用到同一個記錄數據類型。那么是每個程序員都設計一個記錄類型的數據類型,還是共用同一個數據類型呢?如果各管各的,就需要建立多個記錄類型的數據類型,管理起來比較麻煩,對后續升級也會遇到障礙。而如果大家共用一個記錄類型的數據類型,大家又擔心其他程序人員不小心修改了這個數據類型而給他們造成了麻煩。這之間難道就沒有和平的共存方式了呢?其實,在應用程序開發的過程中可以認為的將應用程序開人人員分為數據類型創者者與業務邏輯開發者。然后數據類型開發者可以根據其他開發人員的需要創建一些定義數據類型的類,這些類的話對于其他程序開發人員開發的類是隱藏的。也就是說,其他類不能夠對這個數據類型進行修改。那么即可以提高這些數據類型的利用率,而且也可以保證其他類可以以固定的格式引用這些類。
3、業務層與表示層之間的類要相互隱藏。利用過J2EE開發平臺的人肯定知道,在開發應用程序的時候,業務邏輯層與表示層之間是相互獨立的。業務邏輯層主要實現一些負責的運算,如物料需求計劃運算。而表示層的話只負責一些具體的顯示。如通過瀏覽器客戶端來顯示結果還是通過軟件窗口來顯示運算結果。雖然客戶端所采用的方式不同,但是其內部的運算是相同的。此時最好把實現業務邏輯層的類與實現表示層的類相互隱藏起來。因為在實際開發過程中,他們往往是由不同的程序開發人員完成的。為了避免不同程序開發人員之間的相互干擾,避免表示層的開發人員無意中修改了業務邏輯層的JAVA類,就必須要把業務邏輯層的類隱藏起來。也就是說,表示層開發人員只需要知道業務邏輯層的類需要哪些參數、能夠以什么樣的形式返回結果即可。然后表示層的類在調用業務邏輯層中的類的時候,只需要按照要求輸入參數、按照規則獲取結果即可,而不需要關注其業務邏輯層類內部的實現機制,從而減輕了表示層開發人員的工作量。同時也避免了業務層開發人員對這個類進行修改,從而其他的應用程序開發人員可以以同一種方式來引用這些類。
4、如果某個業務邏輯還不怎么完善時,要執行隱藏。在應用程序開發的過程中,可能某些業務邏輯暫時沒有很好的解決方案,但是需要的參數或者返回的結果是確定的。此時可以把這個業務邏輯建立一個的類,并對其他類進行隱藏。如此的話,當出現更好的解決方案之后,就可以直接更改這個類中的業務邏輯。由于類中成員對于其他程序人員是隱藏的,為此對類中的處理機制進行更改并不會影響到其他人員開發的應用程序。他們只關心你能夠在最短時間內獲得準確的結果。為此在遇到這種情況時,最好把類與其他的類執行隱藏。
可見,哪些類需要相互隱藏可能判斷起來比較復雜。但是有一個普遍適用的原則,就是如果一個類有不同的程序人員需要引用。如用戶A設計了一個統計應收帳款余額的類,用戶B與C,包括用戶A都需要調用這個類。那么這個類就最好進行隱藏。防止其他類在調用這個類的時候,不小心修改了其內部的實現方式。這會對其他用戶調用這個類產生不利影響。
二、實現JAVA類隱藏的三個關鍵字
之所有要實現JAVA類隱藏,主要是讓任何程序開發人員都無法觸及他們不應該初期的部分(如業務邏輯或者數據類型的內部操作)。雖然項目管理員可能在程序開發過程中多次告誡團隊成員不要直接操作其他開發人員所設計類中的成員。但是如果缺乏一定的控制手段,這些事情往往會在有意無意中發生。為此需要采取一些強制的手段來防止這些情況的發生。而且這些事現方式必須簡單,不能夠太過于復雜。在JAVA語言平臺中,就提供了Public、private、protected三個關鍵字來實現對類的隱藏與控制。
這些關鍵字決定了類或者類中的成員是否對其他類是隱藏的,能否被其他類進行操作與修改。如public關鍵字表示緊隨其后的元素對任何人都是可用的,可以被任何人所修改。而關鍵字Private則表示除了類創建者和這個類型的內部方法之外的任何人都不能夠進行訪問。而關鍵Protected的作用跟Private類似,只是其是作用在繼承中的。
可見在JAVA程序開發中,要實現類的隱藏是很簡單的,也是JAVA程序員必須要掌握的一項基本功。而其難度就在于在適當的時候實現類和類中成員的隱藏。這就要程序員在程序開發過程中好好琢磨了。上面提到的一些建議可供大家做參考。
編輯推薦
(責任編輯:xy)