1. 程式人生 > 其它 >BUAA_OO_2021_第四單元總結部落格

BUAA_OO_2021_第四單元總結部落格

第四單元總結部落格

一.總結本單元作業的架構設計

  • 在UML單元的第一次作業中,最主要的我覺得就是對於各個UML成分的解析和相關書記結構的建立與維護。第一次主要建立了MyClass,MyInterface儲存相關的屬性和方法,為了避免有可能存在的子屬性先於parentId輸入的情況,我在這裡使用了先解析上層的class等等,再解析下層的param等,利用程式的順序執行性,得到所有的UML成員。第二次和第三次作業由於加入了順序圖和狀態圖,我新增了我自己的相關的UML成員類,使得解析部分函式可以解決這一部分新增的需求。

  • 解析函式又是另一個重點,這裡需要對所有的成員進行解析,將其對應地加入各自的parentId對應的類中或者新建一個成員類:

    private void parseUmlLifeline(UmlLifeline e) {
    MyLifeline myLifeline = new MyLifeline(e);
    id2Element.put(e.getId(), myLifeline);
    MyInteraction myInteraciton = (MyInteraction); id2Element.get(e.getParentId());
    myInteraciton.addParticipant(myLifeline);
    }

二.總結自己在四個單元中結構設計及OO方法理解的演進

  • 第一單元是求導的實現,可以說是整個OO課程的難度峰值,整個是從面向過程到面向物件,對於面向物件到第三次作業的時候對面向物件終於有了一些深入的理解,通過對遞迴下降等演算法的學習也有了一些瞭解,學會了用物件的觀點去看待問題。

  • 第二單元是電梯相關作業,這就涉及到多執行緒的相關設計和理解,在這個過程中,我對於多執行緒的實現和debug有了深刻的體會,對於一些執行緒安全的問題有了自己的看法。儘管這一單元與面向物件沒太大關係,但是我對於多執行緒有了非常直觀的理解。

  • 第三單元JML有點看圖寫話的意思,雖然直接對著規格嗯寫基本沒啥問題,但效能問題還是成為了一個令人困擾的問題。拋開效能,對於規格的直觀理解也是面向物件的一個重要部分,怎麼根據規格實現相關功能也成為了我們需要考慮的重要問題。

  • 第四單元個人感覺是第三單元的升級版,都需要我們閱讀大量的官方程式碼,然後實現相關的函式,只不過不同的是,UML並沒有直接給出方法的細節,而需要我們根據物件的特點自行實現,這也是UML單元最難的地方,需要我們對這個過程有非常清晰的瞭解。第四單元面向物件的特徵還是挺明顯的。

三.總結自己在四個單元中測試理解與實踐的演進

  • 第一單元主要是使用手搓的資料,一般是一些邊界或者特殊資料進行測試,後期也使用了評測機進行自動測試,總體來說還是比較簡單的黑箱測試。

  • 第二單元由於涉及到執行緒安全的問題,我們更多的需要靜態debug,也就是白箱測試,對於程式碼中存在的相關邏輯缺陷進行改進。

  • 第三單元第四單元很慚愧,基本沒有進行什麼有效的測試,大多是找一些比較強的資料進行定點爆破,沒有使用Junit進行單元測試。

四.總結自己的課程收穫

  • 首要的收穫肯定是程式碼能力的提升,每週的作業都是一個比較大的工程,而且我在第一二單元進行了大量的重構,這樣我每週的程式碼量都是比較大的,所以對於程式碼能力的要求也是非常高的,如何統籌大量的程式碼,如何優化一些既有的設計都給我帶來了一些挑戰。

  • 其次就是對一些新演算法的學習能力得到了提升,例如第一單元的遞迴下降演算法和第二單元的SCAN、ALS等,都需要我們在完成作業之前有相應的瞭解,這也是以後的學習中非常重要的能力。

  • 然後就是對於bug的解決能力,出現bug是非常常見的事情,怎麼去解決這個bug是非常值得考慮的。課程組提供了一些測試的方法和思路,這些也給我帶來了一些幫助。

  • 最重要的就是擁有了面向物件的思想,學會了用面向物件的角度看問題,這是一種思想層面上的提升,個人覺得是比技術上的具體提升更有意義的。

五.立足於自己的體會給課程提三個具體改進建議

  • 首先是相關作業的難度梯度問題。尤其是第一單元求導作業,第二次作業與第三次作業相比第一次作業的難度跨度太大,身邊有部分同學直接兩次連跪,這是我個人可以改進的部分。

  • 課程組可以提供類似遞迴下降等演算法的資料,我們自己尋找資料的過程是一個盲目且低效的過程,如果課程組能夠稍微指點一下的話可能會好一點的。

  • 其次就是希望互測的機制更加完善,應該想辦法讓大家的參與度提升,很明顯的,第一單元以後大家參與互測的熱情都非常低,這也有一些可以改進的地方,畢竟互測是一個發現別人程式問題的好機會,也是對我們自己debug能力的提升。