第一次作業總結
?
這是我第一次接觸Java和面向對象思想,最一開始,我建立了簡單的類和對象的概念,多虧了第一次作業難度和復雜度較低,我才沒有崩掉hhh。 第一次作業我只分了三個類,一個main,一個多項式,還有項。項通過加號連接起來形成多項式。由于求導規則簡單,我將求導放在了項類里,成為一個方法。 對于表達式格式的分析判斷,根據自己項和多項式的關系,除了個別必要的判斷,我將大多數的判斷都分在了項的匹配中。 這樣做是最簡單的想法,但是擴展性較差,以至于我在做第二次作業時進行了重構。
第二次作業總結
?
第二次作業和第一次相比,增加了因子的種類,因此,如果利用第一次作業的架構,可能不太好實現,而且考慮到第三次作業的可擴展性,我將求導法則和頂層的一些格式判斷分離了出來,并且創建了一條鏈式的類的構造:函數因子->項->表達式。即因子用乘號連接起來形成項,項則由加號連接起來形成表達式。 基于這樣的鏈式構造,我的求導法則也利用了鏈式遞歸的方法,即多項式的求導的返回值是對項的求導的和,項的求導返回的是通過乘法法則連接起來的函數因子的求導結果。 對于格式的判斷,我沿用了第一次作業的方法。
第三次作業總結
?
得益于第二次作業的思考,我的第三次作業基本沿用了第二次作業的架構。相比于第二次作業,我只是更改了格式判斷的方法以及增加了因子的種類。但是可以看到,復雜度特別高,這直接導致了兩個點超時。
綜合總結
收獲
綜合來看,通過本單元的學習,我初步了解了面向對象的思維,更重要的是,我對代碼的可擴展性有了新的認識。 對于面向對象思想,最大的收獲是“Everything?is?an?object.”,學習到了如何分類的方法,但是還有許許多多不足,就?以本次作業為例,求導法則和格式判斷可以改進為靜態方法,表達式,項,因子可以形成繼承關系,而因子可以改成一個抽象類,把具體的五類因子分別寫成類等等,基于這些想法,我現在正在進行重構和改進代碼。 對于代碼的可擴展性,我認為應該更注重一般性普通性的想法,而不能因為想到滿足某一次作業取巧方法而竊喜。每次寫代碼前應該進行充分地思考一般性和可擴展性。
bug
對于找bug這一點,確實值得我反思。每次互測被找出來的bug不是一些很邊界的數據,反而是一些很常規的數據。這些bug其實通過覆蓋性測試可以很容易找出來。前兩次的bug主要是格式錯誤考慮不全導致。 對于第三次作業,陷入了超時的坑,導致兩個強測點沒過,這一點應該是我代碼架構的問題,如果用到繼承方法,我的許多方法都能夠得到化簡,這個是知識儲備不足和面向對象思維的鍋(太菜了)。
Applying?Creational?Pattern