BUAA OO第四單元反思與總結

2022-09-09 07:48:12 字數 2451 閱讀 3392

18375182 范競元

第十三次作業主要實現了11個針對類圖的查詢指令。

首先,在做這次作業之前,我並沒有對mdj檔案有著很深的了解,因此思考這次作業如何開始花費了我比以前更長的時間(甚至有段時間以為這單元要寫的和jml相似),希望老師上課能夠更加詳細地講一下mdj檔案的結構以及類圖,順序圖和狀態圖中各個元素的內容和之間的關係。

這次作業中的指令全是通過類名來查詢類的,因此我首先建立了這樣乙個資料結構:

hashmap> classes;
其中第乙個string存放的是class的名字,第二個string存放的是class的id,因此通過這個資料結構可以輕鬆的找出相應的class並且判斷class是否不存在或者有多個。

另外,我新建了乙個myelement類,這裡存放著相應的element,我也新建了許多需要查詢資訊的類,比如說myclass類,myinte***ce類等等,這些類存放著和自己有關係的資料,比如說myclass類中存放著自身的可見性,associations,attributes等等,這些類也繼承著myelement類,通過getelement方法也可以獲取相應的element例項。並且只要獲取到相應的myclass例項,就可以得知它的一切資訊,不用再去費時間尋找。這些類的初始化也一併通過myumlgeneralinteraction類的建構函式建立。

關係圖大致如下。

第十四次作業主要實現了三個關於uml狀態圖的查詢指令和三個關於uml順序圖的查詢指令。

這次作業比較友善,因為uml狀態圖和順序圖中的元素種類本身就比較少,因此在理解本次作業的要求上沒有花費太多的時間。

有關於架構方面的話,因為上次作業的**行數比較多,所以我這次將建構函式單獨拎了出來放到了另外乙個類中,因為這次主要是針對region和interaction的名字進行查詢,所以我也建立了和上次作業一樣的資料結構,在此也就不過多贅述了。

private hashmap> interactions;

private hashmap> regions;

值得一說的是,關於uml狀態圖的查詢指令中的查詢觸發事件的指令,最開始並不是很理解,後來才知道狀態遷移是狀態遷移(transition),觸發事件是觸發事件(event),其中乙個狀態遷移中可能會有很多的觸發事件。這裡我也是看指導書裡的例子才知道的。

關係圖大致如下。

第十五次作業主要實現了針對模型的有效性檢查。

這次作業我並沒有新建任何額外的資料結構,只是使用了之前的資料結構來進行檢查。

這次作業的有效性分析我也同上次一樣額外拎到了另乙個類裡去寫,因為這次作業cpu時間限制為10秒,所以我並沒有很在意效能,例如r002和r003都是用的暴力搜尋。值得一提的是,有效性檢查中的r002和r003我是合在一起寫的,為此我重寫了一下官方包中的checkforallrules方法,將r002和r003合併為乙個方法。

public void checkforallrules() throws precheckruleexception
另外有關r007,其中在順序圖中的lifeline的represent指向的是interaction,那麼在同一sequence diagram中的意思是interaction的parentid和attribute的parentid要一致。

關係圖大致如下。

在學習物件導向課程之前,其實我也就主要會面向過程方法,去年寫計組那時候才沾點結構化的邊。

第一單元中進行的架構設計主要是根據功能來設計的,比如說這個類用來解析字串,那個類用來進行遞迴下降詞法分析的等等。在寫作業過程中主要考慮的還是如何建立資料結構,架構其實沒考慮太多。

第二單元的架構也沒咋想,就是生產者-消費者模式,再加個黑板也就是執行緒安全類完事。主要問題是第三次的換乘並不能很好的相容我這個架構於是我把換乘扔了。

第三單元也沒咋想架構,心思主要還是放在了如何降低時間複雜度上了。

第四單元的架構還是想了一會的,最後發現套乙個my***的殼,將uml***放裡邊,再構建點其他的資料結構就ok。

前兩個個單元的測試我主要是手動構造資料進行測試,效率並不是很高。偶爾也還會用一些大量的隨機生成的資料進行測試,但是覆蓋面也並不是很好。

第三單元利用junit單元測試,將測試模組化。

第四單元就是手動構造加對拍。

開始前就已經在害怕的課程竟然越寫越順手,明明後倆單元比較簡單,結果竟是最難的(自認為)的第一單元ak,沒想到了屬於是。說實話oo課程遠遠超出了我的預期,學到的東西真的很多,oo這門課也真的很完美,我也很希望oo這門課不斷地變好。

BUAAOO 第四單元 課程總結

本單元採用了圖模型解析uml。uml檔案可以抽象為圖 子圖 邊的邏輯結構。在實現中,圖的節點包括類 介面 屬性,子圖包括狀態圖 順序圖等。採用了三次遍歷uml元素的方法建圖,第一遍遍歷建點,第 二 三次遍歷設定屬性 連邊,實現圖物件的初始化。這裡借鑑了一些python程式設計的思路,通過迭代器 選擇...

BUAAOO第一單元總結

第一單元的作業是對多項式求導,三次作業分別完成了簡單冪函式表示式求導 帶簡單巢狀的表示式求導和三角函式求導 豐富巢狀的表示式求導及格式檢查。本人在第一次作業中使用的是正規表示式匹配和字串預處理相結合的方法,可以達到需要的效果,但是越過了格式約束並降低了可擴充套件性,導致第二次作業不得不重構。第二次作...

BUAA OO 第二單元總結

目錄多執行緒的經驗和教訓 這三次作業大致採用了相同的策略。執行緒設計方面,都是乙個input 輸入器 執行緒,乙個controller 控制器 執行緒,若干個elevator 電梯 執行緒。互動方式上,主要通過鎖來進行同步控制。每部電梯有乙個自己的privatelock,這些privatelock對...