第一次做業理解上並不困難,簡言之是一個多項式合併同類項,但對於我這個第一次使用java進行編程的小白,仍是充滿了血和淚。java
在此次課程以前,我稍微對java有一些瞭解,但也僅僅只是一些瞭解,不只許多基本語法還不清楚,並且對於面向對象更是毫無頭緒。好在java的語法與C語言比較類似,因此在第一次做業的時候,簡單學習了java的基本知識後(甚至包括如何在eclipse中新建java項目,怎麼運行java程序),一邊百度,一邊寫出了第一次做業,但寫出來的東西就又引出了另一個問題——什麼是面向對象?在第一次做業中,我只有一個java文件,在寢室Android大佬的「點撥」之下,對面向對象有了一個「除了主類至少還得有個其餘什麼類」的印象,因此在最後寫出了一個四不像程序——整個程序有兩個類,一個是計算類,一個是主類,主類乾的惟一一件事就是調用了計算了的calculate方法,而這個calculate方法不過就是以前main方法換了個名字而已。因此指導書中「注意體會過程式和麪向對象式程序的區別」讓我困惑了好久,直到拿到了互測的同窗的代碼時,我才明白,原來面向對象是這樣的啊。程序員
在上一週學會了java和麪向對象的基本操做之後,這一次寫出來的程序至少有了一個面向對象程序的樣子了,或者說在指導書的「逼迫」下,寫出了6個類,從而第一次體驗到了寫面向對象程序的感受。可是這一次程序寫得也很是生疏,一個顯著特徵就是其中兩個各自長達100多行的方法,不由仍是讓我回憶起了一絲絲面向過程程序的風格,並且正是因爲這兩個長度略顯不合理,邏輯複雜的方法使得我第三次做業吃了不小的虧。正則表達式
此次做業要求是使用繼承和接口,改寫一個新的調度類,從而實現請求的捎帶。由於第二次的時候採用了模擬的方式,因此這一次沒有進行大規模的重寫,可是正如上文所說,上週寫的兩個各自長達100+行的複雜方法,到了這周,我已經快看不懂了!!!因爲整個程序的主要邏輯都在這兩個方法中,並且因爲風格的不統一(尤爲是註釋風格,有的註釋是解釋的前面的代碼,有的是解釋的後面的代碼),致使我能夠說到如今爲止,都尚未徹底理解這段代碼的各類精細操做。這也直接致使了上週沒有被找出bug的程序修改後,到了這周連公測都錯了4個。
做業具體內容分析
=編程
這次做業公測沒有被找出bug,互測被找出了一個bug,這個bug屬於輸入判斷時沒有判斷符號後面是否跟着有效的多項式,致使錯誤的輸入格式卻算出了一個結果。而我找的這我的則對於邊界處理不傷心,不管是數據超過整形或是單項式數目過大,都會致使其程序崩潰。
|統計量|統計值|
|:-|:-|
|類數量|2|
|方法數量|8|
|代碼行數|246|
eclipse
由於以前幾乎沒有接觸過java和麪向對象編程,在輸入時我就遇到了問題,爲何沒有一個方法可以像C語言同樣輸入啊,最後百度了大量資料,終於明白了輸入竟然也是用的對象輸入
ide
Scanner getInScanner = new Scanner(System.in);
PloyTotal = getInScanner.nextLine().replace(" ", "");
getInScanner.close();
最開始進行輸入時,我採用的是一個字符一個字符讀入,而後採用狀態機的方式判斷輸入是否合法並把數據儲存至內存中,後來看了助教們給的視頻後,我開始去學習正則表達式,結果就發現了一片「新天地」。能夠說正則表達式的確是字符串處理的神器,既然已經有人造好了輪子,那麼直接使用它不失爲一種減少工做量的好方法。在後來的學習中,我也瞭解到正則表達式本質上也就是一個狀態機,也就是說正則表達式的時間複雜度能夠理解爲O(n),基本上就是最理想的速度了,不管從編程效率仍是執行效率上來講,正則表達式都是一個不錯的選擇。模塊化
這一塊能夠說是oo這門課最基本的一個注意點了,不只有數據自己不能超過所申請的內存空間所能表示的範圍,同時數據量也須要注意。好比第一次做業要求可以處理20個多項式,每一個多項式含50個單項式,個人室友一開始將整個字符串進行正則表達式匹配,卻發現當大約輸入了300個左右的單項式後就會報內存溢出的錯誤,而我採起了先將字符串分割爲各自幾個多項式,而後又將多項式分解爲單項式進行最後的匹配,這樣邏輯清晰,也保證了數據量處於可控的範圍內。學習
這次做業公測和互測都沒有被找出bug,我測試的這我的由於沒有按照助教要求必須處理前100條請求而給判了一個imcomplete之外,也沒有找出其餘錯誤。
|統計量|統計值|
|:-|:-|
|類數量|6|
|方法數量|24|
|代碼行數|533|
測試
這句話是在上學期學計組的時候高小鵬老師說的,我的認爲,面向對象的目的其實就是爲了實現高內聚低耦合的目標。在第二次做業中,我第一次編寫了嚴格意義上的面向對象程序(雖然其中還包含有一些面向過程編程的風格)。我我的理解,面向對象的目的就是爲了將目標抽象成爲一個一個的對象,將其自己的性質和行爲抽象成相應的屬性和方法,經過將具備相關性的元素集合在一塊兒,將其內部的操做封裝起來,從而使得程序更加模塊化,便於大規模開發。我認爲在後面的做業中,咱們也應該秉承着「高內聚,低耦合」的思想,同理,測試時也能夠採用模塊化的測試方法來提升測試效率和覆蓋率。此次做業中的兩個超長方法算是面向對象的敗類,也直接致使第三次做業的大量返工,但願之後可以注意。ui
這次做業公測出現了4個錯誤,互測沒有出現錯誤。我測試的同窗對於輸入字符串格式判斷不夠嚴謹,被我挑出了兩個bug。
|統計量|統計值|
|:-|:-|
|類數量|7|
|方法數量|37|
|代碼行數|911|
以前寫程序的時候一直比較「爲所欲爲」,變量方法命名也很隨意,註釋也不規範。因此在第三次做業時,須要在第二次做業的基礎上進行修改,卻發現已經難以看懂上一週本身的代碼了,不少變量和方法用的也是亂七八糟的,可是根據本身的理解進行修改後,卻發現程序又出現了各類稀奇古怪的bug,可能這就是程序員口中的「祖傳代碼」吧。因此在第三次做業後,我在網上翻閱了Google的java代碼規範,而後將本身的程序徹底按照其規範進行了重寫,重寫後,不只代碼整潔了不少,並且以前一直解決不了的bug竟然在重寫過程當中就被發現而後順便就消滅了。在這裏也給你們一個Google 開源項目風格指南做爲參考。 心得 = 總的來講,oo這門課對於我而言是一個全新的挑戰。做爲一個大學前沒有接觸過編程,oo以前沒有有計劃地接觸過上百行編程的菜雞而言,oo是一門須要花大量時間投入其中的一門課程。互測階段的找bug機制也讓我感受耳目一新,可是我也常常聽周圍的同窗說有人惡意地找bug,惡意申報無效做業,卻也讓我以爲有時這門課進入了歧途,畢竟這門課的主要目的是爲了讓你們學習面向對象編程技術,交流學習經驗的,而不是處處尋找其餘人我的信息的。我的認爲也有一些辦法可以儘可能避免這種狀況發生,,好比若是在申訴階段同一我的有大量bug被申訴,那麼應該相應地倒扣測試者的分數;分發測試代碼的時候後臺自動刪掉同窗們不當心上傳的.classpath .project文件等。總的來講,但願oo可以愈來愈好,也但願你們可以不忘初心。