BUAA-OO-第一單元總結
OO課程第一單元馬上就要過去了,我也經曆了連續三周魔鬼作業的考驗。對于我這樣沒有任何面向對象思想的小白來說,每次作業都是十分痛苦且艱難的。首先很高興自己三次作業都拿到了還不錯的成績,但高興之餘我也發現了很大問題:我的代碼一點也不OO,我仍然在用C語言的面向過程思想去寫代碼。這是我急需改變的程式設計思想。
第一次作業
第一次作業我的基本思路是:
1、判斷非法空白字元是否存在,如果沒有非法空白字元,就删掉所有空白字元(空格和\t)。(簡化正規表達式)
2、使用lookingAt()函數去比對第一項是否合法,如果合法就删掉第一項,繼續循環判斷,直到str為空。(避免大正則暴棧)
3、根據特定+-号的位置将表達式拆分開,并根據拆分的格式将系數和指數存在兩個ArrayList數組中。
4、根據系數和指數進行求導操作,并進行一些合并和化簡。
一共有兩個類,第一個類為主函數類,隻有一個方法,20行。第二個類為多項式類,其中有6個方法,分别為删空格、比對合法、拆項、計算、輸出、傳回是否合法。每個方法大概在30-40行,共190行。每個方法的控制分支數目較多,因為要比對各種不同情況,是以if else嵌套比較多。

在強測和互測中幸運地沒有bug,共發現别人2個bug,沒有特别構造資料,用暴棧和特殊字元hack了2個人。
第二次作業
第二次的做法基本同第一次,隻不過存指數的數組多了幾個,合法條件的判斷多了不少。
一共有三個類,第一個類為主函數類,隻有一個方法,13行。第二個類為多項式類,有9個方法,其中4個分别為構造函數、比對合法、拆項、存儲指數系數,另外5個分别為不同形式項存儲系數的具體方法。每個方法大概在20-30行,共210行;第三個類為求導運算類,有3個方法,分别為構造函數、優化、輸出。每個方法大概在40-50行,共140行。其中有個别方法涉及到的控制分支數目比較多,各種if else。
在強測發現了兩個bug,是在化簡時考慮不周全導緻。發現别人3個bug,有根據正則的漏洞構造特定資料。
第三次作業
第三次作業我的基本思路是:
1、判斷非法空白字元是否存在,如果沒有非法空白字元,就删掉所有空白字元(空格和\t)。(同第一次)
2、根據不在括号内的+-号将表達式拆分成項
3、根據不在括号内的*号将項拆分成因子
4、判斷因子是否合法,如果合法則根據因子形式進行求導運算,如果是表達式因子,則去掉最外層括号後再次進行2,3兩步
共五個類,第一個為主函數類,一個方法,50行;第二個為表達式類,2個方法,共50行;第三個為因子類,2個方法,共55行;第四個為求導計算類,有10個類,為各種情況的求導計算以及判斷是否為表達式因子,共230行。第五個類為優化類,一個方法,主要進行優化操作,共40行。其中個别方法涉及到的控制分支數目較多。
幸運地在強測和互測沒有bug,但優化并沒有做得很好,性能分完全沒有拿到。共發現别人1個bug,是根據正規表達式的漏洞構造特定資料的。
總結一下第一單元的作業,首先很開心自己都取得了不錯的成績,但最大的問題還是不能夠面向對象,仍然在用面向過程的思路去做作業。之前還是覺得這幾次作業對象構造不是很清晰,不能很好的找到對象之間的關系,進而接口、繼承這樣的操作也沒有用到。在聽了大牛們的分享之後,大緻對這次作業的對象構造有了思路,可以大緻的分為表達式類、多項式類、因子類這樣,并在每個類裡重寫或繼承一些判斷或者計算方法,這樣才是面向對象的思想。是以在今後的作業中,仍然需要鍛煉自己面向對象的思想,比如第二次試驗的員工工資問題,就很好的能夠展現出面向對象思想,希望有更多機會練習這樣的題,這樣才能更好的培養起面向對象思想。