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