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