OO第一次博客作业
第一次作業
第一次作業要求我們進行簡單冪函數的求導,我采用的方法是每項單獨匹配,匹配完處理系數和指數放入兩個動態數組且數組地址相同,在此過程中因為第一項可能無符號進行特判。第一次的優化通過指數相同系數相加,和如若有加號放在首位可省略兩種情況。
第一次作業因為才開始接觸java以及oo所使用的基本都是面向過程,一共兩個類,其中一個把主方法寫了幾百行,完全不符合面向對象的思想。
(1)基于度量來分析自己的程序結構
?
? 本次作業由于第一次接觸oo以及java,所有內容基本在一個方法中完成,看起來十分臃腫且沒有復用性。一個方法469行,完全是面向過程在打,而且部分可以變成方法復用的地方也沒有提出來,而是直接在一個方法中處理了,整體呈現出高內聚高耦合的情況。
?類圖
?
優點:看起來真的簡單
缺點:點開polynomial看看真的繁瑣,沒有任何面向對象的體現。
(2)分析自己程序的bug
自己測試自己時,主要手打一些邊界數據進行測試,但是個人所想不是很全,所以在互測時仍有錯誤。
對于/v沒有進行特判,同時對于空串理解錯誤錯認tab不是空串。此外,首先處理++ 1這種數據時正則判斷錯誤。對于正則的使用不夠熟練,只會使用m.find進行匹配。
(3)分析自己發現別人程序bug所采用的策略
第一次作業基本采用純手寫邊界數據進行盲測,所幸第一次能看到hack數,所以只對于被hack的人進行測試,并沒有做特別多的無用功。大佬真多,看代碼主要是學習。
第二次作業
第二次作業在第一次作業的基礎上加上了sin和cos進行求導,我采用的方法是按項匹配正則表達式,把匹配好的項放入Number類,每一個項實例一個指數和系數的對象,如果此項沒有對應的對象則對應指數為0,系數為1.然后進入求導類,求導根據項最長可能即所有都有進行求導,對于求導后的式子進行系數指數優化,然后對于sin^2+cos^2進行一系列的優化。
這里的優化主要有sin^2+cos^2=1,a*sin^2+b*cos^2=a+(b-a)cos^2,1-sin^2=cos^2等一系列針對此項可以優化的地方進行局部優化,并把第一個加號項提到最前面。
(1)基于度量來分析自己的程序結構
相比于第一次,這次的風格好了很多,部分代碼可以說用了面向對象的思想,雖然這個代碼在第三次作業仍然沒有能夠復用,但這種模塊化的思想,確實為這次縮減了代碼量。但是類中返回值時創建了很多無用的方法,需要改進。仍然沒有做到高內聚低耦合。
類圖
優點:每一塊條理清晰,便于查找和修改
缺點:Polyprocess中有一些方法可以變成類,方便于以后使用。
(2)分析自己程序的bug
自己測試自己時,主要手打一些邊界數據進行測試,但是個人所想不是很全,所以在互測時仍有錯誤。
首項前可能有空格沒有考慮,優化部分sin和cos指數優化打錯了。
(3)分析自己發現別人程序bug所采用的策略
第二次作業基本采用純手寫邊界數據進行盲測,因為之前自己有打一些測試數據,就用這些數據hack了6個人??戳瞬糠执a進行測試。
第三次作業
第三次作業難度比之前上升了一大節,其要在sin或cos中完成因子嵌套,因此之前的方法在這里是不適用的。我所采用的辦法是遞歸下降,前期對于數據進行一系列的預處理,判斷WF的情況,然后盡可能的刪去+號,只保留區分項所必須的。然后把所有的+、*號變成a、m,每次遞歸把括號外層換回,并進入該層的項的求導,根據+分割項,根據*分割因子,并由內到外遞歸求導,整合為字符串。最后化簡部分我只進行了一些簡單的處理,對于合并以及特殊sin、cos沒有進行處理。
(1)基于度量來分析自己的程序結構
這次作業和第二次差不多,許多可以變成類的方法我都放在一起寫了,雖然看起來簡單但對于以后的使用造成了一定的麻煩。依然難擺脫低內聚高耦合,雖然與上次相比內聚有了一定的進步,但仍然需要繼續學習面向對象的思想,盡可能做到分類。
類圖
優點:每一塊條理清晰,便于查找和修改
缺點:Formula中有一些方法可以變成類。
(2)分析自己程序的bug
自己測試自己時,主要手打一些邊界數據進行測試,但是個人所想不是很全,所以在互測時仍有錯誤。
sin、cos()內+1情況沒有考慮,a沒有替換。此外,*-1負號沒有考慮,讀系數沒有讀進去。
(3)分析自己發現別人程序bug所采用的策略
第三次作業學會使用對拍器和批量處理,雖然還是不會生成代碼,但一下子測六七個的感覺還是比之前好了很多。主要手打邊界數據進行測試。沒有結合被測程序設計測試樣例。
??(4)? Applying Creational Pattern
三次作業都沒有使用設計模式,我覺得第三次作業求導部分可以變成一個工廠模式,因為有共同的功能一致的方法,實現低耦合。
重構的話,我覺得我將會把一些不依托特定數據的方法變成類,外部使用try和catch捕獲異常。
轉載于:https://www.cnblogs.com/zhouyiwyz/p/10597791.html
總結
- 上一篇: EditText: 自定义EditTex
- 下一篇: 单例模式---懒汉模式与饿汉模式