第四单元博客总结——暨OO课程总结
第四單元架構設計
第一次UML作業
簡單陳述
接口包中給出了各式UMLXXX類,即各種UML元素,但個人并不是很看得懂其中的一些Json部分代碼,選擇自己構建一個MyUMLXXX類,其中存儲UMLXXX,以及各類查詢方法還有屬性,由于是自己寫的類,用起來更加自如,也不用怕有什么坑存在。
在MyUmlInteraction類中,首先是對輸入信息的分類處理,較為簡單,只需要注意不同信息的處理順序不同,這樣就可以實現在新建數據之初,就實現例如屬性和方法存入對應的類中等。個人認為本次作業中較難點為獲取頂級父類,存在遞歸向上查找父類的問題,然后就是同樣復雜的實現接口列表,在這里我都選擇使用遞歸實現,而并沒有用圖的知識來結局,但事實證明早晚要用到圖的。。。
類圖
方法復雜度
類復雜度
同時我才用了一個以空間換時間的小技巧,也就是同時存了id2Class, name2Class, class2Id三個HashMap,以幫助我快速找到對應的class或id。
第二次UML作業
簡單陳述
第二次作業在上次的基礎上,增加了類圖的檢查,以及順序圖和狀態圖,個人認為難點主要在類圖的三個Rule檢查上,但萬萬沒想到在順序圖的查詢中,吃了讀題不仔細的虧,并沒有意識到message可以傳遞給endPoint,直接導致報錯。。這是后話。
新增加的三個Rule分別是元素容器中不能有重名成員,不可以有循環繼承以及任何一個接口不能重復繼承另外一個接口。重名成員較容易判斷,但需要注意的是重名對象不僅限于屬性之間,關聯對端之間,屬性和關聯對端之間也不可以有重名出現。而循環繼承較為復雜,需要用到圖的知識,我使用鄰接矩陣來記錄相互之間的繼承關系,并通過tarjan的強連通分支算法,尋找循環繼承。而第三條規則,重復繼承,我也是建了一張圖并通過BFS,尋找重復繼承。
除了StandardPreCheck類以外的,順序圖和狀態圖查詢,都與之前的類圖查詢差不多,甚至更加簡單,在此就不多加闡述。
類圖
方法復雜度
類復雜度
四個單元架構設計及OO方法理解的演進
-
第一單元中,求導問題,雖然一開始就知道后期可能會出現更加復雜的求導問題,但個人的架構設計仍然存在缺陷,導致三次作業重構三次,并沒有做到任何的代碼復用性,但也開始嘗試面向對象的編程理念,分成多個類,先考慮對象而非編程過程。
-
第二單元中,老師講授了一些設計模式,如讀者-寫者模式,工廠模式,生產者-消費者模式,電梯的代碼開始出現復用,但由于功能較多,仍然存在部分代碼重構的現象,對于每次提出的新要求,都需要大量代碼的改進,開始嘗試各種設計模式。
-
第三單元中,學習了全新的JML,雖然個人感覺代碼內容與JML關系不大,但也體會到了工程上如何對于功能提出要求,底層的程序員如何根據已設記好的架構,完成代碼編寫,JML只關心方法的pre-Condition以及輸出,具體實現并不關心,學會了寫JML,為日后在工作上的發展打下基礎。
-
第四單元,UML的出現,自己封裝UMLXXX,統一繼承UMLElement,并將功能分化到各個類來完成,而不是一個GeneralInteraction搞定所有功能。
四個單元中的測試及理解
-
第一單元,那時的我并不懂得太多測試相關信息,互測階段只能靠個人手動造數據,且通過一次打開八個Project的方法,手動輸入數據,采用笨拙的方法進行比較,效果并不理想,也只能通過一些特殊情況來卡bug,而隱藏在代碼深處的一些隱蔽bug無法檢測出,
-
第二單元,多線程電梯,導致檢測更加困難,這時開始學會使用python自動化造數據,由于多線程,無法與他人匹配輸出,也只能檢測一些拋出異?;蚴侵苯觕rash的bug,正確性檢測并不多,但也開始走向自動化檢測。
-
第三單元,已經開始嘗試手寫腳本,搭建弱版評測姬,也第一次體會到了出門去吃飯,讓電腦在宿舍跑bug的快感,但突然發現時間不夠啊,(造了10w組數據,跑不完了。。。
-
第四單元,由于傳入數據是mdj文件生成,并沒有太好的自動生成方法,測試數據也只能靠手畫,且沒有互測也就只需要驗證自己的正確性。
課程收獲
個人較為喜歡OO這門課,但真的很遺憾沒有獲得任何獎項,甚至鼓勵獎。。我也為這門課付出了許多汗水,大二下學期的生活格外充實,但烤漆也格外舒適。且萬萬沒想到的是最后一次作業翻車,出現了讀題失誤。之前的單元作業,除了第一單元因為性能分無法拿到滿分,以及第二單元電梯出現兩次bug,其他作業都是滿分,但強測測出bug真的很傷。。。也是第一次上這種工程性極強的課程,每一周都和打仗一樣,完成一次大作業,但到后期也逐漸熟練了,甚至開始期待下一次的作業,會自己進行猜測,也十分喜歡每次完成代碼后的優化過程,雖然有時候是反向優化,但個人代碼能力確實有了極大提升,已經可以兩天完成上千行的代碼工程,并完成bug調試,測試代碼的能力也實現了突破零的飛躍,之前從未接觸過自動化測試,也被互測逼迫了去學習測試,學習自動生成測試數據,感覺OO真的給我帶來了很多。
三個改進建議
-
首先希望通知能夠更加醒目一點,就比如間隔微信群啥的,個人感覺站內通知特別容易被忽略,可能是我個人問題。。。
-
多線程單元的測試,希望能增加次數,或是開放評測姬來跑一些數據,感覺自己在評測姬上會出現一些不可復現的bug,甚至可能是只有在評測姬上才能跑出的bug。
-
感覺研討課的參與,討論氣氛不是很明顯,但我也不太懂怎么提高,主要是大家還是較為害羞,比如我就害怕自己的一些想法或問題過于低級,但在網上也確實沒有找到解決辦法,還是不太放的開吧。
-
感覺JML單元,可以更加偏重JML一點,我們同學間開玩笑,只有最后寫但愿總結的時候,才開始真正的了解JML語言,真正的思考一些細致的問題,之前的時間都用在寫程序,實現功能上了。
-
希望OO的實驗課程能夠有所進步,感覺前幾次的實驗課程都很亂,且考察上午剛講授的內容,基本是在機房現場學習ppt,現場嘗試,現學現賣,個人認為調整到周一而不是剛上完課就上機會比較好。?
轉載于:https://www.cnblogs.com/JordenQiao/p/11079538.html
總結
以上是生活随笔為你收集整理的第四单元博客总结——暨OO课程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信信用卡支付每日限额多少?怎么修改?
- 下一篇: 如何下载js类库