BUAA OO unit_4 & conclusion
本次作業是完成UML類圖分析器,對UML類進行分析包含有
架構圖:
1.總結本單元作業的架構設計
本次作業是完成UML類圖分析器,對UML類進行分析包含有
第一次作業是單獨對class model進行分析,第二次加入了對流程圖和狀態圖的分析,最後一次加入了對圖形的正確性的分析,因此,這三次可以比較順利嚴格的進行增量迭代,引入第15次作業的架構進行說明。
對輸入資料進行分類,每一種元素應該屬於哪個類,就按照其所屬分配到相應的類圖模組中。class model我直接通過實現介面UmlClassModelInteraction
,其餘類推。
在class model中,包含有class,operation,interaction這些小的具有較為獨立但是複雜的元素,可以實現對父類尋找、引數尋找、關聯類、介面尋找等等的指令。collaboration這一類中,會存在多個獨立的interaction模組,因此設立singlecollaboration
在各種類圖類中加入正確性的檢驗,然後用MyUmlGeneralInteraction
對這些實現了對應介面的類進行引用,直接呼叫介面的方法或者檢驗正確性的方法。
2.總結自己在四個單元中架構設計及OO方法理解的演進
第一單元:對包含簡單冪函式和簡單正餘弦函式及其巢狀組合函式的導函式的求解。
這一單元就是讓我們去適應從以前C語言面對過程,一個程式實現一個功能,一個程式包含所有元素的思想轉到面向物件,對問題中出現的元素進行分解,分層,再將其聯絡組合實現豐富多樣的功能。
這一單元中,可以很自然的按照所出現的因子、項、表示式這幾種明顯的層次對類進行劃分,每個類只需要管理好自己的層次的計算規則。
這個單元還運用了工廠模式對因子的初始化進行統一的管理。
第二單元:電梯
這一單元是讓我們瞭解多執行緒程式設計,並且包含有許多新的設計模式。
在這個單元中,多執行緒的協調分配,電梯排程策略,共享資源的管理是多執行緒設計中所學到的新的思路。在架構中,這一單元主要是設立有電梯、排程器、人、等待佇列這幾類。並且更加關注各個類之間的協作、應答響應、每個時態的狀態。要防止死鎖、特別耗時耗能的輪詢等多執行緒經典bug,還需要平衡下中心排程、分散式排程的效能優勢、架構的優勢。
這一單元學習了生產者消費者模式,策略模式等。
第三單元:JML
這一單元學習的JML規格,對它的理解以及部分自己編寫JML。這個單元中,主要是對規格的描述進行實現,對於具體的實現方式可以自己進行選擇,比如容器、演算法這些方面,但是主要的架構還是嚴格按照規格指定的來寫即可。我對規格的想法就是它有點像對目的的描述,但有時又像是對具體的實施的方法的描述,但總總而言之就是對邏輯的約束。
第四單元:UML分析器
這一單元的架構如上所述,主要是更加了解了UML類圖是如何進行聯絡、構建的,我將元素打得很散,分列出很多可能並沒有太大必要去實現的物件,缺少了對過程、一個總體上真正的需求的類的分析提取。
3.總結自己在四個單元中測試理解與實踐的演進
第一單元:這個單元第一二次作業不是特別難,但是由於第一次作業時沒有對規則考慮完全,正則表示式出現錯誤,第二次又濫用遞迴導致超時,第三次作業的時候,改編了z同學第二次作業的python寫的測評機,在正確率上沒有問題了。在這一單元中,一個我比較深入關注到的是,如何去判斷兩個元素相同或者是我所需要歸為一類的,而我寫的判斷函式總是出現缺陷。此外就是優化,我主力放在去括號和合並同類項上面,在這個過程中主要是靠上面的equal函式以及遞迴去括號,幾種去括號的情況的分類。(雖然最後提交的時候還是慫了在能加括號的地方給他補上)
第二單元:這個單元的第一次作業是整個OO作業中對我來說最難的,因為我很難理解多執行緒這個新的概念,並且對於消費者生產者模式最初我完全不懂,不知道在這種多執行緒中,到底什麼算是生產者什麼算消費者又該用什麼去表示,我後來明白了多執行緒可以姑且從巨集觀上理解為幾個“程式”同時一起工作。才勉強寫完了程式但是完全沒有理解死鎖等問題。第二次作業通過找bug理解了死鎖和排程問題,迭代較快。在第三次時我嘗試了另一種電梯搶人的排程。
這個單元從第二次作業開始我藉助了同學的資料轉化輸入程式碼,將造的大量隨機資料輸入,不檢驗正確性,僅僅考慮是否會產生因為死鎖或者其他執行緒不安全問題導致的TLE問題。
第三單元:這一單元學習了JML,這次由於一個小bug導致我錯的很慘,然後我終於開始摸索寫個測評機,各種詭異的轉來轉去,python造資料,C對拍,bat用於cmd進行資料輸入輸出匯出,多謝l同學的建議...總算折騰出一個。然後第二三次作業強測結果比較好了。
第四單元:這個單元是最初理解整個類圖很困難,這些元素代表著什麼,又該如何通過輸入的去建立整個圖,尤其是第一次作業不知道starUML,純憑藉PPT進行理解,對整個架構的設計顯得很倉促很像打補丁似的。但是後面通過自己去設計各種類圖,使用starUML開始明白了這些元素互相之間真正的關係。
4.總結自己的課程收穫
面對物件構造設計這門課程讓我對寫程式寫程式碼沒有那麼畏懼了,反正都要debug,程式碼量大,任務量大,就大著吧,一點一點的理解消化掉,能做完的。此外通過閱讀別人的程式碼,聽上課分享還有OO部落格,可以知道大佬們他們是如何進行構思的,比如一單元第二次作業我從正則轉到遞迴下降,第二單元的分散式,第三次的交併集等。而就在剛才我拜讀了一位大佬的部落格,瞭解到他們是直接是對測評機進行了迭代,封裝,可以高效有序的進行評測,甚至還有GUI而我的僅僅是非常零散的非常簡易的湊出來一個。這些可以說讓我有了很多新的想法、思路。
這門課還讓我學到了上述關於面對物件的思想,一些設計模式,多執行緒的設計方法,JML,UML等,還有對測評機搭建的一些經歷。
5三個意見
1.希望對每次作業給出一個明確的demo,對於基礎很差的同學,真的很需要通過一份較為成熟的模板引導糾正。
2.對於作業中出現的不明確的表達以及在後期的修正,希望能夠更加明確的把補充放在更加明顯的地方,最好對題目的形容有具體的表述,比如在最後一個單元中,出現的可能性,二義性較多,會混淆而且由於更新提示不夠明顯,容易忽略掉。
3.希望課程組把網站開放到2點鐘,夜貓子還是晚上精神好。
最後謝謝各位老師助教大大的幫助支援!這個學期受益良多!