日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OO第三单元总结:JML

發(fā)布時(shí)間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OO第三单元总结:JML 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 第三單元——jml、junit與圖

第三單元——jml、junit與圖



〇、問題描述

? 本單元主題為JML的學(xué)習(xí),問題載體為一個(gè)無向圖路徑管理系統(tǒng)。在三次作業(yè)種,情景不變,需求遞增。因此需要在層次上做好安排。


一、JML語言

理論基礎(chǔ)(Level 0)
  • 注釋結(jié)構(gòu)

    // @annotation 行注釋

    /* @annotation*/ 塊注釋

  • JML表達(dá)式

    • 原子表達(dá)式

      \result 方法執(zhí)行后的返回值

      \old(expr) 表達(dá)式expr在方法執(zhí)行前的值

      \not_assigned(expr) 表達(dá)式expr是否被賦值

      \not_modified(x,y,...) 表達(dá)式expr是否變化

      \nonnullelements( container ) 表達(dá)式:表示 container 對(duì)象中存儲(chǔ)的對(duì)象不會(huì)有 null

      \type(type) 表達(dá)式:返回類型type對(duì)應(yīng)的類型(Class)

    • 量化表達(dá)式

      \forall 全稱修飾

      (\forall int i,j; 0 <= i && i < j && j < 10; a[i] < a[j])

      \exists 存在修飾

      (\exists int i; 0 <= i && i < 10; a[i] < 0)

      \sum 給定范圍內(nèi)的表達(dá)式的和

      (\sum int i; 0 <= i && i < 5; i)

      \product 給定范圍內(nèi)的表達(dá)式的連乘結(jié)果

      \max min 給定范圍內(nèi)的表達(dá)式的最大/小值

      \num_of 指定變量中滿足相應(yīng)條件的取值個(gè)數(shù)

    • 集合表達(dá)式

    • 操作符

      <: 子類型關(guān)系操作符

      <==> <=!=>等價(jià)關(guān)系操作符

      ==> <== 推理操作符

      \nothing \everything 變量引用操作符

  • 方法規(guī)格

    requires 前置條件

    ensures 后置條件

    assignable 可賦值

    modifiable 可修改

    public normal_behavior 正常功能

    signals 拋出異常

  • 類型規(guī)格

    invariant 不變式

    constraint 狀態(tài)變化約束

應(yīng)用工具鏈

? lowa State JML : 提供了一個(gè)斷言檢查編譯器jmlc,將JML注釋轉(zhuǎn)換為運(yùn)行時(shí)的斷言;

? jmldoc: 文檔生成器,用于生成Javadoc文檔,增加了來自JML注釋的額外信息。

? jmlunit: 單元測(cè)試生成器可以從JML注釋中生成JUnit測(cè)試代碼。


二、JMLUnitNG/JMLUnit

public class Demo {/*@ public normal_behaviour@ ensures \result == a + b;@*/public static int add(int a, int b) {return a + b;}public static void main(String[] args) {add(12,3);} }

[TestNG] Running:
Command line suite

Passed: racEnabled()
Passed: constructor Demo()
Passed: static add(-2147483648, -2147483648)
Passed: static add(0, -2147483648)
Passed: static add(2147483647, -2147483648)
Passed: static add(-2147483648, 0)
Passed: static add(0, 0)
Passed: static add(2147483647, 0)
Passed: static add(-2147483648, 2147483647)
Passed: static add(0, 2147483647)
Passed: static add(2147483647, 2147483647)
Passed: static main(null)
Passed: static main({})

===============================================
Command line suite
Total tests run: 13, Failures: 0, Skips: 0
===============================================


三、程序設(shè)計(jì)

