oo第一單元總結
第一次作業
一、題目要求
簡單多項式求導,僅支援常數與冪函式的乘積作為項,保證輸入無格式錯誤。
二、作業實現及分析
由於第一次作業要求實現的功能並不複雜,且我當時對於物件導向的理解並不夠深入,所以我當時只是根據自己的想法構建了4個類來解決這個問題
類圖如下:
關鍵類分析如下:
stringprocess —— 字串處理類,具體實現以下功能:
termmap —— term類例項的儲存類
term —— 儲存某個項資訊的類
複雜度分析如下:
總結如下:
三、bug與效能
bug方面:
效能方面:
四、優缺點總結
優點如下:
缺點如下:
第二次作業
一、題目要求
在第一次作業的基礎上,增加帶冪次的正弦 sin(x) 和余弦 cos(x) 函式,且支援帶有括號的表示式作為乘法因子。
二、作業實現及分析
第二次作業相較於第一次作業,在難度上有了很大的提公升:由於多項式因子的存在,我們不再可以只用term乙個類來描述所有的項了。於是在本次作業中,我選擇了重構——將輸入的表示式分為多項式、項、因子3級,用遞迴下降的思想來處理輸入的字串,最終將表示式以表示式樹的方式儲存起來並對樹進行求導等操作。
類圖如下:
關鍵類分析如下:
expr —— 表示式樹的結點類,其有singleexpr、addexpr、mulexpr、subexpr共4個子類,通過這些不同種類的節點型別可以構建出乙個表示式樹,且子類中都有相應的求導等方法
複雜度分析如下:
總結如下:
三、bug與效能
bug分析:
別人的bug
效能分析:
四、優缺點總結
優點如下:
缺點如下:
第三次作業
一、題目要求
在第二次作業的基礎上,新增了三角函式內巢狀因子的多項式求導 和輸入語句格式的正確性判斷
二、作業實現及分析
第三次作業相對於第二次作業來說,在難度上的提公升較為平和。為了處理三角函式內巢狀因子,我新增了cmpexpr節點類;為了處理輸入語句的正確性,我新增了checkformat類
類圖如下:
關鍵類分析:
cmpexpr —— 內巢狀因子的三角函式節點類,繼承自expr類
複雜度分析如下:
總結如下:
三、bug和效能
bug分析:
別人的bug
效能分析:
四、優缺點總結
優點如下:
缺點如下:
測試資料的策略
第二次作業中:
重構經歷
本次作業中,我在第二次作業中進行了一次重構;而這次重構也算是比較平穩,並未帶來太多的bug,我想也是因為第二次作業之後,我處理問題的演算法和思想更加簡潔明確;而第三次作業也是銜接得較為流暢,並未遇到太大的阻力。
心得體會
2021 BUAAOO 第三單元總結
由於本單元的作業已經給出了jml,並且其整體上的架構已經比較完善了,因此總體上採用了jml的架構,只是在一些具體實現上進行了修改,例如將jml中的所有陣列都改為使用容器 具體見 三 容器選擇 模組 而對不同型別的方法,採取了不同的實現方式,具體如下 方法型別 代表方法 實現策略 直接查詢或修改類中非...
BUAAOO 第一單元
1.1 類圖 1.2 類的設計 1.3 類的度量分析 經過分析可以看到,combine和main的複雜度較高,因為我在main裡一共進行了好幾次獨立操作,比如在項裡遍歷因子求導,但實際上這個操作應該放在poly裡更為合適。combine裡我先採用了treemap進行合併同類項,最後又把treemap...
BUAAOO第一單元總結
第一單元的作業是對多項式求導,三次作業分別完成了簡單冪函式表示式求導 帶簡單巢狀的表示式求導和三角函式求導 豐富巢狀的表示式求導及格式檢查。本人在第一次作業中使用的是正規表示式匹配和字串預處理相結合的方法,可以達到需要的效果,但是越過了格式約束並降低了可擴充套件性,導致第二次作業不得不重構。第二次作...