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