類的設(shè)計(jì)——繼承與遞進(jìn)
  • 簡(jiǎn)析三次作業(yè)涉及到的指令及實(shí)現(xiàn)方式:

    • 第一次:HashMap管理路徑

      // 兩個(gè)對(duì)應(yīng)的 HashMap 存儲(chǔ),加快查找 private HashMap<Integer/*id*/,MyPath/*path*/> pathList; private HashMap<MyPath/*path*/,Integer/*id*/> pidList; // 在添加和刪除時(shí)管理總點(diǎn)數(shù),分?jǐn)倧?fù)雜度 private HashMap<Integer/*node*/,NumberOfNode/*number of node*/> distinct;// hashcode的設(shè)定 /*path*/ @Overridepublic int hashCode() {return nodes.hashCode();} /*integer*/Integer.hashCode();
      • 添加刪除類 O(n)

        在兩個(gè)表中添加/刪除路徑;管理節(jié)點(diǎn)數(shù)目。包括:

        • 添加路徑
        • 刪除路徑
        • 根據(jù)id刪除
      • 查詢類 O(1)

        包括:

        • 查詢id
        • 查詢路徑
        • 獲取總路徑數(shù)
        • 根據(jù)id獲取路徑大小
        • 根據(jù)結(jié)點(diǎn)序列判斷容器是否包含路徑
        • 根據(jù)路徑id判斷容器是否包含路徑
        • 容器內(nèi)不同結(jié)點(diǎn)個(gè)數(shù)
        • 路徑中是否包含某個(gè)結(jié)點(diǎn)
      • 根據(jù)id獲取不同節(jié)點(diǎn)個(gè)數(shù) O(n)

        path內(nèi)排序+遍歷第一次為O(n),其后為O(1)

      • 根據(jù)字典序比較兩個(gè)路徑的大小關(guān)系 O(n)

    • 第二次:HashMap存儲(chǔ)鄰接表管理無向圖

      // 鄰接表:邊權(quán)均為1的無向圖 private HashMap<Integer/*起點(diǎn)*/,HashMap<Integer/*終點(diǎn)*/,Integer/*邊數(shù)*/>> reachable= new HashMap<>();
      • 邊的存在性 O(1)

      • bfs 搜索 O(v+e)

        包括:

        • 兩個(gè)結(jié)點(diǎn)是否連通

          最短路徑存在

        • 兩個(gè)結(jié)點(diǎn)之間的最短路徑

    • 第三次:UndirectedGraph

      含有圖的嵌套關(guān)系;圖的連接狀態(tài)相同但邊權(quán)不同。新增一類專門管理。

      abstract class UndirectedGraph {// 無向圖private HashMap<Integer/*point*/,HashMap<Integer/*point*/,Integer/*weight*/>> undirectedGraph;// 緩存區(qū)private HashMap<Integer/*point*/,HashMap<Integer/*point*/,Integer/*weight*/>> cache;private bfs(){}private spfa(){}... }

      以下復(fù)雜度討論均不考慮緩存查找。(重復(fù)查詢時(shí)O(1))

      • 連通塊數(shù)量

        涂色

      • spfa

        本質(zhì)上都是帶權(quán)最短路徑的問題。。。以前的沙雕方法都重寫了。

        • 最低票價(jià)
        • 最少換乘次數(shù)
        • 最少不滿意度
        • 最短路徑
        • 兩點(diǎn)連通性
  • 三次架構(gòu)

    • 第一次:哈希表+規(guī)格方法
    • 第二次:添加可達(dá)表,原有方法不變
    • 第三次:添加圖,重寫查找算法相關(guān)方法
算法
  • 第二次:bfs

  • 第三次:每條path內(nèi)部先構(gòu)建好小圖,即建立好所有的邊,這樣在每一條邊上加上換乘權(quán)值,搜最短路 ( spfa ) 就行。共需三個(gè)權(quán)值不同的圖。

    因?yàn)椴樵冎噶钶^多,應(yīng)每次搜索都將當(dāng)前起點(diǎn)的所有終點(diǎn)最短路都放入緩存。每當(dāng)圖結(jié)構(gòu)更改應(yīng)該清空緩存。


四、BUG分析

? (本地bug)寫第三次作業(yè)時(shí),bfs寫成找到目標(biāo)終點(diǎn)即停止:

