在本單元中,因爲UML圖具備比較清晰的樹形結構,所以我對其中須要進行查詢操做的元素進行了包裝,在樹的父節點中存儲全部孩子的引用。考慮到性能問題,我採用了緩存機制,一次查詢後儘量緩存已經遍歷過的信息,以減小遍歷次數。設計模式
本單元我對架構沒有作出修改,只是進行了增量開發。所以,下面展現本單元第三次做業的UML類圖並進行分析:緩存
在本單元做業中,我採用Main類做爲主控類,MyUmlGeneralInteraction類實現相應的接口,並將UML元素分派給三種圖類進行構造,同時調用三種圖類中的相應方法進行查詢和驗證。ClassModelDiagiam、CollaborationDiagram和StateChartDiagram三個類分別對應類圖、順序圖和狀態圖,它們管理相應的Elements並處理查詢和驗證操做。多線程
在四個單元的做業中,個人架構設計從最初的按照數據簡單拆分類,並將相應的方法封裝到類中,演進到如今的結合數據特色、類之間的關聯關係以及一些OO原則和設計模式進行類的構建,並由此設計出類中的屬性和方法。架構
經過一學期OO課程的學習,我對面向對象的理解從簡單拆分類演進到各類設計模式和設計原則,並看到了OO帶來的好處:模塊化、層次化、可擴展性和隱藏實現細節等。在做業開發的過程當中,我從最開始的直接編碼,逐漸演進成如今的先進行架構設計,肯定每一個類中的屬性和方法,以及類之間如何進行交互。這樣,在最後只須要對方法進行填充便可。這也體現了一些設計和實現分開的思想。模塊化
測試是我在本學期中比較薄弱的環節。在前兩個單元中,我主要依靠人工構造一些數據對程序進行測試。雖然人工構造能夠覆蓋一些極端的邊界狀況,但仍不及自動化的對拍測試高效全面。這致使我在第一單元第三次做業中出現了Wrong Format判斷錯誤的狀況。並且對於多線程程序來講,人工構造數據並進行驗證的效率更爲低下。性能
在第三單元中,我主要依靠JUnit進行單元測試,並與他人程序進行對拍。因爲JUnit能夠查看覆蓋率數據,並能夠方便地進行迴歸測試,在開發階段的測試仍是比較方便的。對拍測試經過大量數據的生成來達到覆蓋測試的目的,實際效果也十分不錯,幫助我發現了一些bug。在這兩種測試手段的幫助下,我無傷通關了本單元的測試。單元測試
在第四單元中,因爲須要畫圖,個人測試手段又迴歸了人工構造數據。果不其然,在最後一次做業中再次出現了循環繼承判斷錯誤的狀況。因而可知,必定程度上的自動化測試仍是十分必要的。學習
經過OO課程的學習,我瞭解了面向對象的基本原則和一些設計模式,掌握了Java中小型程序設計,入門了多線程程序設計以及規格化和模型化設計。測試
在第一單元中,我接觸了層次化設計的思想以及抽象、封裝、繼承和多態等基本OO特性,並在三次做業的訓練中,逐步使得本身的程序有了一些OO的特色。編碼
在第二單元中,我接觸了多線程程序的設計,並學習了線程同步的一些方法和經典的生產者-消費者設計模式。經過三次電梯做業的訓練,我初步掌握了多線程程序的同步方法。
在第三單元中,我接觸了規格化程序設計,並瞭解了JML這種建模語言。雖然在現在的互聯網軟件開發中,如此嚴格的形式化規格表述並不常見,但形式化的規格方便進行嚴格的正確性驗證,能夠應用在高可靠性領域。
在第四單元中,我接觸了模型化設計,並瞭解了UML這種建模語言。經過做業訓練和實驗訓練,我從結構層次和應用兩方面認識了UML。
經過12次代碼做業的訓練,個人Java代碼量達到了數千行。在這個過程當中,我也逐步上手了Java中小型程序設計的一些基本方法。
OO課程受線上教學帶來的影響較小,僅僅是理論課部分再也不能進行現場交互了。這一點經過課堂討論和課後問卷獲得了必定程度上的彌補。可是我認爲一些課堂討論題難度較大,不適合在課後馬上進行討論,所以必定程度上影響了討論的效果。