OO第三單元總結

2022-09-09 07:42:12 字數 1714 閱讀 8097

一、實現規格的設計策略:

1. 基於規格,設計方法

大部分需要我們寫的方法,都可以根據規格直接寫出來,這些方法一般都是比較簡單的,比如查詢有沒有這個元素、返回某個元素、增加或刪除某個元素。

2. 根據規格,了解方法功能,自行設計方法

規格怎麼描述,方法怎麼寫也是可行的,但是了解了方法功能,自行設計會更快,比如

iscircle

這個方法,就是查詢兩者是否能通過有限次查詢找到對方,如果按照規格描述實現該方法,就會每次查詢都逐個尋找,方法本身非常的慢,而了解該方法功能後,設計乙個並查集就會很快實現。

3. 選擇容器

我容器選擇了

arraylist

(主要是就會用這個),這個在增加刪除的時候很方便,其實還可以用

hashmap

,查詢的時候會很方便。

4. 使用演算法

我在這裡就使用了並查集和

spfa

,並查集的話要注意壓縮路徑,

spfa

沒想到什麼好的優化。

5. 異常處理

建立相應的異常類,按照後置條件丟擲相應的異常。

二、基於

jml規格來設計測試的方法和策略

這邊沒有什麼太好的測試方法和策略,主要是根據

jml規格的描述去寫**,照貓畫虎還是比較容易實現的,然後比較難的就是理解後自行設計的**,這部分容易出問題,大都是強測出問題後,根據出問題的指令去尋找

bug。

三、容器的使用和選擇

個人使用陣列和

arraylist

,主要是比較熟悉,

arraylist

在特定位置插入、特定元素刪除非常方便,而這三次作業都很經常用到插入刪除,我就選擇了

arraylist

,但是看別人的實現,貌似

hashmap

更方便……,然後陣列使用那邊就與我個人習慣密不可分了,之前學習演算法的時候一直使用陣列,然後寫並查集和

spfa

都習慣性的選擇了陣列。

所以我的容器使用與選擇的方法比較直觀,就是個人熟練度和一丟丟的方便。

四、效能問題

1. 容器使用問題

使用的是

arraylist

,每次都是通過遍歷實現查詢,當資料變多,這種查詢就會顯得很慢。

2. 演算法問題

比如iscircle

沒有想到用並查集,而是使用搜尋,就會很慢。

然後就是求年齡平均值、方差等,可以先存一下之前的和,每次有變化的時候再改變這個和,就會快一些。

五、作業架構

以第三次作業為例,我的異常以及類完成如上,類中的方法就是按照規格中有的實現的。

在設計的時候,我是按照

person->message->group->network

設計實現的,就是從容易到複雜,先實現基礎的,後續設計

network

的時候就能使用之前設計好的方法了,會相對容易一點。

我的圖模型設計設計比較簡單,就是根據人與人之間認識與否來連線建立聯絡,由線連在一起的一群人構成乙個塊(使用並查集實現),查詢是否認識時,看有沒有線,查詢是否能通過有限的人認識時就看在不在乙個塊。維護也比較簡單,線的維護就是建立關係的時候連線,通過

acquaintance

陣列新增新元素實現,塊的維護就是並查集的常規維護。

OO第三單元總結

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

OO第三單元作業總結

在起初剛學習完jml規格語法的時候,由於對jml規格不夠熟練,我選擇了讓自己的 與規格 基本保持一致來完成作業。意思是,jml使用陣列實現,我也會使用陣列實現 jml使用兩層for迴圈實現,我也會使用兩層for迴圈實現。並且,我選擇了每讀乙個方法的jml,就完成乙個方法。顯然,這樣的策略不會讓我產生...

北航OO第三單元總結

本單元作業為jml規格的學習與應用,要求我們在閱讀jml規格之後實現出完全符合規格要求的方法。當然在完成作業之前我又需要從0開始學習jml規格,但好在jml的入門難度並不大,短短幾個小時後就可以讀懂作業中的jml規格了。而其實規格就像是乙個指導你具體實現方法的說明書,它會為你指定這個方法的前置後置條...