本單元的第一次做業中,涉及到了類圖的解析。在着手作這單元做業的時候,須要將每一種 UmlElement 再封裝,並在解析時,用 helper 單例來進行查詢處理(能夠附帶記憶化查詢)。
這裏能夠再細緻地說明一下,實際上,在本次做業中,我只再封裝如下幾類:web
UmlClass UmlInterface UmlOperation
對於其餘的元素,僅提取必要信息 id 並將其加入到相應再封裝類的數據結構中,供後續統計使用。
另外一方面,因爲 Class 和 Interface 的行爲很接近,因而我將 Interface設置爲Class的繼承類。因爲Class爲單繼承,所以須要在子類中改變相應邏輯, 將 Interface的 繼承類型改變爲「多繼承」。算法
//接口繼承「類」,由於 接口對於op和attr的邏輯與 class 幾乎相同 public class ExtInter extends ExtEle { private ArrayList<String> interFathers; ... }
第二次做業中新增了狀態圖和順序圖的查詢,所以,將helper拆分爲三個,並將對應的查詢指令分配給對應的 helper 。
須要注意的是,對於三個查詢規則,他們屬於 類圖helper 的負責範疇,應交給類圖helper處理。編程
循環繼承和後繼State的邏輯:
判斷時,從一個狀態(類、接口)出發,查找他們的後繼(father),並將全部當次已遍歷過的結點序列做爲參數傳入。若是當前結點已經在序列中,說明已經出現「迴環」,此時搜索結束,返回。這保證了不會產生死循環。設計模式
檢查重複繼承(類) //接口檢查時邏輯相似 public boolean rotate(String id, ArrayList<String> idList) { if (getId().equals(id)) { return true; } else if (idList != null && idList.contains(getId())) { return false; } ArrayList<String> tmp = new ArrayList<>(); if (idList != null) { tmp.addAll(idList); } tmp.add(getId()); if (fatherFlag) { return father.rotate(id, tmp); } return false; }
類圖:數組
第一單元的表達式,第一次接觸Java 和麪向對象的模式。將factor/term 封裝成類,重載相應的求導函數,最終實現了程序。數據結構
在這個過程當中:多線程
本系列做業中儘量地下降各個線程所在類之間的耦合(事實上這麼作也更方便編程,減小了線程間共享對象),對於泛型和接口的使用(雖然接口最後沒用上),簡化了不一樣類型共享隊列重複編碼。每次增量開發也更加順手,總的來看,相比第一單元有了很大進步。架構
本系列做業中重視設計模式和可擴展性,所以沒有重構的狀況發生,都是「增量式開發」。用了單例模式、生產者消費者、兩階段終止模式,進一步增強了接口和集成的訓練。函數
第三單元系列做業開始,從「數據」和「處理」兩個方向出發,分別按照 「設計數據結構」 和 「查詢實現類helper」 互相促進設計。寫代碼時先實現查詢接口,後根據查詢的數據需求實現解析輸入。
相似於電梯實現,將路徑查詢算法獨立封裝,並實現了算法的複用。
注意到時間複雜度的要求,經歷了從 靜態數組-> 優雅的「hashmap"-> 結點再映射的靜態數組 的架構變化,避免了複雜度超時。學習
第四單元則是對第三單元的「經驗」的充分使用:將全部的查詢分配給對應的helper,將全部的數據封裝成合適的數據結構方便helper調用。(很好很清晰)
從這一點看,第四單元的做業其實和第三單元很相似。
針對壓力測試,因爲第一單元做業中強測的BUG, 從第二單元起,對每一次做業的測試都用Jprofiler監測CPU時間,在後面很好地避免了相應的問題。
做爲一頭大三的鹹魚,本學期的OO課,更多的是對本身進入大學來學得的計算機知識的「應用」。面對每一個單元不一樣的做業,在學習新的面向對象思想的同時,實際上相應地複習了學過的知識。
學習了一些測試的方法,黑盒白盒測試,對於之前學過的web開發(rails),理解了其設計的理念。
學習了一些面向對象模式,將其與C++結合起來。
對多線程有了更深的理解,回顧了OS課程。
將一些算法運用到「實際」中,學着去寫算法的變式。
將一些思考到的東西應用到本身作OS助教的實際中
實現最後一次做業時,感受指導書說明不是很詳細,對於細則說明缺失不少,給人一種強烈的"出題人摸了"的感受。相應的,對於測試樣例的設計方向,應當在理論課上提供得更明確一些。
理論課的課上重點有時不是很明確,聽完一節課有時不知道重點所在,與做業聯繫不是很緊(前兩單元)
上機難度變化略大,前幾回上機難度過大。
都結束了!
壓力馬斯內! 2019.6.19 16231213 By:DorMouse