OO第一單元感悟與體會

2022-06-21 03:12:08 字數 1893 閱讀 9769

第一單元的三次程式設計作業結束了,現在分享一些我對自己作業的分析和感想

1.程式結構的分析

第一次作業:

本次作業我的主要思路是,為每一項寫乙個正規表示式,在輸入的字串中匹配每一項,多項式類中儲存著乙個單項類的列表,這樣來完成求導並不難,完成多項式中項的排序工作後,合併同類項也不難。

第二次作業:

我的第二次作業是基於第一次作業做了一些小的修改,每個項中新增了sin(x)的次數和cos(x)的次數兩個屬性,對單項的求導結果返回乙個包含三個新項的列表,大體與第一次作業類似。只不過優化過程中思路有些混亂,當然這並不會影響對錯,只是會影響一部分效能分。

第三次作業:

由於我的前兩次作業的結構難以適應第三次作業的巢狀結構,所以第三次作業必須重構。在ddl一直逼近的壓力之下,我選擇了類似二叉樹的結構儲存多項式,但是沒有為各種運算都建立乙個類,只是在節點中儲存了「+」、「*」、「sin」等字串來判斷運算種類,也並沒有類的繼承關係,因此出現了非常冗長的類,這顯然是一種非常不好的構造。如果當時我能多靜下心來思考一下,為每種運算建立乙個類,共同滿足乙個父類或介面,結構會好很多,在以後求導和debug中也能輕鬆很多。

2.程式的bug分析

第一次作業並沒有被發現bug。

第二次作業很多沿用了第一次的內容,由於讀指導書的疏忽在,判斷格式時將所有\s(所有空白字元)替換了,而題目中只有\t和空格是合法的空白字元,因此有一種格式錯誤不能發現,在強測中錯了乙個測試點。

第三次作業我寫的太過混亂,在解析字串的時候出現了一些錯誤,例如對於括號的處理時沒有考慮到這種類似於(x)*(x)這樣最開始的括號的另一部分沒有在最結尾,從而產生了bug。

3.發現別人bug採用的策略

第一次作業我並沒有成功發現別人的bug。

第二次作業我覺得有些人可能在優化時產生錯誤,因此我故意構造了一些包括sin(x)**2+cos(x)**2以及包括sin(x)**4-cos(x)**4的樣例,發現了別人的一些bug。

第三次作業我故意寫了一些括號巢狀情況複雜的測試資料,成功找到了別人的bug,此外利用次數絕對值不超過50的要求,我構造了sin(x)**2*sin(x)**49這樣的資料,也讓一部分人輸出了wrong format。

4.應用物件建立模式

三次作業中我都設計了包括了解析字串,求導,輸出的polycomputer類,暫時還沒有使用工廠模式。

5.對比和心得體會

我覺得前兩次作業用我的方法寫比較便捷,但是這種方法不適應第三次的巢狀結構,也讓我在設計第三次作業時遇到了極大的困難,最後程式結構很混亂。現在反思過來,應該在第三次作業中多使用介面繼承等工具,能讓自己的**更清晰,也有利於更改和除錯。此外,我覺得以後的作業中我應考慮使用工廠模式,來改善自己的**。

OO第一單元總結

由以上類圖,大體分析本次作業程式設計思路如下 2 根據資料度量分析程式結構 那麼根據以上引數含義,分析本次作業 發現,有三個方法的這三個複雜度較高,分別是ploynomial.getpoly readterm.getnum readterm.getterm 所以可以知道本次程式分別在讀入操作和獲得表...

OO第一單元總結

第一單元的作業為多項式求導,在迭代作業中學習了 物件特性 oo構造機制和層次化設計,在bug互測環節也學習到很多巧妙的設計。設計了三個類 term derivative和reportexit,分別處理項 求導和報錯退出,如今回頭看有很多設計不合理的地方,例如在term構造方法中直接解析表示式並設定成...

OO第一單元總結

三次作業,寫了三份架構完全不同的 確實體會到了架構的重要性。在構思程式解決當前問題的同時,還要考慮未來應對更多更複雜的需求,如何構建才能便於未來增添新的需求和模式。在這幾周的學習實踐中,我明白了通過介面和繼承關係,使得程式設計具有層次,能夠將不同但相似的類統一起來,使得主程式能夠對乙個統一的介面進行...