OO第四單元博客

第四單元博客

這個單元的做業,emmmm助教們作的工做仍是一如既往的多,咱們只負責添一添代碼,最後一次做業了,感謝各位助教和老師,同時也但願我能順利經過這最後一關。java

架構設計

第一次做業架構展現

第一次做業須要實現10個命令,須要熟悉staruml的文件格式,同時還須要區分類與接口,理解繼承與實現的不一樣。 本次做業的實現用了5個類:算法

  • MyUml類,用於實現類和接口的相同行爲
  • MyUmlClass類,用於實現類相關命令,是MyUml的子類
  • MyUmlInterface類,用於實現接口相關的命令,也是MyUml的子類
  • MyUmlOperation類,用於實現類中操做相關的命令
  • 最後就是須要實現的MyUmlGeneralInteraction類

第一次做業實現分析

此次做業的命令實現起來都不困難,主要仍是對命令的含義理解透徹以及把可能的狀況考慮全,容易出現錯誤的地方有:設計模式

  • 沒有考慮到接口能夠多繼承。接口與類不一樣,接口能夠多繼承而一個類的父類只有一個
  • 關聯端的id和reference要區分清楚,reference纔是表示這個端所代指的類或接口
  • 在Generalization元素出現時,其中包含的父類的元素可能尚未出現, 因此須要注意讀取元素時先讀取類和接口的定義,而後再讀取其餘元素保證id老是能夠索引到正確的類或接口
  • 在進行寬度優先搜索時,注意標誌位清空o(╥﹏╥)o...

在實現時,Map數據結構起到了很大的幫助,因此要善用這個數據結構實現id到類和接口的快速索引。數據結構

第二次做業架構展現

與第一次做業相比,第二次做業的難度就大大下降了,這少不了助教團隊和老師對你們的仁慈...這裏再一次感謝助教和老師們。多線程

第二次做業相比第一次做業增長了四個類。架構

  • MyUmlInteraction,記錄interaction的相關信息
  • MyUmlLife,記錄lifeline的信息
  • MyUmlMachine,記錄狀態機的信息
  • MyUmlState,記錄狀態的信息

由於第二次做業在助教團隊的寬宏大量下難度大大下降,因此對於狀態圖和順序圖的命令的實現,這裏再也不贅述,重點講一講三個規則檢查的實現。測試

  • 規則1:類的屬性中不能有重名,類的屬性和類的對端名稱也不能重
    • 這個相比其餘兩個規則很好實現,只須要使用set記錄便可
  • 規則2:不能循環繼承
    • 這裏一開始理解出錯了,把實現也加了進來,在討論區看到老師的回答才改過來,因此要區分號實現和繼承這兩個不一樣的關係。而環的檢測算法就很簡單了,深搜後發現有迴向邊便可。
  • 規則3:不能重複繼承
    • 這裏和規則2不同,這裏須要考慮類對接口的實現。而重複繼承的檢測算法只能適用深搜,在回溯時檢查有沒有重複繼承,不知道有沒有更好的辦法。

OO理解方法演進

通過這四次做業, 對於OO的理解愈來愈深:spa

  • 第一次做業由於對java語言的掌握還不夠熟練因此沒有顧上管OO...只想着把功能實現對了就好,並且當時時間也很倉促沒有好好寫代碼,只有在以後幾回做業中,纔在慢慢的重構中逐漸理解OO
  • 到了第二單元,須要實現多線程,還好以前的經驗讓我對多線程掌握了一點皮毛,但是這個單元在使用多線程時仍是漏洞百出,好比鎖的錯誤使用和信號量的錯誤使用,可是通過不斷的重構,也慢慢的體會到了面向對象的一點皮毛
  • 在第三單元寫JML時,我理解了爲何程序要先肯定好規格再動手寫代碼,理解了設計比實現更重要這個道理。

測試理解與實踐的演進

  • 一開始只會用IDE自帶的console進行交互測試,在測試時也只是本身拍腦殼想測試樣例,覆蓋度和完備性徹底不足
  • 而後學會了使用JUNIT,真的好用

課程收穫與感悟

  1. 相對於助教和老師們的工做,咱們作的真的不多了
  2. 對java語言掌握更熟練,對多線程掌握更熟練
  3. 學會了軟件測試的方法
  4. 對設計模式有了必定的瞭解
  5. 對UML的類圖,狀態圖和順序圖有了更深的理解

課程建議

  • 怎麼說呢,天然語言不像機器語言,表達的準確性還不夠,指導書上一些規定的敘述還不夠完善。不過已經很好了。
  • 給咱們的工做量再少一些,主要是感受助教們作的工做好多,把格式檢查這些都作了。
  • 惋惜目前尚未一個準確的量化的判別標準用於判斷代碼是否符合面向對象的特性和風格,因此在互測時或許能夠在準確性的基礎上,增長對代碼是否足夠OO的檢查

最後再一次感謝老師,感謝助教團隊。線程

相關文章
相關標籤/搜索