《JAVA 編程思想》讀后感 一、對象入門

現(xiàn)在回過頭重新拜讀java經(jīng)典書籍之一《JAVA 編程思想》,有很大收獲。經(jīng)典的書籍就是這樣,它總能給你每一次的閱讀帶來不同的體驗。我第一次閱讀這本書,還是大學(xué)剛開始學(xué)習(xí)編程的時候。當(dāng)時就注意到有人提醒說,初學(xué)者不適合看這本編程思想。我偏不信。果然,看的似是而非。現(xiàn)在,經(jīng)過這幾年,在java上的實踐。多少有了點經(jīng)驗。再看之前看不太懂的話,果然有了新的理解。
在這篇文章里,我們就從第一章,對象入門開始回顧吧。在這一章里,作者介紹了對象和java的關(guān)系。為什么要面向?qū)ο缶幊?。我在另外一篇文章里曾提到,面向?qū)ο缶幊痰碾y點在于抽象。這種語言要求使用者抽象出最好的對象。這是很難的。作者也說:

事實上,很難很好地設(shè)計出對象—— 從而很難設(shè)計好任何東西。因此,只有數(shù)量相當(dāng)少的“專家”能設(shè)計出最好的對象,然后讓其他人享用。

大部分程序員,如果面向?qū)ο缶幊?,估計設(shè)計出來的對象經(jīng)常是蹩腳的,沒有通用性的。而且大部分編程時間,其實都是用現(xiàn)成的對象進(jìn)行操作。即使這樣,也經(jīng)常用錯。從這個方面看,面向?qū)ο蟊让嫦蜻^程對于程序員更不友好。但是為什么說:

“為什么面向?qū)ο蟮木幊虝谲浖_發(fā)領(lǐng)域造成如此震憾的影響?”

簡單來說,更高層次的抽象帶來的是更快更廉價的開發(fā)和維護(hù)。無論是對于管理,設(shè)計,開發(fā)來說,建模過程變得更加清晰。到了今天,比面向?qū)ο笤O(shè)計更進(jìn)一步的方法已然出現(xiàn),那就是面向領(lǐng)域設(shè)計。即DDD。它是比一般抽象更高級的抽象。難度也是陡增的。但是也由此可見,大家對于編程的思考都是一脈相承的。JAVA就是這樣一門支持抽象出對象,面向?qū)ο缶幊痰恼Z言?;蛘哒缱髡咚f:

所有編程語言的最終目的都是提供一種“抽象”方法。

從匯編到C再到JAVA,程序員所作的事情,其實都是致力于在機器空間和代碼空間中架起橋梁。高層次的成功的抽象(像DDD),幫助我們更靠近問題空間。這也大大增加了解決問題的效率?,F(xiàn)在我們一起看下面對純粹的對象編程(OOP)語言有哪五大基本特征:

  1. 所有東西都是對象。
  2. 程序是一大堆對象的組合。
  3. 每個對象都有自己的存儲空間,可容納其他對象。
  4. 每個對象都有類型。
  5. 同一類對象都能使用相同的方法。做相同的操作。

其中從第五點延伸出的對象的能力,即接口。接口代表某類對象可以接受的信息并為之進(jìn)行的操作。在對象和接口基礎(chǔ)上,創(chuàng)建者和使用者,可以通過類的封裝達(dá)成某種協(xié)調(diào)。即使用者不需要知道創(chuàng)建者在對象中的實現(xiàn)方案就能順利使用對象。因此有了對于類的訪問控制。關(guān)鍵字public,private,protect等就是為此而生。
當(dāng)我們封裝好了對象,其實也在一定程度上實現(xiàn)了對象的復(fù)用。作者說,

這種重復(fù)使用的能力并不容易實現(xiàn);它要求較多的經(jīng)驗以及洞察力,這樣才能設(shè)計出一個好的方案,才有可能重復(fù)使用。
許多人認(rèn)為代碼或設(shè)計方案的重復(fù)使用是面向?qū)ο蟮某绦蛟O(shè)計提供的最偉大的一種杠桿

好的OOP程序員,應(yīng)該時刻向著對象的復(fù)用努力。如果不能發(fā)揮出這一特性,OOP的優(yōu)勢就喪失了一半。在這里,作者提醒我們,不能因為繼承是面向?qū)ο蟮囊淮筇匦?,就忽略組合對象。利于對象的復(fù)用和組合,可以做到解耦。從而使我們的設(shè)計變得清爽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容