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