文/靳程
Java作為一種當(dāng)下非常流行的程序設(shè)計(jì)語(yǔ)言,面向?qū)ο蟮木幊趟枷?,頗受人們的喜愛(ài);而面向?qū)ο缶幊陶Z(yǔ)言都支持三個(gè)特性:封裝,繼承,多態(tài)。我們主要以Java為例來(lái)談?wù)劮庋b特性。封裝(Encapsulation)是面向?qū)ο蠓椒ǖ闹匾瓌t,就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體,并盡可能隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),控制用戶對(duì)類的修改和訪問(wèn)數(shù)據(jù)的程度。適度的封裝可以讓代碼更容易理解和維護(hù),也加強(qiáng)了程式碼的安全性。
以分析Java的學(xué)習(xí)歷程為例,從基礎(chǔ)語(yǔ)法——>方法,函數(shù)——>類——>jar包——>框架,都始終在秉持一個(gè)封裝的思想。由于大量的代碼重復(fù),不僅給編程人員帶來(lái)了繁瑣而又沉重的工作量,代碼的冗余使得項(xiàng)目做了沒(méi)有意義的放大,使得項(xiàng)目臃腫,進(jìn)而又加重了服務(wù)器的壓力、負(fù)載,降低了服務(wù)器運(yùn)行的效率,除此之外,可讀性也變得很差,對(duì)于后期維護(hù)造成了種種困難。
封裝數(shù)據(jù)除了調(diào)用數(shù)據(jù)方便之外,最重要的是可以對(duì)數(shù)據(jù)進(jìn)行安全的控制,Java中的封裝,把數(shù)據(jù)做了封裝存儲(chǔ)起來(lái),對(duì)于不同的訪問(wèn)需要設(shè)置權(quán)限管理。首先,我們需要提供一個(gè)對(duì)外的接口,好比說(shuō)燈管壞了,我們沒(méi)必要知道內(nèi)部線路是怎樣聯(lián)通的,但我們至少得知道燈管的型號(hào),然后去五金店購(gòu)買新燈管,才能重新接通電路,否則就是答非所問(wèn),對(duì)不上號(hào)也沒(méi)法使用,這是封裝數(shù)據(jù)對(duì)外訪問(wèn)需要提供接口的問(wèn)題;另外,資源共享的時(shí)代也是有底線的,需要對(duì)一些個(gè)人隱私數(shù)據(jù)匹配安全性保護(hù)措施,為此Java設(shè)置了四種訪問(wèn)控制符來(lái)劃分訪問(wèn)權(quán)限:private,默認(rèn),protected,和public。就拿一個(gè)User類來(lái)說(shuō),里面存放的屬性是name,age,IDCardPass...這些隱私屬性,我們就需要設(shè)置為私有權(quán)限,通過(guò)setXXX()和getXXX()方法來(lái)與其他類關(guān)聯(lián)溝通,這樣就會(huì)避免了所有的類都能訪問(wèn)的安全隱患,保障數(shù)據(jù)的安全性。對(duì)象的數(shù)據(jù)封裝特性還可以把對(duì)象的私有數(shù)據(jù)和公共數(shù)據(jù)分離開(kāi),保護(hù)了私有數(shù)據(jù),減少了可能的模塊間干擾,達(dá)到降低程序復(fù)雜性、提高可控性的目的。
從HelloWorld一 直 到 JDBC,再 到Spring,Struts2,MyBatis.經(jīng)歷了從變量封裝,方法封裝,類封裝,壓縮成jar包,MVC模式中的分層,再到框架中的Action(Handler)類中注解就可完成實(shí)現(xiàn)映射,取代了在web.xml中用多個(gè)標(biāo)簽做映射處理,語(yǔ)句簡(jiǎn)短精煉,邏輯清晰明了,開(kāi)發(fā)效率也越來(lái)越高?;蛟S我在這說(shuō)取代不太合適,因?yàn)樽⒔獠⒉皇侨f(wàn)能的,不是所有的類或方法上都可加注解,如JdbcTemplate、SessionFactoryBean ...)這些都是第三方提供的,而注解只是能用于我們自定義編寫的類,此時(shí)XML就是唯一的配置方式了。所以在開(kāi)發(fā)過(guò)程中,兩者是相輔相成的,開(kāi)發(fā)人員需靈活運(yùn)用。
正如人們所說(shuō)的,越好的程序員越“懶”,這并不是真正說(shuō)程序員懶惰,而是他們擅長(zhǎng)于“Ctrl+C/Ctrl+V”。其實(shí)我有問(wèn)過(guò)之前的學(xué)長(zhǎng),都是已經(jīng)就職的程序員,他們?cè)趯?shí)踐工作中的開(kāi)發(fā)情況,答案基本一致。市面上存在的一些XXX信息管理系統(tǒng),XXX自動(dòng)辦公軟件...前端設(shè)計(jì)無(wú)非就是被人們已經(jīng)接受的幾種布局格式:‘廠’字形,‘三’字形,‘國(guó)’字形...,網(wǎng)上這種美觀,簡(jiǎn)約大方的模板比比皆是,都是可以下載到源碼的,然后再根據(jù)實(shí)際情況和用戶的要求進(jìn)行進(jìn)一步訂制更改,直到客戶滿意;后端的實(shí)現(xiàn)是其實(shí)很多功能模塊的代碼都是相似的,只需要修改一小部分就可以了,沒(méi)事誰(shuí)會(huì)花大量的時(shí)間去敲代碼,所謂的敲代碼,其實(shí)只需要敲一些關(guān)鍵部分的代碼就可以了。當(dāng)然,并不是說(shuō)這些代碼程序員就不會(huì)敲了,只是沒(méi)有必要,所以一個(gè)項(xiàng)目中,也是符合二八定律的,真正親自動(dòng)手敲的大概只有20%左右的代碼,其他的復(fù)制粘貼,這一是為了提升效率,二可以減少一些不必要的錯(cuò)誤。在開(kāi)源免費(fèi)的計(jì)算機(jī)軟件行業(yè)中,這里有豐富共享資源,比如GitHub,我們要學(xué)會(huì)將資源利用率達(dá)到最大化。
綜上所述,面向?qū)ο蟮姆庋b思想,在軟件技術(shù)開(kāi)發(fā)行業(yè)起到了中流砥柱的作用,是發(fā)展階段上的一個(gè)重要的里程碑,抽象出公共的部分作為獨(dú)立的模塊,解耦的同時(shí),語(yǔ)義也變得簡(jiǎn)單易懂,又大大提高了開(kāi)發(fā)效率。不僅如此,我們更要去學(xué)習(xí)封裝這種思想,對(duì)于同類型項(xiàng)目的研發(fā),市面上的產(chǎn)品有非常高的參考價(jià)值和意義,在最快的時(shí)間內(nèi)完成廣大使用者更改的需求。