1.前言正則表達式
這應該是本學期最後一次寫做業總結了吧。整體來講,對做業的節奏也差很少掌握了,做業作起來的效率也更高了。雖然和以前的做業同樣,做業中都要用到新的知識,可是相比以前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但整體而言,這幾回做業還算完成的比較好。數組
2.做業過程總結框架
相比前兩個單元,此單元的三次做業每次做業只有一道題。作題目沒有了像以前那樣的優先級,而是全程專一一道題。做業九則是經過雨刷程序功能擴展設計考察對類的封裝、繼承、多態的掌握度,做業十是經過 統計Java程序中關鍵詞的出現次數考察對工具類List、Set或Map的掌握程度,做業十一則是設計表達式求值的程序,考察對棧的使用,並檢驗本身以前對正則表達式的掌握程度。總的來講,三次做業考察的重點是並列的,但都須要有以前學到的基礎知識。經過這幾回做業,對面向對象以及其基本原則有了更深的理解。函數
做業九剛開始看題目的時候感受總體不難,可是仔細一想,須要在繼承與組合的方法之間斟酌,是本身寫出的程序可以使得程序在符合單一職責原則、迪米特法則、合成複用原則的基礎上具備良好的擴展性(開-閉原則)、里氏代換原則、接口隔離原則及依賴 倒轉原則。將題目寫出來問題不大,可是如何使代碼實現要求很難。我開始使用了繼承的方法,可是由於子類要實現父類的方法,使得代碼寫到很長。我開始嘗試去網上找一些例題,查找了一些組合的方法來解決問題。工具
做業十給人一種很簡單的感受,但實際卻不簡單,剛開始作的時候以爲這是到用正則表達式匹配,而後返回匹配正確次數的題目。但開始寫主函數代碼的時候,就碰到了問題。如何輸入數據呢?是一行一行輸仍是總體用一個StringBuilder類型的參數將總體接收呢?如何判斷輸入的數據是否爲源代碼呢,遇到多行註釋該如何跳過呢?諸如此類的不少問題,這個題目在細節上處理很麻煩。第一次的時候是直接用一個StringBuilder類型的參數將總體接收,發如今遇到單行註釋的時候很難講數據處理,就改成了一行一行輸入,並在每行結尾加上換行符做爲每一行結束的標誌,經過換行符將數據切割成字符串數組,對每一個字符串進行正則匹配,在每一行遇到單行換行符後直接跳過字符串後面的數據轉而匹配下一行的數據,在遇到多行註釋時,同理跳過知道遇到下一個註釋符是繼續匹配。由於TreeMap能夠自動排序,因此選擇TreeMap來裝載獲得的數據。由於53個關鍵詞是不重複的,而關鍵詞出現的次數是能夠重複的,因此關鍵詞爲key,出現的次數對應value。本題存在疏漏,即題目測試未給出題目所測的53個關鍵字是以什麼來排序的。而是叫咱們去網上找,可是網上找的53個關鍵字的前後順序是不同的,我開始覺得是按拼音來排序的,無論怎麼作,正確的測試點只能過一個。看到有網站上寫到53個字也是按拼音排的,惟一不一樣的是它將null放在了末尾,後來我嘗試按這種方法排序,結果大部分測試點都過了。最後一個測試點過不了,至少我到最後都不知道最後一個測試點測的是什麼數據。學習
做業十一的表達式求值,則須要用到本身徹底沒有接觸過的知識,棧。開始基本上徹底不知道棧是如何使用的,學着網上的一些例題和相關資料纔有了一個大體的輪廓。大體思路是經過用一個棧來裝數字,一個棧用來裝符號,經過設定符號的優先級,來對數據進行計算。大體思路是將輸入的字符串傳入到一個字符數組中去,而後對字符數組遍歷,用準備好的兩個棧,分別來裝載數字和字符,當輸入比以前字符優先級的字符時,對以前的數據進行計算。開始通過測試的時候發現輸入帶括號的數據時很容易出錯。經過設置一個條件語句,判斷是否掃描到括號,若出現右括號,則從後往前計算,並不斷刪除已使用的符號,直到遇到左括號爲止。此題考慮數據錯誤的狀況有不少,須要逐一判斷,整體上花了很多時間。測試
本單元的三次做業在大致上花的時間大概差很少,按順序來三次做業大概花3:3:4的時間,整體上3次做業難度上整體難度相差不大。可是實際花的總時間應該能更短。每次拿到題目,一上來就是想到什麼寫什麼,很容易卡殼。通過這幾回的做業,我更加深刻的理解面向對象的理念。在拿到一個題目時,應該先找出其中有哪些對象,而後經過一些方法將它們之間聯繫起來,造成一個大體的輪廓,同時也便於以後對疏漏的方法進行補充、對代碼進行擴充。而不是想到什麼寫什麼,這樣到後面很容易出現本身用到的一大串的方法可能到後面用不上或者會影響代碼的可拓展性而不得不捨棄。在添加新的方法時,應該考慮會不會影響代碼的可擴展性和複用性,這樣可以爲以後增長新方法省下很多時間。網站
3.OO設計心得ui
①里氏替換原則:通俗的來說就是:子類能夠擴展父類的功能,但不能改變父類原有的功能。在寫代碼時,常常會設計接口或抽象類,而後由子類來實現抽象方法,其中子類能夠實現父類的抽象方法也必須徹底實現父類的抽象方法,不然編譯器就會報錯。關鍵點在於子類不能覆蓋父類的非抽象方法。若是子類對這些非抽象方法任意修改,就會對整個繼承體系形成破壞。而里氏替換原則就是表達了這一層含義。在繼承父類屬性和方法的同時,每一個子類也均可以有本身的個性,在父類的基礎上擴展本身的功能。當功能擴展時,子類儘可能不要重寫父類的方法,而是另寫一個方法。編碼
②依賴倒置原則:依賴倒置原則的包含以下的三層含義:高層模塊不該該依賴低層模塊,二者都應該依賴其抽象,抽象不該該依賴細節,細節應該依賴抽象。打個比方奶茶店賣各類各樣的奶茶,奶茶店就是高層模塊,各類各樣味道的奶茶就是低層模塊。當咱們想到奶茶這個名詞時,咱們會想到,奶茶店賣奶茶,奶茶有冰鎮奶茶,酸奶等這類具體的東西。奶茶就比如一個由各類各樣奶茶共享的接口,而奶茶店也依賴奶茶這個抽象類。
③接口隔離原則:通俗來理解就是,不要在一個接口裏面放不少的方法,這樣會顯得這個類很臃腫不堪,並且後續維護與擴展也十分麻煩。接口儘可能細化,一個接口對應一個功能模塊,同時接口裏面的方法應該儘量的少,使接口更加輕便靈活。
④類設計心得:在拿到題目後,應先找出題目中的對象,經過構造方法使他們之間產生聯繫,一開始就要構造一個大體框架,把幾個大模塊設計成類,遵循單一職責原則和合成複用原則,並注意考慮其可擴展性和複用性,多使用接口、抽象類、多態等技術來設計類。儘可能使用組合而不是繼承。類與類之間可經過關聯,聚合,依賴等關係來實現代碼的複用,從而提升功能執行的效率。
4.測試的理解與實踐
測試對於編碼質量的重要性:測試可以極大的減小代碼的錯誤以及漏洞,同時它還可以提醒寫代碼的人對運行時間過長冗雜的部分進行方法的改進。只要是提交的代碼便會有錯誤的可能,而測試正是減小這些錯誤的最好的工具。測試還可以檢測代碼的效率,是否存在冗長多餘的部分,經過測試能夠提升代碼的質量。
只有不斷的練習,才能熟能生巧。經過練習,才能真正的將所學的知識運用起來,才能更加深刻的理解,更好的掌握新知識。
5.課程收穫
經過本單元的學習,我對類的封裝、繼承、多態,抽象類,接口的使用有了更深入的認識,基本上已經能過熟練使用。增強了我對工具類List、Set或Map的認識,學會使用棧來解決題目。經過這幾回做業,我認識到本身的不足,更能深入體會學無止境這一道理,只有經過不斷地學習,懂得東西纔會更多,只有多動手,才能更加清楚發現本身的問題所在,加油。
6.對課程的建議
每次的做業老是和上課所學的知識不能緊密聯繫,上課所講的進度每次都要比做業超前,以致於每次作實驗時都要從新撿起之前的知識,這樣要花費更多的時間。但願之後講課能對標上做業,也但願老師能夠帶領咱們多多練習,讓學生也能看看老師是如何解題的。