天天看點

OO第一單元總結

OO第一單元總結

第一次作業

類圖

OO第一單元總結

​ 第一次作業由于較為簡單,隻包含幂函數的加減,于是我隻設計了一個多項式類,這個“多項式類”實際上表示了多個單項式的加減關系。

度量分析

OO第一單元總結

感覺第一次作業面向對象的思想展現的不夠明顯,第一思路還是老一套面向過程的思維方式,且toString函數複雜度偏高,耦合度偏高。

BUG

​ 此次作業在強測和互測中均未發現bug。

​ 在互測中我hack了其他人1次。起初我嘗試使用對拍器,卻沒有找出bug。随後通過通過閱讀代碼發現有位同學對空格的處理十分複雜,于是思考其此處可能會有bug于是針對性構造資料,發現了其對空格處理上的bug。

總結

​ 本次作業相對簡單,後續作業我也基本延續了類似本次作業的架構。

第二次作業

OO第一單元總結

​ 第二次作業添加了關于簡單三角函數的支援,并且有了乘法,是以我此處設計了三角函數類Trigo和多項式(單項式)類Poly,Term類表示多個類之間的相乘關系,Express表示多個類之間的相加減關系。問題主要出在,求導和輸出函數寫的較為複雜,此處沒有較好展現面向對象思想,應該對Poly和Term類單獨實作求導和輸出方法。

OO第一單元總結

感覺本次作業是做的最差的一次,複雜度升高,我卻沒有完全遵從高内聚低耦合的原則,整體設計都需要重構,此處也給我第三次作業帶來了很大麻煩。

​ 此次作業在互測中被發現一處bug。由于在一處小優化上的失誤,導緻求導結果如果存在常數1,會被忽略掉不輸出。

​ 在互測中我hack了其他人1次。此時我沒有較認真地看其他人的代碼,而是以我自己測試時構造的資料進行嘗試,成功發現一位同學的bug。

​ 本次作業相對上次複雜度突然上升,導緻我措手不及且時間也較為倉促,是以無論是從設計方面還是測試方面我都做的很糟糕。

第三次作業

OO第一單元總結

​ 第三次作業添加了關于三角函數嵌套的支援,并且有了括号因子,是以我此處基本沿用了上次的架構,設計了三角函數類Trigo和多項式(單項式)類Poly,Term類表示多個類之間的相乘關系,Expression表示多個類之間的相加減關系。并且部分解決了第二次作業中的問題,将求導和輸出方法作為一個diffable接口,Trigo、Term、Express和Poly類均繼承這個接口。

OO第一單元總結

感覺本次作業相對上一次略有改善,但是輸出函數仍然較為複雜。

​ 此次作業第一次在強測中出現bug,由于程式過于複雜,我看錯了一個大括号的位置,于是一個小優化被我放錯了位置,導緻此處優化不僅形同虛設還引入了bug,當0成為因子相乘的時候,我會将其忽略掉。這也反應出我在測試中測試不全面的問題。

​ 在互測中我的程式沒有被找出bug,我找到了其他同學共計13個bug,由于我在寫本次作業的時候,中測卡了很長時間,于是我構造了很多邊界資料,包括空格處理,遞歸爆棧,特殊字元,三角函數的0次幂等特殊資料,是以我成功找出了其他同學的多處bug。

​ 本次作業作為複雜度最高的一次作業,我感覺我由于一開始就思考好了整體架構 ,寫出來并不費勁。但是整體的面向對象的思路展現的仍然不夠清晰。以後需多練習思考體會