java面向?qū)ο髮W(xué)習(xí)心得
在面向?qū)ο蟮木幊陶Z言中,類是一個(gè)獨(dú)立的程序單位,它應(yīng)該有一個(gè)類名并包括屬性和方法兩個(gè)主要部分。下面學(xué)習(xí)啦小編收集了一些關(guān)于java面向?qū)ο髮W(xué)習(xí)心得,希望對你有幫助
java面向?qū)ο髮W(xué)習(xí)心得篇一
我相信在各位學(xué)習(xí)的過程中,都會(huì)從書上看到面向?qū)γ婧兔嫦蜻^程的定義,但是如何理解它們之間的區(qū)別和轉(zhuǎn)換成自己的思想并運(yùn)用在軟件愛國過程中,我想很多初學(xué)者都不能很好的把握。下面我就對面向?qū)ο蠛兔嫦蜻^程做一個(gè)簡單的分析。
面向過程,顧名思義,其中心意義在于“過程”二字,比如你要吃飯,那么首先是要選地,播種,施肥,成熟,收獲,煮飯,然后才能吃飯,那么面向過程就是從開始到結(jié)束,分析出解決問題的需要的每一個(gè)步驟,然后用函數(shù)將這些步驟一個(gè)一個(gè)實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)一次調(diào)用就行了。
面向?qū)ο?,同樣的,你去飯店吃飯的時(shí)候,只需要對服務(wù)員說一句你要吃飯就行了,你不需要關(guān)心飯是怎么來的,這就是面向?qū)ο?。那么面向?qū)ο缶褪前呀M成問題事務(wù)分解成一個(gè)個(gè)對象,建立對象不是為了解決一個(gè)步驟,而是用來描述某個(gè)事務(wù)在解決問題步驟中的行為。面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟。
以上的解釋來源于書上,對于初學(xué)者而言,這樣的描述過于抽象,不能很好的理解。下面我舉個(gè)具體的例子來說明。
從書面上來說,可能面向過程更好理解,但是其實(shí)面向?qū)ο蟾先藗兊乃伎剂?xí)慣。比如外面去商場買衣服,那么商場的功能就是提供衣服,你不需要關(guān)心衣服是怎么來的,你只需要向商場提出你要買衣服的要求就可以。就那貪吃蛇這個(gè)游戲而言,對于面向過程:1、吃一個(gè);2、繪制畫面;3判斷是否死亡,就這樣依次調(diào)用函數(shù),一個(gè)一個(gè)步驟進(jìn)行。
而對于面向?qū)ο螅⑷齻€(gè)對象:1、蛇;2、畫面系統(tǒng);3、規(guī)則系統(tǒng)。首先進(jìn)行操作,然后將操作后的結(jié)果提交至畫面系統(tǒng)進(jìn)行畫面繪制,繪制之后的結(jié)果提交至規(guī)則系統(tǒng)判斷是否死亡。這樣一招功能來劃分問題。
從上面的解釋來看,面向?qū)ο蠛兔嫦蜻^程依然難以區(qū)分,但是如果我要返回上一步,那么對于面向過程而言,從初始狀態(tài)到判斷是否死亡到現(xiàn)實(shí)畫面可能都需要改動(dòng)。而對于面向?qū)ο髣t只需要重新設(shè)計(jì)畫面系統(tǒng),在里面保存上一步的坐標(biāo)即可,這里不需要涉及到規(guī)則系統(tǒng)和其他操作。
面向?qū)ο蟮墓δ軇澐直WC了面向?qū)ο蟮目蓴U(kuò)展性。比如我需要為貪吃蛇重新改寫一套規(guī)則,在面向過程中,規(guī)則已經(jīng)滲透到整個(gè)程序的各個(gè)角落,改寫不如重寫。那么在面向?qū)ο笾?,則只需要重新設(shè)計(jì)規(guī)則系統(tǒng)即可。
其實(shí)面向?qū)ο蠛兔嫦蜻^程都強(qiáng)調(diào)代買重用,用了對象不代表你的程序就是面向?qū)ο?,要做到局部改?dòng)需要足夠的經(jīng)驗(yàn),很多人在用java編程時(shí)依舊是面向過程的思想(盡管在程序中使用的類和對象),這樣的程序設(shè)計(jì)依然缺乏重用性和可移植性。
java面向?qū)ο髮W(xué)習(xí)心得篇二
大三的時(shí)候?qū)W校組織我們?nèi)ヌK州NIIT參加四個(gè)月的java實(shí)訓(xùn),我開始系統(tǒng)的學(xué)習(xí)期java,之前大學(xué)的時(shí)候?qū)W的比較寬泛,沒有專門的正對java的學(xué)習(xí)。
首先我是從學(xué)習(xí)Java編程開始接觸OOP(面向?qū)ο缶幊?,剛開始使用Java編寫程序的時(shí)候感覺很別扭,因?yàn)槲以缫粤?xí)慣用C來編寫程序,很欣賞C的簡潔性和高效性,喜歡C簡練而表達(dá)能力豐富的風(fēng)格,特別忍受不了Java運(yùn)行起來慢吞吞的速度,相對冗長的代碼,而且一個(gè)很簡單的事情,要寫好多類,一個(gè)類調(diào)用一個(gè)類,心里的抵觸情緒很強(qiáng)。
我對Java的面向?qū)ο蟮奶匦宰聊チ季茫哉J(rèn)為有所領(lǐng)悟,也開始有意識(shí)的運(yùn)用OOP風(fēng)格來寫程序,然而還是經(jīng)常會(huì)覺得不知道應(yīng)該怎樣提煉類,面對一個(gè)具體的問題的時(shí)候,會(huì)覺得腦子里千頭萬緒的,不知道怎么下手,一不小心,又會(huì)回到原來的思路上去。
舉個(gè)例子,要發(fā)廣告郵件,廣告郵件列表存在數(shù)據(jù)庫里面。倘若用C來寫的話,一般會(huì)這樣思考,先把郵件內(nèi)容讀入,然后連接數(shù)據(jù)庫,循環(huán)取郵件地址,調(diào)用本機(jī)的qmail的sendmail命令發(fā)送。
然后考慮用Java來實(shí)現(xiàn),既然是OOP,就不能什么代碼都塞到main過程里面,于是就設(shè)計(jì)了三個(gè)類:
一個(gè)類是負(fù)責(zé)讀取數(shù)據(jù)庫,取郵件地址,調(diào)用qmail的sendmail命令發(fā)送;
一個(gè)類是讀郵件內(nèi)容,MIME編碼成HTML格式的,再加上郵件頭;
一個(gè)主類負(fù)責(zé)從命令讀參數(shù),處理命令行參數(shù),調(diào)用發(fā)email的類。
把一件工作按照功能劃分為3個(gè)模塊分別處理,每個(gè)類完成一件模塊任務(wù)。
仔細(xì)的分析一下,就會(huì)發(fā)現(xiàn)這樣的設(shè)計(jì)完全是從程序員實(shí)現(xiàn)程序功能的角度來設(shè)計(jì)的,或者說,設(shè)計(jì)類的時(shí)候,是自低向上的,從機(jī)器的角度到現(xiàn)實(shí)世界的角度來分析問題的。因此在設(shè)計(jì)的時(shí)候,就已經(jīng)把程序編程實(shí)現(xiàn)的細(xì)節(jié)都考慮進(jìn)去了,企圖從底層實(shí)現(xiàn)程序這樣的出發(fā)點(diǎn)來達(dá)到滿足現(xiàn)實(shí)世界的軟件需求的目標(biāo)。
這樣的分析方法其實(shí)是不適用于Java這樣面向?qū)ο蟮木幊陶Z言,因?yàn)?,如果改用C語言,封裝兩個(gè)C函數(shù),都會(huì)比Java實(shí)現(xiàn)起來輕松的多,邏輯上也清楚的多。
我覺得面向?qū)ο蟮木柙谟诳紤]問題的思路是從現(xiàn)實(shí)世界的人類思維習(xí)慣出發(fā)的,只要領(lǐng)會(huì)了這一點(diǎn),就領(lǐng)會(huì)了面向?qū)ο蟮乃季S方法。
舉一個(gè)非常簡單的例子:假使現(xiàn)在需要寫一個(gè)網(wǎng)頁計(jì)數(shù)器,客戶訪問一次頁面,網(wǎng)頁計(jì)數(shù)器加1,計(jì)數(shù)器是這樣來訪問的后臺(tái)有一個(gè)數(shù)據(jù)庫表,保存每個(gè)id(一個(gè)id對應(yīng)一個(gè)被統(tǒng)計(jì)訪問次數(shù)的頁面)的計(jì)數(shù)器當(dāng)前值,請求頁面一次,對應(yīng)id的計(jì)數(shù)器的字段加1(這里我們忽略并發(fā)更新數(shù)據(jù)庫表,出現(xiàn)的表鎖定的問題)。
如果按照一般從程序?qū)崿F(xiàn)的角度來分析,我們會(huì)這樣考慮:首先是從HTTP GET請求取到id,然后按照id查數(shù)據(jù)庫表,獲得某id對應(yīng)的訪問計(jì)數(shù)值,然后加1,更新數(shù)據(jù)庫,最后向頁面顯示訪問計(jì)數(shù)。
現(xiàn)在假設(shè)一個(gè)沒有程序設(shè)計(jì)經(jīng)驗(yàn)的人,他會(huì)怎樣來思考這個(gè)問題的呢?他會(huì)提出什么樣的需求呢?他很可能會(huì)這樣想:
我需要有一個(gè)計(jì)數(shù)器,這個(gè)計(jì)數(shù)器應(yīng)該有這樣的功能,刷新一次頁面,訪問量就會(huì)加1,另外最好還有一個(gè)計(jì)數(shù)器清0的功能,當(dāng)然計(jì)數(shù)器如果有一個(gè)可以設(shè)為任意值的功能的話,我就可以作弊了。
做為一個(gè)沒有程序設(shè)計(jì)經(jīng)驗(yàn)的人來說,他完全不會(huì)想到對數(shù)據(jù)庫應(yīng)該如何操作,對于HTTP變量該如何傳遞,他考慮問題的角度就是我有什么需求,我的業(yè)務(wù)邏輯是什么,軟件應(yīng)該有什么功能。
java面向?qū)ο髮W(xué)習(xí)心得篇三
面向?qū)ο?,正如張老師所說的只可意會(huì),不能言傳。是相對于面向過程而言的,是個(gè)相對的概念。我以前學(xué)過C語言,VB等面向過程,也學(xué)過C++,C#等面向?qū)ο蟮恼Z言,然而PHP既是面向過程又是面向?qū)ο蟮恼Z言,雖然面向?qū)ο蟮墓δ懿皇呛軓?qiáng)大,但這可以說明一點(diǎn):面向過程和面向?qū)ο蟛皇峭耆珜α⒌?,是可以共存的。有人認(rèn)為面向?qū)ο笫敲嫦蜻^程的替代品,我不這么認(rèn)為。我個(gè)人認(rèn)為,兩種編程思想各有千秋。面向?qū)ο蠊倘粌?yōu)越,但是要根據(jù)實(shí)際情況來看,也許有的問題使用面向過程要簡單些,我們?yōu)槭裁匆釛壓唵问褂脧?fù)雜的呢。對于我們現(xiàn)代的程序員來說,面向過程和面向?qū)ο笸瑯又匾?,我們都要掌握,根?jù)具體情況,擇優(yōu)選擇使用開發(fā)思想。以上是我對面向?qū)ο蟮睦斫?,也許由于現(xiàn)階段的知識(shí)有限,理解還不是很深刻。但我堅(jiān)信隨著我知識(shí)的進(jìn)一步提高,對于面向?qū)ο笪視?huì)有新的理解。
JAVA是一種完全的面向?qū)ο蟮恼Z言,因此在這里我們就不在談?wù)撁嫦蜻^程了。JAVA的面向?qū)ο笸渌拿嫦驅(qū)ο蟮恼Z言一樣,同樣支持OOP的三個(gè)基本特征:封裝,繼承,多態(tài)。
首先要理解對象和類的概念,類是某一類事物的描述,是抽象的,概念上的定義。而對象是類的一個(gè)實(shí)例。隨著學(xué)習(xí)的深入,會(huì)對這兩個(gè)概念有更加深刻的理解。類將數(shù)據(jù)和函數(shù)封裝在一起,數(shù)據(jù)表示屬性,函數(shù)表示行為。定義一個(gè)類使用class關(guān)鍵字。要?jiǎng)?chuàng)建一個(gè)新的對象,需要使用new關(guān)鍵字,例如:Person p=new Person( );變量p實(shí)際上是新產(chǎn)生的對象的引用句柄。通過張老師的講解我們知道對象內(nèi)存的分配是在堆內(nèi)存中分配的,而引用變量的地址分配是棧內(nèi)存中分配的。句柄中的值實(shí)際上是堆內(nèi)存中為對象分配的地址空間的首地址。明白了這一點(diǎn)對于以后的關(guān)于內(nèi)存的分配和垃圾的處理將會(huì)有更進(jìn)一步的體會(huì)。如果把一個(gè)句柄的值置為空,那么在堆內(nèi)存中分配的對象的地址空間的內(nèi)容就不能再被引用,也就成為垃圾,等待垃圾回收器的處理。
張老師在視頻中講得關(guān)于對象的比較問題講得很清楚,這也是我覺得最重要的收獲,當(dāng)然要先學(xué)會(huì)前面內(nèi)存中的分配方法才可以真正的明白“==”和equals()方法的不同。“==”用于比較兩個(gè)變量的值是否相等,也就是給對象分配的首地址是否相等,即是否是同一對象。而equals()用于比較兩個(gè)對象的內(nèi)容是否相等。這兩個(gè)對象不一定是同一個(gè)對象,只要內(nèi)容相等就可以。
關(guān)于匿名對象,使用匿名對象有兩種情況:1.如果一個(gè)對象只要一次方法調(diào)用。2。將匿名對象作為實(shí)參傳遞給函數(shù)調(diào)用。如:new person();這個(gè)語句沒有產(chǎn)生句柄引用變量,直接用new關(guān)鍵字創(chuàng)建。待本語句執(zhí)行完這個(gè)對象實(shí)際上就變成了垃圾。
為了實(shí)現(xiàn)類的封裝性,需要在成員變量和成員函數(shù)前添加訪問控制符:private ,public,protected。Private表示私有,只要同一個(gè)類的方法才可以訪問。Public表示公有,任何類都可以訪問。Protected表示受保護(hù)的,只有本類和本類的子類中的方法可以訪問。為了方便實(shí)現(xiàn)類的封裝性,我們一般將類的屬性設(shè)為私有,將方法設(shè)為公有。通過類的封裝性隱藏了類的實(shí)現(xiàn)細(xì)節(jié),可以方便修改,增強(qiáng)了可維護(hù)性。
構(gòu)造函數(shù)是類的一個(gè)重要內(nèi)容,函數(shù)的名字與類名相同,不含有返回值,在方法中不能有return語句返回一個(gè)值,相當(dāng)于對類進(jìn)行初始化。訪問控制符一定要用public,否則無法新建一個(gè)類的對象。通過構(gòu)造函數(shù)的重載可以實(shí)現(xiàn)不同的初始化。
猜你感興趣:
2.java基礎(chǔ)學(xué)習(xí)心得體會(huì)
3.java實(shí)訓(xùn)心得體會(huì)范文3篇