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