while (size != 0) {if(fr==to) return;//...for (Integer x : keySet()) {//...} }

? 導(dǎo)致第二次搜索時(shí)進(jìn)行不下去。應(yīng)改成一次性搜索完所有終點(diǎn)。


五、心得體會(huì)

? 對(duì)于jml,語法是相對(duì)簡(jiǎn)單,理解也相對(duì)容易。難點(diǎn)在于自己寫出一份規(guī)范的規(guī)格。因?yàn)閷懸?guī)格的成本比寫代碼高出太多,我對(duì)jml仍僅僅停留在了解階段,還需要更多的學(xué)習(xí)。畢竟,第三單元的作業(yè)架構(gòu)嚴(yán)格來說幾乎沒有自己參與……由此也可見得架構(gòu)對(duì)于程序正確性、效率和可擴(kuò)展性的重要性。

轉(zhuǎn)載于:https://www.cnblogs.com/DilemmaR/p/10908548.html

總結(jié)

以上是生活随笔為你收集整理的OO第三单元总结:JML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美国产精品专区久久 | 人人看超碰| 成人区人妻精品一区 | 日韩在线观看精品 | 夜夜爽av福利精品导航 | 交专区videossex农村 | 免费级毛片 | 人人涩| 亚洲乱码一区二区三区在线观看 | 午夜久久久久久久久久影院 | 亚洲亚洲人成综合网络 | 18av视频| 岛国毛片在线观看 | 亚洲成人一区在线观看 | 色www| 成人黄色一级片 | 国产馆在线观看 | 免费看大片a | 日韩电影一区 | 九色porny原创自拍 | 久久不卡影院 | 国产喷潮 | 日韩欧美网 | 日本在线不卡一区二区 | 欧美日韩 一区二区三区 | 国产成人综合网 | av2014天堂| 黄色网页在线免费观看 | 黄色小视频在线看 | 69xxxx日本 | 国产二级一片内射视频播放 | 精品乱人伦一区二区三区 | 噜噜在线视频 | 国产美女黄色 | 欧美美女一区二区三区 | 黄色美女毛片 | 2019日韩中文字幕 | 一级国产精品 | 国产剧情一区在线 | 自拍偷拍校园春色 | 一出一进一爽一粗一大视频 | 爱爱高潮视频 | 一区二区三区四区精品视频 | 成人福利在线 | 一区二区的视频 | 淫人网 | 国产伦精品一区二区三区四区免费 | 国产一级免费大片 | 蜜芽一区二区 | 伊人网址 | 国产精品视频免费 | 国产美女免费视频 | 色欧美亚洲 | 少妇熟女高潮流白浆 | h视频在线看 | 成人在线观看一区二区 | 久久人体视频 | 亚洲成人久久精品 | 99国产精品无码 | 亚洲精品国偷拍自产在线观看蜜桃 | 韩国成年人网站 | 一区二区美女视频 | 国产高潮av | 干欧美 | 国产人妖一区 | 在线超碰91 | 一区二区在线 | 国产粉嫩呻吟一区二区三区 | 亚洲女人久久久 | 国产精品黄在线观看 | 嫩草视频国产 | 国产一区精品在线观看 | 水密桃av | 人体裸体bbbbb欣赏 | 久久久精品欧美 | 午夜中出| 最近免费中文字幕中文高清百度 | 95久久 | 日本一级三级三级三级 | 亚洲va国产天堂va久久 en | 99reav | 欧美成人看片黄a免费看 | 亚洲丁香花色 | 欧洲成人免费视频 | 99久久久无码国产精品衣服 | 亚洲av女人18毛片水真多 | 黄色激情av | youjizzxxxxx| 免费爱爱网址 | av嫩草| 日本网站黄色 | 色呦呦网站 | 国产日韩欧美 | 免费观看日韩 | 男女污污视频在线观看 | 日韩午夜在线观看 | 丝袜脚交国产在线观看 | 精品欧美 | 国产特级淫片免费看 |