oo 第一次博客作業
早在大一就聽說了oo的各種傳奇故事,大二下學期終於也開始了我的oo之旅。
基於度量來分析自己的程序結構
第一次作業
- 類圖分析
- 耦合度分析
可以看出在第一次作業中,我的耦合度非常高,還停留在面向過程式的設計。
第二次作業
- 類圖分析
- 耦合度分析
可以發現在第二回作業中雖然我有意識的拆分類,但組織結構仍然不好,耦合度仍然很高。
第三次作業
- 類圖分析
- 耦合度分析
可以分析發現,這次的作業有了一些oo的樣子,對input, output, terms有了各自的package,並且耦合度較前兩次降低了一些。但設計的架構仍然不夠優秀,有很大的進步空間。
自己程序的bug
在前兩次作業中,我在互測中有bug。
-
第一次作業出現bug的原因是沒有讀懂指導書,在ddl截至前才明白非法空格的含義,在改動代碼時過於慌忙,沒有處理字符串開頭和結尾的非法字符。
-
第二次作業產生的bug在優化中,因為是熬夜寫的,沒有進行充分的測試,且是面向過程式的思考結果。
如何發現別人的bug
對於找到別人的bug,我主要有兩個思路。
-
首先是針對指導書的邊界樣例進行總結和測試。
-
其次是編寫自動化測試。
其他
前三次作業我有不少進步,但總體不算滿意。
下面分為收獲和不足兩部分來總結。
收獲:
-
有了面向對象的基本概念,對繼承和接口有了初步的認識。
-
開始學會先設計再寫代碼的思維方式,明白了設計結構對完成代碼的重要性。
-
在閱讀別人代碼的過程中學習到一些java編程的技巧和方式。
不足:
-
時間規划上有很大不足,有過熬夜到很晚的經歷。
-
設計仍然不夠簡潔和精巧,寫的代碼結構復雜,不夠明了。
-
測試不足,有兩次互測中被測出bug的經歷。
-
對多態和設計模式等了解不足,應用不足。
-
我對自己的自學和探索能力不太滿意。
之后規划內的改進:
-
有獻血計划,所以oo作業絕對要及時完成,不在晚上十一點半后編程。
-
多閱讀優秀的項目代碼,提高姿勢水平。
-
補充課外閱讀讀物,擴展設計模式知識。
對整體oo學習的感想:
-
對作業內容不算滿意,感覺沒有展現足夠的oo思想。
-
對課堂內容不太滿意,這里舉兩個例子。第一是某節課講到的clone函數,老師並未提到任何關於深拷貝和淺拷貝的內容,只強調了和=直接賦值的區別,但直接使用clone()是淺拷貝,和直接=賦值有同樣的改變其中之一的值,另一個隨之改變的問題,這才是編程中常遇到的坑。第二是關於接口,首先我先說明這節課由於我趕一個ddl沒有特別認真的聽課,但課后看ppt的過程,接口部分舉的例子是同一層的全部類使用接口,這讓我產生了極大的困惑,這和實現繼承父類的抽象函數有什么區別嗎?在系群中提問后才明白了接口的真正意義所在,解決除簡單的樹形結構外其他組合的可能性。我認為這是ppt設計非常不好的一個典型例子,舉一個特別不typical的例子,而不展現重點。
-
oo還是更多是一個自學的過程,討論也很重要。
-
由上可見我在第三次作業中的設計仍然非常別扭,不是最佳的表達式,項和因子的形式。預計重構遞歸下降的過程,參考助教提供的enum寫法。