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