OO第一次單元總結

OO第一次單元總結

前言

第一單元的三次做業:多項式求導。編程

第一次做業

(1)基於度量來分析本身的程序結構

類圖:

度量分析:函數

第一次做業是簡單冪函數求導,設計了兩個類,但從類圖能夠看出其實至關於只有一個類。這一次做業是第一次做業,基本沒有理解面向對象編程的思想,仍是以面向過程的方向實現了。在Compute類中,handle方法負責對輸入字符串進行處理,並存儲數據,derivate方法負責求導,並將結果輸出。這很像是C語言裏構造了兩個函數,所以拓展性不好。測試

(2)分析本身程序的bug

第一次做業因爲沒有認真研讀指導書以及構思,上來就寫代碼,致使最後出現了不少的輸入格式問題,在後續的測試中只發現了部分,另外一部分在互測中顯露出來。
此次做業共有4個bug。第一個最主要的問題是數據類型,沒好好看指導書,我想固然地選擇了long型。第二個bug是非法空白字符WF問題,對空白字符的定義沒搞清。第三個是隻有空格的輸入程序直接崩潰。第四個則是在輸出優化時,當只有常數項時,我直接跳過而沒有任何輸出。
第一次做業互測結束以後,看到被hack的次數,讓我深入意識到指導書的重要性。優化

(3)分析本身發現別人程序bug所採用的策略

在互測過程當中,首先,針對本身在測試時發現本身代碼存在的bug,對別人的程序進行了相應的測試;其次,針對每一個人的代碼,我主要經過輸入格式以及輸出優化這兩部分代碼來查看,找出代碼中存在的漏洞。設計

第二次做業

(1)基於度量來分析本身的程序結構

類圖:

度量分析:3d

第二次做業是在第一次做業的基礎上增長了簡單三角函數的求導。在老師課上的指導下,在最初的設計構思上漸漸向面向對象靠攏,代碼重構,從第一次的基本只有一個類到此次做業實現了三個類,且依照老師所說的各有分工和功能實現。Poly類是主類,IoHandle類專門用來負責處理輸入輸出,利用正則將表達式分割成一個個項,Term類對每個項進行相應的分割和數據處理,而Factor類則是對每個因子進行求導及數據處理。由度量分析能夠看出,問題仍舊集中在IoHandle即輸入輸出的處理,輸入部分我基本是徹底複製的第一次做業的handle方法,所以和上次做業同樣這部分圈複雜度很高,不易拓展。對象

(2)分析本身程序的bug

此次因爲吸收上次的教訓,在寫代碼以前先認真研讀了指導書,對於新增部分的格式規範等問題預先記錄,所以在互測階段沒有新的bug產生。可是,因爲IoHandle類輸入部分基本徹底複製第一次做業的handle方法,在上一次互測中未被發現的bug在這一次互測中被hack,有1個bug。當只輸入「+」時,未能識別出WF。blog

(3)分析本身發現別人程序bug所採用的策略

互測過程當中,除了對第一次發現的問題進行測試外,仍主要經過閱讀別人代碼裏的正則部分來針對輸入格式規範進行測試,此外就是一些邊界值和特殊值的測試。繼承

第三次做業

(1)基於度量來分析本身的程序結構

類圖:

度量分析:遞歸

第三次做業是在第二次做業的基礎上引入了嵌套因子和表達式因子的求導。剛開始構思時,感受難度提高的有點大,看完PPT里老師給的結構,更是雲裏霧裏。後來在討論區看完各大佬以及榮老師的分享才漸漸有了思路,離ddl不遠了,因此並無多少細緻的構思就開始動手了。此次的代碼得益於第二次做業的重構,因爲表達式因子的存在,在上次的IoHandle、Term、Factor以外增長了Poly表達式類,用來處理表達式。它們之間的關係能夠由類圖看出。從度量分析能夠看出,最大的問題出如今Factor因子類中。此次做業中,我並無用到課上講到的繼承和接口的知識,因爲時間和掌握不夠好緣由沒能成功運用,對不一樣的因子建立子類,繼承自Factor因子父類,因此個人這個類寫的就很冗長,循環也不少,很差優化,也沒法拓展。

(2)分析本身程序的bug

此次的做業一共發現兩處bug。第一個是因爲手殘,打錯了一個變量名,時間緊張本身也沒有發現和測試出來,弱測和中測也經過了,在強測和互測中被瘋狂hack。第二個則是當嵌套層數不少時,不斷地遞歸致使CPU運行時間超過限制。對於第二個bug的修復,我經過先去除無用括號再代入遞歸的方式加以解決。

(3)分析本身發現別人程序bug所採用的策略

此次做業互測因爲對WF的限制,我主要就比對指導書,從指導書中尋找邊界和特殊狀況,編寫不一樣的測試用例來測試別人的代碼。

總結

通過這三次做業的洗禮,感受本身從一個只知面向過程編程的小白,漸漸瞭解並理解面向對象編程的思想,每一次的做業都有所進步,惋惜還沒能真正掌握和實現繼承和接口,這周的空閒再好好看看。但願本身能夠堅持到底!

相關文章
相關標籤/搜索