0.前言
本次的做業相對於上一次的做業來講是有必定的難度的,須要花費大量的時間去完成。此次的做業有許多不懂的地方,可是也會收穫許多新的知識。
1.做業過程總結
①總結三次做業之間的知識迭代關係;正則表達式
第一次做業的第一題是求水文數據校驗及處理,主要的應用是正則表達式的使用;第二題是蒙特卡羅方法求圓周率,就有些承上啓下的做用力了;第三題圖形繼承則要求咱們實現圖形類的繼承,並定義相應類對象並進行測試,這很關鍵,寫好了這些題,之後的題目就比較簡單了。第二次做業的第一題是圖形繼承與多態,要求咱們掌握類的繼承、多態性及其使用方法,這比上一次的做業就有着更深一步的看法,有了多態這一感念,而第二題的一元多項式求導也與第一題有着殊途同歸之妙;第三次做業的第一題是圖形卡片排序遊戲,要求咱們掌握類的繼承、多態性使用方法以及接口的應用,這又比上一次的做業多了一項接口,讓咱們明白了ComparableTo這一接口的使用,第二題圖形卡片分組遊戲與第一題差不了太多,只是增長了一些cardlist的使用,第三題是一道附加題求素數,考查算法設計與優化,可是我設計的算法老是運行超時,沒有獲得很好的優化。算法
②如何經過做業逐步理解面向對象的封裝性、繼承性與多態性三大技術特性;編程
封裝是面向對象編程的核心思想,將對象的屬性和行爲封裝起來,而將對象的屬性和行爲封裝起來的載體是類,類一般對用戶隱藏其實現的細節,這就是封裝的思想,在Java中一般經過創建一個實體類,用來封裝對象的屬性和行爲,經過setXxx()和getXxx()方法封裝起來,其實此次做業的每個代碼中都用到了封裝這一技術特性;繼承性簡單來講就是使子類的對象擁有父類的所有屬性和行爲,同時能夠增添本身的所特有的屬性和行爲。這樣能夠節省寫共同具備的屬性和方法代碼的時間,有利於代碼的複用,此次做業中我常常用到extends,這樣便能更好的、高效的利用好代碼;多態性,簡單來講就是一個程序中同名的多個不一樣方法共存的狀況,一般使用方法的重載和重寫(也叫覆蓋)來實現類的多態性,這在最後一次的做業中能夠更爲深入的體現出來,class Card implements Comparable<Card>就是一個很好的例子。框架
③做業過程當中遇到的問題及解決方法;
函數
第一次做業的第一題是求水文數據校驗及處理,主要的應用是正則表達式的使用,可是我卻不太明白正則表達式的使用,經過不斷的學習,我如今有體會到一點了;第三題圖形繼承我開始不能獲得很好的輸出,當我把園,矩形這些分開來後就能夠獲得較好的輸出。第二次做業的第一題是圖形繼承與多態,在判斷輸入數據是否合法是,我使用了四個不一樣的變量來返回,這樣我就能在輸出的時候更好的判斷;第三次做業的第一題是圖形卡片排序遊戲,經過請教同窗我知道了private ArrayList<Card> cardlist = new ArrayList<Card>();的使用方法,讓咱們明白了ComparableTo這一接口的使用,第二題圖形卡片分組遊戲與第一題差不了太多,只是增長了一些cardlist的使用就很好的解決了問題,第三題是一道附加題求素數,考查算法設計與優化,可是我設計的算法老是運行超時,沒有獲得很好的優化。單元測試
④每次做業花費的時間比例;
學習
第一次做業由於有比較難的一題,因此花費的時間比較多,大概是做業的限制時間內;第二次做業則是第一題大概花費了一天的時間,第二題時間無限長;第三次做業時間花費的就比較有意思了,第一題大概花費了兩天時間,第二題半天。測試
⑤對編程過程的嚴謹性的認識及教訓;優化
編程的量愈來愈多,代碼愈來愈複雜,在命名一些名稱的時候,儘可能不要用太多與複雜的名字,應該簡單易懂,在編程的過程當中,常常會犯一些在語法上的小錯誤,在看似正確的狀況下卻得不出想要的答案,就是這樣的一些小錯誤卻要花費大量的時間來查找,這樣的時間每每比編寫程序的時間都要長,這無疑是浪費時間的,加入咱們在編寫程序的時候想得更爲完整,思考的更爲精密,或許就不會出現這樣的問題,隨着咱們知識的掌握,這種問題會愈來愈少。
2.OO設計心得
①對面向對象三大技術特性之間關係的理解編碼
封裝是面向對象編程的核心思想,將對象的屬性和行爲封裝起來,而將對象的屬性和行爲封裝起來的載體是類,類一般對用戶隱藏其實現的細節;繼承性簡單來講就是使子類的對象擁有父類的所有屬性和行爲,同時能夠增添本身的所特有的屬性和行爲;多態性,簡單來講就是一個程序中同名的多個不一樣方法共存的狀況,一般使用方法的重載和重寫(也叫覆蓋)來實現類的多態性,多態實際上是在繼承的基礎上的。
②面向對象設計的基本原則理解(單一職責原則及「開-閉」原則)
單一原則:按字面理解,單一職責原則就是本身只負責本身的事,不須要理會別人的事。若是瞭解面對對象編程,那麼應該會很容易瞭解這個單一職責原則。
「開-閉」原則:是面向對象世界裏最基礎的設計原則,它指導咱們如何創建一個穩定,靈活,可擴展的系統。開閉原則定義以下:一個軟件實體(如類,模塊和函數)應該對擴展開放,對修改關閉。
③OO編程思惟的理解
面向對象將事物都當作對象,將具備相同特徵的實物看做類。經過對類與對象的繼承,封裝,多態的實現,完成模擬現實從而決絕問題。
④類設計心得
須要把有相同性質的東西方進同一個類裏面;類與類之間的關係要分清楚;不要在類中使用過多的基本類型。
3.測試的理解與實踐
①測試對於編碼質量的重要性
一個好的編碼必需要通過不斷的測試纔可以使用,假如一個編碼經不起屢次的測試,純在諸多的bug,這必然是一個不合格的代碼,這種編碼是不能用在系統上的,這會引發諸多的問題。
②查閱資料,假設使用Junit進行程序的測試是否可行
可行,在平時的開發當中,一個項目每每包含了大量的方法,可能有成千上萬個。如何去保證這些方法產生的結果是咱們想要的呢?固然了,最容易想到的一個方式,就是咱們經過System.out來輸出咱們的結果,看看是否是知足咱們的需求,可是項目中這些成千上萬個方法,咱們總不能在每個方法中都去輸出一遍嘛。這也太枯燥了。這時候用咱們的單元測試框架junit就能夠很好地解決這個問題。
4.課程收穫
大概明白了對面向對象三大技術特性之間的關係,具備了更爲進一步的面向對象的思想,培養了我不懂就問,虛心請教的好品質,而且擁有了一些獨立思考的想法。
5.對課程的建議
①第三階段做業難度、題量的建議
有些題目難度較大,有些適中,感受還好,題量也還好,兩三題的樣子。
②課程內容講解方面的
老師講解的內容仍是較少,大部分的內容都是咱們本身學習,老師應該多講一些經典例題。