OO第四單元總結——我的踩坑歷史大全與頓悟之路
一、第四單元架構設計
這三次作業中架構一脈相承,第一次作業搭建類圖分析,第二次作業加入順序圖、狀態圖分析,第三次作業加入有效性檢查器。下面以第三次作業為例,談架構設計。
-
解決輸入順序導致空指標的情況——多次遍歷elements:
先建立UmlClass,UmlInterface等的索引表,避免element中相關元素還沒有被輸入,如UmlGeneralization中target還未被輸入等情況。
如先把UmlClass,UmlInterface存進HashMap裡,最後再遍歷UmlGeneralization。
-
對設計到請求操作的屬性,建立Myxxx,(如MyUmlClass),並在其中建立其擁有的屬性層次,封裝好相關請求操作。
二、在四個單元中架構設計及OO方法理解的演進
感謝OO給我一個頓悟如此多思想的機會,下面將結合我踩過的坑,談談我在架構設計以及OO思想方面上的學習之路。
-
第一單元初探OO——函式求導:
-
慌忙的開頭——趕時間趕成面向過程
把預習作業拖到第一週的後果,就是第一週忙於學正則表示式趕作業,一邊趕預習作業。直接導致寫作業的時候巨慌沒架構沒思考
-
頓悟的後繼——領悟抽象
遞迴下降,抽象加減乘除的運算成為一個項,只考慮項與項之間的計算,分層處理。這些都是我在程式設計作業完成之後學到的寶貴的東西。當然學到最深刻的東西還是面向物件這種抽象方法在解決複雜問題時的簡便性,以及分析問題,架構結構
-
-
第二單元多執行緒——電梯換乘:
- 混亂的開頭——過度耦合的混亂
在電梯問題裡,繼續踩新的坑,繼續學習。第一週把兩個不該放一起的結構(調取器和等待隊伍)寫在了一起,導致出現了玄學bug連弱側都沒過,謝謝助教的幫助,重構解耦解決了問題。 - 頓悟的後繼:
分析清理解透問題,是我在這單元學到的最寶貴的思想。之前之所以會把錯誤結構耦合,本質上是不理解結構的作用,不理解此結構為什麼適配這個情境。
莽必出事兒,小是寫千行程式碼,大是程式根本不能用。
在第二單元中還學到了生產者消費者模式,集中/分散式排程,處理死鎖,優化排程策略等。
- 混亂的開頭——過度耦合的混亂
-
第三單元JML——社交網路:
- 細心是種能力&效能的重要性:
由於這個單元是依照JML寫程式碼,所以架構基本依照給定的JML。按理來說比較輕鬆,但這是我得分最差的單元。
細心是種能力
- 細心是種能力&效能的重要性:
-
第四單元UML——UML解析器:
- 學習UML知識:
根據UML結構,建立簡單的對映、索引結構。領悟UML作為一個標準的建模語言,描述的準確性。
- 學習UML知識:
三、測試理解與實踐的演進
在這個學期中我對測試的理解與實踐都不太好,與大佬交流不太夠,自己不會python的我好菜啊...僅從我目前的理解談一下對測試的理解:
-
邊界資料的必要性:
像在第一單元中依據資料限制,有必要構造超長資料進行測試。
對特例情況,也有必要進行測試,以滿足程式的完備性。
-
警惕可能的空指標:
不知道哪個方法會給你RE的驚喜,有必要構造返回值為null的資料進行測試。
-
測試需要建立在一定的強度上:
手動構造的資料,需要建立在具有一定強度,即具有一定複雜性的基礎上。如在第四單元裡構造繼承、實現介面、自關聯等多層的複雜資料。
-
測試的本質還是理解問題:
不提對拍測試法,自己構造資料自己對照結果的測試,本質還是考查自己對問題的理解。若對問題理解有誤,則對理想結果的理解就會偏差,無從與自己的結果對比,失去測試的意義。
四、總結自己的課程收穫:
通過OO課,在寫程式碼的思想和方法上都受到了很大的啟發。每個思想頓悟的具體內容見(二)總結,此處不做重複,僅作列出。
-
寫程式的方法
-
理解“架構”對寫程式的意義
-
理解"測試"的重要性
-
寫程式的思想:分析問題,感謝課程組提供以完成一個目標為導向的過程,
-
理解"抽象思想"、“分層思想”,
-
理解"解耦"
五、立足於自己的體會給課程提三個具體改進建議
1.改進討論區結構:
在討論區的討論中,帖子是同學們的分散式討論為結構的。即使在標題上進行簡單標註,由於樓內內容也具有一定價值,所以也需要辛苦爬樓。而由於討論區內容的繁多,容易出現重複提問,找不到相應問題的答案等情況。
建議:以第四單元為例,建議以對每個rule的討論建立專樓
- 在樓中顯示回覆順序把助教官方解答,高贊回答優先顯示。
- 跟帖時可選新增關鍵詞,描述自己回帖的主要討論範圍。
- 同學們可以搜尋相關關鍵詞回答,直接找到關心的問題。
2. 希望實驗課課後有反饋:
本學期一些涉及到程式設計的較難實驗沒有反饋,只是交上去告知是否編譯通過,沒有改正的環節,起到的學習的效果有限。
3. 希望助教更清楚的闡釋題意,避免描述太過簡短,儘量減少表述不清。
在第四單元的作業指導書中,每個rule的描述只有一兩句,語義有很多模糊的地方,並且示例給的太過簡單沒有覆蓋到我疑惑的點,給我的理解造成了一定的麻煩。
4.希望每單元提前公佈整個單元要涉及的內容,方便架構:
在第一單元中,因為不清楚後面作業要幹什麼,所以在寫方法的時候為了省事進行了轉換處理。導致下次作業條件變化時適配不能,只得重構,希望改善這個問題。
最後的感謝:
謝謝為我解決疑惑的大佬、助教們,謝謝把課上的這麼有趣的紀老師,謝謝踩了很多坑沒有放棄修的自己。
Sein heißt werden, leben heißt lernen,
wenn du das Gold von den Sternen suchst,
musst du allein hinaus in die Gefahr.
繼續學習繼續成長。