北航oo作業第一單元小結

2022-08-24 09:36:09 字數 1784 閱讀 4781

前言

在經過了三次艱辛的oo作業後,oo課程的第一單元告一段落,這一單元,我作為乙個oo小白,開始了解oo的程式設計思想,也有了自己的一點心得體會。把筆粗成字,不當之處,還請各位大佬多多指教。

一.分析程式結構

第一次作業:

在第一次作業中,由於剛剛開始接觸oo的思想,我還不是很了解物件導向的程式設計方法,還是按照c語言的思路,將deriviation作為main函式,在deriviation中呼叫number類,完成運算。

具體的操作思路,則是使用正規表示式構造出因子與項,通過正則式匹配來得到每乙個項,使用求導公式運算,化簡則是選擇了運用雜湊表將次數相同的表示式的次數相加,合併輸出。

類圖如下:

複雜度如下:

可見,我的number複雜度較高,可以進一步優化。

第二次作業:

第二次作業由於不涉及因子巢狀,只是新增了三角函式項,我選擇了新建乙個key類,用來存放三角函式與冪函式的相關次數,並在key類中重構hashcode與equal方法,就可以復用作業一中的hashmap,優化時,加入了,三角函式和為1的特判。

下面是類圖:

複雜度如下:

由於主要是復用了作業一,導致number的複雜度還是居高不下。

第三次作業:

第三次作業加入了巢狀因子,導致正則方法提取失效。我選擇了用多個小正則構造來判斷輸入是否合法。在判斷輸入合法性時,先進行括號匹配,若有多層括號巢狀,若括號不匹配的話直接判定為非法輸出。括號匹配的情況下,逐層判斷,每次將當前表示式視為只有一層括號巢狀,遞迴判斷。

而在進行求導運算時,這種方法無法準確提取項,便手動根據括號和符號,每次提取出表示式,再將表示式分割為因子,運用鏈式法則,逐個求導即可。

類圖如下:

複雜度如下:

由於判斷輸入合法和求導部分都有大量迭代,複雜度較高。

二.我的bug

第一次作業中,我在書寫正規表示式的時候,將空格表示為『 』,導致可以匹配『號,此外,沒有注意沒有符號鏈結的項,正則匹配也失敗。

第二次作業中,沒有被發現bug。

第三次作業中,乙個是使用了d匹配小於10000的數,忽略了000008這種奇葩。此外,我的遞迴求導方法,由於巢狀過多,會導致超時。

總而言之,我的**出現bug集中在正規表示式的構造錯誤,和求導方法的迭代次數過多。

三.互測的策略

我的互測策略是盡量先仔細閱讀房內同學的**,爭取找到**邏輯的漏洞,好有的放矢。實在找不到邏輯錯誤的,會構造測試樣例對**進行黑盒測試。

我結合測試**結構來構造測試樣例,我會觀察被測**的方法結構,思考可能出現的錯誤點。

第一二次作業中,我都是將表示式作為物件,進行求導運算。

第三次作業中,由於運算的複雜,在表示式物件的基礎上,我又將每乙個因子作為物件,進行求導運算。

OO第一單元作業小結

oo第一單元作業小結 在本次部落格的寫作中,我運用intellij旗艦版的diagrams功能繪製類圖,用metricsreloaded外掛程式進行 複雜度分析。1 基於度量來分析自己的程式結構 第一次作業 第一次作業的流程圖如下 第一次作業的結構比較混亂,因為較少接觸物件導向語言的緣故,所以程式寫...

OO第一單元作業總結

1.第一次作業 第一次作業時我還沒有建造者模式這種概念,因此是把字串處理的工作交給expr類來處理,在expr類中呼叫term的構造方法,並將term的係數與指數存放在expr的容器中。類圖如下 結構比較的簡單 下面是複雜度分析 可以看出,在expr的求導操作中複雜度較高,這是因為我第一次作業中求導...

oo第一單元作業總結

雖說後一次作業是對前一次作業的擴充,然而由於我不太熟悉面對物件程式設計的思想,程式的可擴充性極差,致使三次作業三種架構,異常愚蠢。設計思路 受上機實驗 啟發,用兩個數 係數和指數來表示一項,用項組成的表來表示項之間的加法關係。通過對表示式符號的簡化,得到了更符合一般形式的輸入,但背離了題目中的構造思...