JAVA程序員基本功之開發(fā)實(shí)現(xiàn)類隱藏及應(yīng)用
雖然在JAVA言語(yǔ)中要完成類的隱藏十分復(fù)雜,只需求通過(guò)三個(gè)關(guān)鍵字即可以完成。但是在大局部狀況下,讓JAVA程序員感到疑惑的是,在什么時(shí)候該把什么類隱藏。的確,在JAVA開發(fā)言語(yǔ)平臺(tái)中,關(guān)于什么類需求隱藏,什么類不需求隱藏,往往沒(méi)有很嚴(yán)厲的要求。
一、類隱藏的根本建議
雖然在JAVA言語(yǔ)中要完成類的隱藏十分復(fù)雜,只需求通過(guò)三個(gè)關(guān)鍵字即可以完成。但是在大局部狀況下,讓JAVA程序員感到疑惑的是,在什么時(shí)候該把什么類隱藏。的確,在JAVA開發(fā)言語(yǔ)平臺(tái)中,關(guān)于什么類需求隱藏,什么類不需求隱藏,往往沒(méi)有很嚴(yán)厲的要求。
為此程序開發(fā)人員需求根據(jù)自己的任務(wù)經(jīng)驗(yàn)來(lái)進(jìn)行判別。而即使有一定程序開發(fā)經(jīng)驗(yàn)的員工,也不一定能夠在這個(gè)問(wèn)題上給出很好的答案。公說(shuō)公有理,婆說(shuō)婆有理,為此很難有一個(gè)一致的規(guī)范。筆者下面幾個(gè)建議,也是對(duì)自己這幾年來(lái)JAVA開發(fā)任務(wù)的總結(jié)。希望這些建議能夠協(xié)助大家解惑。
1、不同模塊之間的類要相互隱藏。
如今不少運(yùn)用系統(tǒng),為了進(jìn)步開發(fā)效率,都提出了模塊化的設(shè)計(jì)理念。如最近比擬盛行的ERP系統(tǒng),假設(shè)按模塊來(lái)進(jìn)行設(shè)計(jì)的話,則在開發(fā)時(shí)不同的人員可以擔(dān)任各自的模塊,而互不干涉。
在ERP系統(tǒng)出售的時(shí)候,也可以按模塊來(lái)進(jìn)行出售,由于各個(gè)模塊的功能是相對(duì)獨(dú)立的。當(dāng)然這只是從管理層面來(lái)說(shuō)模塊化設(shè)計(jì)的重要性,不過(guò)這不是我們今天要談?wù)搩?nèi)容的重點(diǎn)。今天要談的是,假設(shè)運(yùn)用系統(tǒng)按模塊化來(lái)進(jìn)行設(shè)計(jì),那么不同模塊之間的內(nèi)如何完成隱藏呢?其實(shí)很復(fù)雜。如供應(yīng)商根本信息維護(hù)、供應(yīng)商進(jìn)貨單、應(yīng)付帳款分屬于三個(gè)不同的模塊,辨別為采購(gòu)管理、庫(kù)存管理與應(yīng)收應(yīng)付管理。
如今在設(shè)計(jì)應(yīng)收應(yīng)付這個(gè)模塊時(shí)其中有一個(gè)生成應(yīng)付帳款的類,其需求用到采購(gòu)管理模塊中供應(yīng)商的信息(付款條件等等)、倉(cāng)庫(kù)管理模塊中的供應(yīng)商進(jìn)貨單據(jù)(產(chǎn)品編號(hào)、數(shù)量、到貨日期等等),然后才干夠生成精確的應(yīng)付帳款。那么在運(yùn)用程序設(shè)計(jì)的時(shí)候該如何完成呢?是在那個(gè)應(yīng)付帳款作業(yè)對(duì)應(yīng)的類中直接從數(shù)據(jù)庫(kù)中去查詢這些信息嗎,又或者去修正采購(gòu)模塊中對(duì)應(yīng)的類來(lái)完成?這雖然都可以達(dá)到預(yù)定的目的,但是都不是上上之策。
團(tuán)體以為,最好的方法就是程序開發(fā)人員先設(shè)計(jì)一個(gè)類(如Vender類),這個(gè)類會(huì)返回供應(yīng)商編號(hào)、付款條件等信息。然后應(yīng)付帳款作業(yè)中的類就直接調(diào)用這個(gè)類獲取需求的信息。一方面能夠很多地方都需求用到這些信息,假設(shè)每次需求的時(shí)候都應(yīng)用SQL代碼來(lái)獲取這些信息的話,那么代碼量也會(huì)很大。相反直接調(diào)用類來(lái)完成這些信息反而更加的方面。另一方面,這個(gè)Vender類關(guān)于其他類是隱藏的。
也就是說(shuō),其他類只能夠通過(guò)預(yù)定義的接口向這個(gè)類傳遞參數(shù)并直接援用其返回的結(jié)果,而不能夠修正類外部的元素。如此即使其他有十幾個(gè)類或者運(yùn)用程序需求調(diào)用這個(gè)類的時(shí)候,其只要輸出的參數(shù)相同,則其返回的結(jié)果也就相同。那么其他類在援用返回結(jié)果的時(shí)候,就不用擔(dān)憂不兼容了。所以,運(yùn)用程序的模塊化設(shè)計(jì)促使JAVA程序要完成類與類之間的隱藏;同時(shí)JAVA類相互之間隱藏的特性也方便了運(yùn)用程序的模塊化設(shè)計(jì)。
2、數(shù)據(jù)類型類與其他類之間需求完成隱藏。
在任何一個(gè)運(yùn)用程序開發(fā)過(guò)程中,都需求根據(jù)企業(yè)的需求設(shè)計(jì)一些比擬有針對(duì)性的數(shù)據(jù)類型。由于光靠運(yùn)用程序所提供的那些數(shù)據(jù)類型往往不能夠滿足程序開發(fā)人員的需求。如需求設(shè)計(jì)一些數(shù)組、記錄等等數(shù)據(jù)類型。但是在設(shè)計(jì)這些數(shù)據(jù)類型的時(shí)候,程序人員就需求了一個(gè)難題。如如今在開發(fā)ERP系統(tǒng)的過(guò)程中,多個(gè)模塊(每個(gè)模塊由不同的程序員擔(dān)任)都需求用到同一個(gè)記錄數(shù)據(jù)類型。
那么是每個(gè)程序員都設(shè)計(jì)一個(gè)記錄類型的數(shù)據(jù)類型,還是共用同一個(gè)數(shù)據(jù)類型呢?假設(shè)各管各的,就需求建立多個(gè)記錄類型的數(shù)據(jù)類型,管理起來(lái)比擬麻煩,對(duì)后續(xù)晉級(jí)也會(huì)遇到阻礙。而假設(shè)大家共用一個(gè)記錄類型的數(shù)據(jù)類型,大家又擔(dān)憂其他程序人員不小心修正了這個(gè)數(shù)據(jù)類型而給他們形成了麻煩。這之間難道就沒(méi)有和平的共存方式了呢?其實(shí),在運(yùn)用程序開發(fā)的過(guò)程中可以以為的將運(yùn)用程序開人人員分為數(shù)據(jù)類型創(chuàng)者者與業(yè)務(wù)邏輯開發(fā)者。
然后數(shù)據(jù)類型開發(fā)者可以根據(jù)其他開發(fā)人員的需求創(chuàng)建一些定義數(shù)據(jù)類型的類,這些類的話關(guān)于其他程序開發(fā)人員開發(fā)的類是隱藏的。也就是說(shuō),其他類不能夠?qū)@個(gè)數(shù)據(jù)類型進(jìn)行修正。那么即可以進(jìn)步這些數(shù)據(jù)類型的應(yīng)用率,而且也可以保證其他類可以以固定的格式援用這些類。
3、業(yè)務(wù)層與表示層之間的類要相互隱藏。
應(yīng)用過(guò)J2EE開發(fā)平臺(tái)的人一定知道,在開發(fā)運(yùn)用程序的時(shí)候,業(yè)務(wù)邏輯層與表示層之間是相互獨(dú)立的。業(yè)務(wù)邏輯層主要完成一些擔(dān)任的運(yùn)算,如物料需求方案運(yùn)算。而表示層的話只擔(dān)任一些詳細(xì)的顯示。如通過(guò)閱讀器客戶端來(lái)顯示結(jié)果還是通過(guò)軟件窗口來(lái)顯示運(yùn)算結(jié)果。雖然客戶端所采用的方式不同,但是其外部的運(yùn)算是相同的。
此時(shí)最好把完成業(yè)務(wù)邏輯層的類與完成表示層的類相互隱藏起來(lái)。由于在實(shí)際開發(fā)過(guò)程中,他們往往是由不同的程序開發(fā)人員完成的。為了防止不同程序開發(fā)人員之間的相互干擾,防止表示層的開發(fā)人員有意中修正了業(yè)務(wù)邏輯層的JAVA類,就必需要把業(yè)務(wù)邏輯層的類隱藏起來(lái)。
也就是說(shuō),表示層開發(fā)人員只需求知道業(yè)務(wù)邏輯層的類需求哪些參數(shù)、能夠以什么樣的形式返回結(jié)果即可。然后表示層的類在調(diào)用業(yè)務(wù)邏輯層中的類的時(shí)候,只需求按照要求輸出參數(shù)、按照規(guī)則獲取結(jié)果即可,而不需求關(guān)注其業(yè)務(wù)邏輯層類外部的完成機(jī)制,從而加重了表示層開發(fā)人員的任務(wù)量。同時(shí)也防止了業(yè)務(wù)層開發(fā)人員對(duì)這個(gè)類進(jìn)行修正,從而其他的運(yùn)用程序開發(fā)人員可以以同一種方式來(lái)援用這些類。
4、假設(shè)某個(gè)業(yè)務(wù)邏輯還不怎樣完善時(shí),要執(zhí)行隱藏。
在運(yùn)用程序開發(fā)的過(guò)程中,能夠某些業(yè)務(wù)邏輯暫時(shí)沒(méi)有很好的解決方案,但是需求的參數(shù)或者返回的結(jié)果是確定的。此時(shí)可以把這個(gè)業(yè)務(wù)邏輯建立一個(gè)的類,并對(duì)其他類進(jìn)行隱藏。如此的話,當(dāng)出現(xiàn)更好的解決方案之后,就可以直接更改這個(gè)類中的業(yè)務(wù)邏輯。由于類中成員關(guān)于其他程序人員是隱藏的,為此對(duì)類中的處置機(jī)制進(jìn)行更改并不會(huì)影響到其別人員開發(fā)的運(yùn)用程序。他們只關(guān)心你能夠在最短時(shí)間內(nèi)取得精確的結(jié)果。為此在遇到這種狀況時(shí),最好把類與其他的類執(zhí)行隱藏。
可見(jiàn),哪些類需求相互隱藏能夠判別起來(lái)比擬復(fù)雜。但是有一個(gè)普遍適用的原則,就是假設(shè)一個(gè)類有不同的程序人員需求援用。如用戶A設(shè)計(jì)了一個(gè)統(tǒng)計(jì)應(yīng)收帳款余額的類,用戶B與C,包括用戶A都需求調(diào)用這個(gè)類。那么這個(gè)類就最好進(jìn)行隱藏。防止其他類在調(diào)用這個(gè)類的時(shí)候,不小心修正了其外部的完成方式。這會(huì)對(duì)其他用戶調(diào)用這個(gè)類發(fā)生不利影響。
二、完成JAVA類隱藏的三個(gè)關(guān)鍵字
之所有要完成JAVA類隱藏,主要是讓任何程序開發(fā)人員都無(wú)法觸及他們不應(yīng)該初期的局部(如業(yè)務(wù)邏輯或者數(shù)據(jù)類型的外部操作)。雖然項(xiàng)目管理員能夠在程序開發(fā)過(guò)程中屢次勸誡團(tuán)隊(duì)成員不要直接操作其他開發(fā)人員所設(shè)計(jì)類中的成員。但是假設(shè)缺乏一定的控制手段,這些事情往往會(huì)在有意有意中發(fā)作。
為此需求采取一些強(qiáng)制的手段來(lái)防止這些狀況的發(fā)作。而且這些事現(xiàn)方式必需復(fù)雜,不能夠太過(guò)于復(fù)雜。在JAVA言語(yǔ)平臺(tái)中,就提供了Public、private、protected三個(gè)關(guān)鍵字來(lái)完成對(duì)類的隱藏與控制。
這些關(guān)鍵字決定了類或者類中的成員能否對(duì)其他類是隱藏的,能否被其他類進(jìn)行操作與修正。如public關(guān)鍵字表示緊隨其后的元素對(duì)任何人都是可用的,可以被任何人所修正。而關(guān)鍵字Private則表示除了類創(chuàng)建者和這個(gè)類型的外部方法之外的任何人都不能夠進(jìn)行拜訪。而關(guān)鍵Protected的作用跟Private類似,只是其是作用在繼承中的。
可見(jiàn)在JAVA程序開發(fā)中,要完成類的隱藏是很復(fù)雜的,也是JAVA程序員必需要掌握的一項(xiàng)根本功。而其難度就在于在適當(dāng)?shù)臅r(shí)候完成類和類中成員的隱藏。這就要程序員在程序開發(fā)過(guò)程中好好琢磨了。
希望通過(guò)以上內(nèi)容的介紹,能夠給你帶來(lái)幫助。