JAVA第三次blog總結
- 2020 年 6 月 7 日
- 筆記
JAVA第三次blog總結
0.前言
這是我們在部落格園上第三次寫部落格,也是本學期最後一次的JAVA學習大總結。現在我們的JAVA已經接近尾聲了,對於編程思想和方法的改變依舊是難點,但是經過這一段時間的學習還是讓我在OOP思想的理解上有了很大的進步。特別是經過C語言的補考之後我也更加體會到了面向過程程式設計和面向對象程式設計的不同,也就是OPP和OOP的不同。在最後這篇blog中將針對最近的作業和JAVA的整體學習進行總結。
1.作業過程總結
剛剛接觸JAVA卻還是以c語言的方式在編程,現在整體回看這幾次作業,發現最開始的時候我寫的程式里雖然是使用的JAVA編程的用法,但是絲毫看不到對象,方法,屬性,類的痕迹,甚至我的腦子裡都根本沒用那個概念。只是一味的輸入輸出,程式可讀性很差,也根本沒有復用性。只要稍微改了改題里的要求,這程式里的東西全都要徹底改動,很繁瑣。但是再看後面幾次的PTA作業,已經能夠看到完整的對象,方法,屬性,類,甚至對於面向對象程式設計的三大技術特性也有了很深的理解,即為封裝性、繼承性與多態性。對於程式的可讀性也有了不錯的改善。而且對於類的學習和認識也讓我程式的復用性大大提高。
最後的三次作業也是難度最大的三次作業,這三次作業分別是雨刷程式功能擴展設計,統計Java程式中關鍵詞的出現次數,表達式求值,考察了List、Set和Map的介面應用,正則表達式的應用,以及算符棧,操作數棧的知識。
這幾次作業都做的不好,特別的最後兩次,也因為之前學的不紮實,又是因為正則表達式不正確,不能得出正確的輸出樣式,而丟掉幾十分。對於雨刷程式功能擴展設計這道題在程式重構之後就因為循環和正則表達式不正確而不能正確控制升檔和降檔,在經過大量時間的改正之後勉強實現了基本的功能,但是並沒有滿分,第二行無效輸入的測試點還是沒有通過。對於List、Set和Map的介面應用和算符棧,操作數棧的知識我學的不是很好,上課就聽得一頭霧水,在CSDN里找帖子也看不懂,所以後兩道題也只完成了基本的非法輸入判斷,因為檢查不出來錯所以主要的功能沒有實現。
這幾次作業在編寫程式上花費的時間不是特別多,主要是學習新知識比較占時間,但是因為沒有學懂總是感覺無從下手。想要通過作業逐步理解面向對象的特點,就要體會各個題目要求之間的相同與不同,在此基礎上對框架進行修改,不能因為麻煩或者不理解就推倒重做,才能得到最大的收穫。
至於編程的嚴謹性也是不可忽略的問題我就在在統計Java程式中關鍵詞的出現次數這道題里吃了虧,在關鍵字字元串的輸入中因為我多加了幾個空白符而導致的錯誤令我很困擾,也耽誤了我很多時間。
2.OOP設計心得
首先是面向過程程式設計和面向對象程式設計差異性的理解。面向過程程式設計是指利用函數的定義和調用去編寫程式執行操作,好處是突出的是從上到下整體運行的過程。面向對象程式設計是利用類的定義和使用,對象的屬性和方法,互相聯繫和發送「命令」和「消息」,好處是復用性高,便於更改。
而面向對象程式設計有封裝性、繼承性與多態性三大技術特性。這三個技術特性的關係密切,封裝可以使程式碼模組化,而繼承可以實現父類子類之間模組的聯繫,再賦予多態用於介面,使介面重用。這樣相互配合就可以提高程式碼的邏輯性和復用性。總結起來就是一句話OOP=對象+類+繼承+多態+消息。
其次就是面向對象設計有兩個基本原則,單一職責原則和開閉原則。單一職責原則是一個類只負責一項職責。而開閉原則是指應該對擴展開放,對修改關閉。換句話說,如果修改或者添加一個功能,應該是通過擴展原來的程式碼,而不是通過修改原來的程式碼。
最後要說的是UML圖的應用。在平時的作業里我發現給了UML圖程式實現起來就很輕鬆,而沒有UML的程式就需要你自己去設計。「類」顧名思義起到了分類的作用,讓你的程式更有邏輯性和可讀性,成為你解決問題的框架。同時也提升了復用性。再結合封裝性、繼承性與多態性三大技術特性也就完成了OOP。
3.測試的理解與實踐
對於PTA里的測試點,我覺得測試用例應該主要從邊界值,特殊值,錯誤輸入值這三方面來檢驗。同時也要注意記憶體超限和死循環的情況。之前的總結里提到了白盒測試和Junit的應用。這兩個是很常用的,這次還要說一個更加必不可缺的功能,那就是debug。Debug可以在每一步中檢查每一個值,表達式的變化,找到異常的數值,從而找出錯誤,這樣會讓測試更加簡便。
4.課程收穫
之前上面談了很多,在這裡簡要總結一下
①理解面向過程程式設計和面向對象程式設計的區別
②理解了面向對象程式設計封裝性、繼承性與多態性三大技術特性
③利用UML和「類」去編寫程式以及思考問題
④利用debug功能去檢驗程式里的值和表達式
⑤利用Junit單元測試(白盒測試)去提高我們編寫程式的效率並避免錯誤
⑥需要繼續理解和鞏固List、Set和Map的介面應用,正則表達式的應用,以及算符棧,操作數棧的知識
5.對課程的建議
經過本學期對JAVA的學習,我們對OOP也有所理解和感悟。因為疫情的原因本學期的JAVA課程都是在線上進行的,雖然是第一次經歷這種情況,但是我感覺對於學習效果還是沒有什麼區別的,畢竟這是一門電腦學科。在家寫PTA的這段時間,讓人更加專心,注意力更加集中。特別是知道這門專業課取消最後的考試,採用平時PTA和實驗的分數已經平時分作為最後的分數,我們對待PTA更加認真了,而且返校之後也不能大範圍集中,不管是筆試還是機考都不合適,這樣的學習經歷很特殊收穫也很大。