oo第三单元学习总结
OO第三单元小结
一.JML语言理论基础及工具链梳理
在本单元我们学习了JML语言的一些基础知识,能够让我们看懂简单的JML规格并写出对应代码,
主要用到的知识点有:
1.requires 该子句定义了方法的前置条件
2.\old(exp),表示执行相应方法前表达式exp的取值
3.assignable子句,列出方法修改的类成员属性。
4.ensure子句,定义了后置条件,如返回的结果或者该方法运行后的逻辑结果等等
5.\result表达式,表示方法返回的逻辑上的正确的结果
主要用的工具有:
Openjml,junit等,主要作用是测试jml的正确性以及代码实现的正确性。
二.JUNIT的使用
import com.oocourse.specs1.models.Path;
import com.oocourse.specs1.models.PathContainer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; public class MyPathContainerTest {
private final PathContainer pathContainer = new MyPathContainer();
private Path path1, path2, path3; @Before
public void before() {
path1 = new MyPath(1, 2, 3, 4);
path2 = new MyPath(1, 2, 3, 4);
path3 = new MyPath(1, 2, 3, 4, 5);
} @After
public void after() {
// do something here
} @Test
public void testAddPath() throws Exception {
Assert.assertEquals(1, pathContainer.addPath(path1), 1);
Assert.assertTrue(pathContainer.containsPathId(1));
Assert.assertEquals(path1, pathContainer.getPathById(1));
Assert.assertEquals(1, pathContainer.size()); Assert.assertEquals(1, pathContainer.addPath(path2));
Assert.assertTrue(pathContainer.containsPathId(1));
Assert.assertEquals(path2, pathContainer.getPathById(1));
Assert.assertEquals(1, pathContainer.size()); Assert.assertEquals(2, pathContainer.addPath(path3));
Assert.assertTrue(pathContainer.containsPathId(2));
Assert.assertEquals(path3, pathContainer.getPathById(2));
Assert.assertEquals(2, pathContainer.size()); }
}
这一段测试代码简单地测试了addPath的基本功能,测试结果符合预期。
三.架构梳理
第一次作业:
第一次作业中简单的使用了一个由id到PATH,一个由PATH到id的Hashmap来存储PATH,
又使用了另一个由id到出现次数的hashmap来统计不同的点个数。
第二次作业:
第二次作业中创建了一个Node类来存储有关节点的相关信息,又建立了一个类来存储
dijistra算法的实现,类方法的主要实现依托于将大数转化成小数,并且利用数组来
存储node。
第三次作业:
第三次作业中四种不同的需求其实都可以抽象成求一个图中的最短距离,唯一不同的
只是每种需求对应的图不一样,因此此次作业中使用了一个Map类来存储这4个不一样
的图,并且对每个图应用dijistra算法即可得到答案。
四.bug分析
第一次作业中没有出现bug。
第二次作业在删除点的邻接点时出现了逻辑错误,修复逻辑即成功。
第三次作业中没有出现bug。
五.总结
在本单元的学习中,在jml的学习这一部分,入门的难度其实不是很高,因为只要
细细研读了学习手册,对于基本的jml用法就都能够掌握。看懂jml是没有问题的,但是
如果说要让我们自己去写一段jml规格,那难度就不小了,首先是对于它的一些语法书写
很生疏,其次是我们很难去保证我们书写的正确性。
但幸好本单元的作业还是基于jml写代码,那么就没有给我们带来太多的书写jml的
困扰。总而言之,jml语言设计出来对代码的书写者是比较友好的,但是由于我们的学习中
对jml没有一套完整的学习流程,因此它对于我们初学者又非常的不友好。但最重要的其实
也不是对jml的学习,而是学习它规范代码的思维。
相信jml的学习体系会越来越好。
oo第三单元学习总结的更多相关文章
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
- OO第三单元总结——JML
目录 写在前面 JML理论基础 JML工具链 JMLUnitNG的使用 架构设计 Bug分析 心得体会 写在前面 OO的第三单元学习结束了,本单元我们学习了如何使用JML语言来对我们的程序进行规格化设 ...
- OO第三单元作业总结
OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...
- 规格化设计——OO第三单元总结
规格化设计--OO第三单元总结 一.JML语言理论基础.应用工具链 1.1 JML语言 JML(java modeling language)是一种描述代码行为的语言,包括前置条件.副作用等等.J ...
- OO第三单元——基于JML的社交网络总结
OO第三单元--基于JML的社交网络总结 一.JML知识梳理 1)JML的语言基础以及基本语法 JML是用于java程序进行规格化设计的一种表示语言,是一种行为接口规格语言.其为严格的程序设计提供了一 ...
- OO第三单元作业——魔教规格
OO第三单元作业--魔教规格 JML的理论基础和相关工具 JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...
- OO第三单元个人总结
OO第三单元个人总结 JML理论与基础与应用工具链 JML是什么? Java建模语言(JML)是一种行为接口规范语言,可用于指定Java模块的行为 .它结合了Eiffel的契约设计方法 和Larch ...
- 2020 OO 第三单元总结 JML语言
title: 2020 OO 第三单元总结 date: 2020-05-21 10:10:06 tags: OO categories: 学习 第三单元终于结束了,这是我目前为止最惨的一单元,第十次作 ...
- 2020北航OO第三单元总结
2020北航OO第三单元总结 本单元要求是根据JML规格完善代码,初看是一个简单的代码照搬实现的东西,但最后才发现由于CPU时间的限制,还考察了大量优化策略及数据结构中关于图的知识,是一次非常注重细节 ...
随机推荐
- 性能测试必备命令(3)- lscpu
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 显示有关CPU架构的信息 ...
- Golang入门学习(二):控制分支
文章目录 @[TOC] 1. 控制分支 1.1 if-else分支 1.2 switch分支 1.4 while 和do...while循环结构 1.5 多种循环结构 1.6 break 1.7 co ...
- Servlet生命周期和方法
一.五个生命周期方法,有三个很重要,初始化方法.提供服务方法和销毁方法 1.三个主要方法 2.另外两个重写的成员方法只做了解 二.生命周期详解 其中,每次刷新页面都是一次对servlet访问: 页面访 ...
- 浅谈KMP模式匹配算法
普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串"a b a b c a b c a c b a b"中,寻找内容为"a ...
- 安装 MongoDb
下面具体说下MongoDB安装之后的一些配置操作 [声明]我的安装路径是:C:\Program Files\MongoDB\Server\3.4 1. 创建数据库路径(data目录).日志路径(log ...
- php 的一些问题
------------------------------------------------------------------------------ * 绝对路径转化为相对路径 <?ph ...
- tomcat URI get 参数中文传到后台 乱码 URIEncoding
* 修改tomcat server.xml 找到这一行 <Connector connectionTimeout="20000" port="80" pr ...
- 启动Jenkins后无法访问,如何排错
做IT工作,使用各种工具的时候,遇到错误都是一堆英文,对于英语不好的人,看到报错可能就会心烦,我刚开始就是这种状态.后来,遇到问题,首先复制报错信息到百度上搜索,没有人请教的时候,你不能坐等问题自己解 ...
- javascript LinkedList js 双向循环链表 Circular Linked List
javascript LinkedList: function Node(elem, prev, next) { this.elem = elem; this.prev = prev ? prev : ...
- linux 脚本--守护进程
#/bin/bash #队列的守护进程 Date = `date +"%F-%H:%M:%S"` XMML = "/var/www/html/xiangmu" ...