oo 第三單元部落格

2022-09-19 02:48:09 字數 1383 閱讀 4606

目錄

五、作業架構設計

本單元主要的學習內容為jml規格語言,通過閱讀jml規格來實現乙個社交網路及其相應的功能。本次作業相較於前兩次作業較為簡單,難度主要在於讀懂jml規格和實現效能的優化。

在實現前我一般會先閱讀指導書上的簡要介紹,優先實現異常類。實現異常類之後由簡到難實現各個類,三次均在最後實現network類。

在具體到類的實現時,我會先大致閱讀一遍這個類各個方法的規格,確定成員變數所用的容器,然後按順序逐步實現各個方法。

在實現單個方法時,首先確定normal_beh**iorexceptional_beh**ior各自的requires,然後根據其規定弄懂其功能和最終需要的\result,選擇已知效能最佳的方式進行實現。

採用junit 單元測試來對**正確性進行測試。方法如下:

根據jml的前置條件設定物件的狀態

呼叫方法並檢查後置條件是否滿足

測試資料量較小的邊界情況和所有邏輯分支

測試過程中可把方法分為三類分別進行。

本單元易出現效能問題的其實就是queryblocksum函式對應的qbs指令,很多同學用dfsbfs來實現iscircle方法,複雜度已經為\(o(n^2)\),再用iscircle方法實現queryblocksum方法,很容易導致cpu超時。

我在這裡採用了並查集的方式實現,通過findjoin兩個方法構建關係網路和實現路徑壓縮,維護乙個qbs變數來得到塊的個數,通過判斷兩人是否有同乙個根節點來判斷iscircle,降低了複雜度,最終沒有出現效能問題。

本單元易出現效能問題的方法為getagevarqueryvaluesum

本單元易出現效能問題的方法為sendindirectmessage方法,這個方法要實現最短路徑的搜尋,一般採用普通的dijkstra演算法複雜度為\(o(n^2)\)可能會導致超時。

我在這裡採用了堆優化的dijkstra演算法,使用j**a的priorityqueue進行操作,降低了時間複雜度,沒有出現效能問題。

整體的架構均嚴格按照jml規格進行實現。

OO第三單元總結部落格

本單元主題是基於規格的層次化設計,要求我們理解jml語法,根據給定的jml規格完成設計需求,並且滿足一定的效能要求,同時掌握簡單的基於規格的測試方法。規格將設計與實現分離,控制了架構的複雜性 規格可以讓開發人員準確理解乙個類的功能,乙個方法的行為 規格通過邏輯方式來驗證 實現的正確性,這是保證 實現...

OO第三單元總結

一 實現規格的設計策略 1.基於規格,設計方法 大部分需要我們寫的方法,都可以根據規格直接寫出來,這些方法一般都是比較簡單的,比如查詢有沒有這個元素 返回某個元素 增加或刪除某個元素。2.根據規格,了解方法功能,自行設計方法 規格怎麼描述,方法怎麼寫也是可行的,但是了解了方法功能,自行設計會更快,比...

OO第三單元總結

理論基礎 jml是用於對j a程式進行規格化設計的一種表示語言 注釋結構 jml以j adoc注釋的方式來表示規格,每行都以 起頭。有兩種注釋方式,行注釋和塊注釋。其中行注釋的表示方式 為 annotation,塊注釋的方式為 annotation 按照j adoc習慣,jml注釋一般放在被注釋成分...