前言 本文章針對Java課程前三次PTA作業進行總結 一.作業過程總結 1.總結三次作業之間的知識迭代關係:關於前三次作業之間的迭代關係,第一次作業主要是關於Java的最基礎的練習,演算法都可以直接再main函數裡面實現,初步瞭解Java的一些基本的操作,輸入輸出,至於其它語句和C語言都是一樣的。 第 ...
前言
本文章針對Java課程前三次PTA作業進行總結
一.作業過程總結
1.總結三次作業之間的知識迭代關係:關於前三次作業之間的迭代關係,第一次作業主要是關於Java的最基礎的練習,演算法都可以直接再main函數裡面實現,初步瞭解Java的一些基本的操作,輸入輸出,至於其它語句和C語言都是一樣的。
第二次作業開始是關於日期方面的題目了,對於日期的相關操作都在一個類當中實現,只不過每個功能寫成了一個子函數,所以前後題目所需要的共同方法只能複製過來。
第三次作業也是關於日期方面的操作,演算法都在第二次作業基本實現了,只是題目對於編程的思想有了要求,要求用不同的類來實現每個功能,並且還有分類與類之間的關係來實現;這三次作業循序漸進,從我們學C語言面向過程的思想引入到Java面向對象的思想,題目實現的功能雖說一樣,但是所用到的知識點卻大有不同。
2.如何通過作業逐步從面向過程過渡到面向對象:前三次作業就是逐步引入我們到面向對象,學習了C語言之後這種面向過程的思想難以一下就改變過來,所以第一次作業就是面向過程的,我認為第一次作業就是先讓我們熟悉一下Java的一些基本操作,所以通過第一次作業熟悉基本操作之後,第二次的作業也不會過於陌生,通過第二次這一次過渡的環節:在一個類當中用子函數寫好所要實現的功能;再然後是第三次就引入了面向對象的思想,跟著題目給的UML類圖,寫好每一個類的功能以及類與類之間的關係,能夠較好理解並完成第二題,第三題就是需要理解好每個類的關係,就比如第三題當中的Year類,Month類,Day類,DateUtil類的關係,通俗的說就是一層包一層,Year類是最裡面的一層,其次是Month類,Day類,再全收在DateUtil類當中演算法第二題基本可以照搬,理解了第三題之後,第四題也就迎刃而解了,其實做完第三次作業第三題之後就體會到面向對象與面向過程的不同。
3.作業過程中遇到的問題及解決方法:在第一次作業當中除了一些基本演算法以及小bug之外,主要是對Java的一些輸入操作還不熟悉,後面百度了才知道要調用Scanner這個類進行輸入,該類在JDk當中寫好了,這在後面加深了我對類的調用的理解。
在第二次作業當中,第一題是一元二次方程,忘記考慮了二次項繫數不為0的情況;第二題是在非法日期上面存在問題,就是閏年2月不大於29,平年2月大於28;第三題第四題還是在於求下一天、下n天演算法上面存在一些問題,就是少算了幾天多算了幾天,閏年平年的考慮,這方面的解決方法無需多提,就是考慮周全就好。
第三次作業主要問題集中在第三題,由於除了課堂作業外第一次做這種面向對象題目還有些生疏,主要問題在於類與類之間的關係沒有整理好,調用方法以及返回值的問題,還有第二次作業的日期判斷bug沒有被測到,把演算法搬過來之後在第三次作業第三題被測到。關於類與類之間的關係以及方法的調用問題是詢問了同學之後基本上理解了,就比如我不知道如何在第三題Month類,Day類當中調用year的方法,後面理解了是根據類之間的關係結構來調用,這要先理清關係才能做;改完重新寫過日期判斷的方法的演算法後,由於求下n天前n天的時間複雜度太大,稍微改進了演算法,原先用的for迴圈,後面改進用的while(){switch}之後就符合在題目要求的時間限度。
第四題沒什麼問題,並且很快就寫完一次過了,問題都在第三題,解決了第三題的疑惑,第四題也就沒什麼問題了。
4.每次作業花費的時間比例:第一次作業做題目的時間前前後後花了5個小時左右,第二次作業也花費了5小時左右,第三次作業花費了10小時左右。
5.對編程過程的嚴謹性的認識及教訓:對於編程的嚴謹在於敲代碼之前構思好框架,對於一些特殊情況的考慮,就好比我的第三次作業主要修改程式的時間花在了日期判斷上面,因為搬用之前第二次作業的這個日期判斷的代碼,第二次沒被測出bug,導致後面做第三次作業花費大量時間尋找修改,雖說是小bug,並非硬核技術錯誤,但是確實花了最多時間去找去修改,真的是小錯誤浪費大時間,編程心態也受到影響,所以對於這次的教訓是刻骨銘心,實現演算法要先仔細地周全地考慮一些特殊情況。
二.OO設計心得
1.面向過程與面向對象的比較:通過這三次作業,從面向過程過渡到了面向對象的思想,面向過程主要是在於考慮思考如何去實現這個演算法,以過程為中心,更加側重與演算法實現方面的問題;面向對象在於考慮對象問題,把每個對象分開考慮,考慮每個對象所應有的屬性和方法。
2.面向對象設計的基本原則理解:把每個類分開考慮,考慮這個類應該是什麼,具有什麼屬性方法,不需要考慮這個類之外的事情,做好分內之事即可。
3.OO編程思維的理解:編程之前考慮應該能分成幾個類,每個類應該負責什麼,每個類所處的層次問題以及它們之間的關係。
三.測試的理解與實踐
1.測試對於編碼質量的重要性:一次性寫完沒有語法錯誤的代碼並不難,但是一次寫出完美無bug的代碼是比較難的。所以測試對於編程可謂是非常重要的環節,沒有測試過的代碼就像是沒有凈化的水,誰也不知道水裡面藏著什麼污垢。
2.假如讓你設計測試用例,你會如何做:我設計測試用例首先是用普通用例,首先這是檢查代碼大致的正確性,其次再是考慮一些特殊情況,儘可能全面地考慮所有特殊情況。
四.課程收穫
1.總結這四周來在OO方面的教訓及收穫:教訓是對於每個類裡面的命名要規範正確,做第三次作業在命名方面的錯誤也居多,寫完之後再修改工作量實在大。收穫是對於OO編程思想有了更好的理解,從當初學習C語言的面向過程思想轉變到了面向對象的思想。
五.對課程的建議
1.課堂建議:建議課堂側重一下講解知識點與舉例的比重,個人覺得可以更加側重於舉例與實際操作;其次是課間10分鐘時間可以安排一下,長時間聽課效果不是很好。