面向对象第三单元博客(JML)】的更多相关文章

// demo/Graph.java package demo; ​ import java.util.ArrayList; ​ public class Demo { /*@ public normal_behaviour @ ensures \result == lhs - rhs; */ public static int compare(int i, int j) { return i - j; } ​ public static void main(String[] args) { c…
一.JML理论基础及相关工具链 1.JML理论基础 该部分梳理本单元作业中涉及到的JML知识. 1.1注释结构 JML采用javadoc注释的方式来表示规格,且每行以@开头.通过使用//@annotation来进行行注释,使用/*@annotaion@*/来进行块注释. 1.2JML表达式 1.2.1原子表达式 \result表达式,在方法规格中使用,通过\result来指代返回值.在谓词中使用\result,来表达放回值的限制条件. \old(expr)表达式,返回表达式expr在方法执行之前…
JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 (Behavior Interface Specification Language,BISL),基于Larch方法构建.BISL提供了对方法和类型的规格定义手段.所谓接口即一个方法或类型外部可见的内容.通过在Java代码中增加了一些符号,这些符号用来标识一个方法是干什么的,却并不关心它的实现.使用…
这三周的作业主要是围绕以JML来约束代码开发,以确保程序的正确性与鲁棒性. Part 1:三次作业的实现与bug 第一次作业没有任何算法和数据结构上的难度,对于Path和PathContainer的各个方法的实现按照给出的规格复读即可.唯一的难点(大约也不算难点)便是将NodeId进行映射,用hashmap就好,不过注意不要做一个调包侠,hashmap中有的方法譬如遍历很慢,虽然看上去只差常数,但是这个常数巨大,如果在第一次作业中不加处理就会在第二次作业中TLE. 第一次作业也让我们了解了抛异常…
OO第三单元博客 • (1)梳理JML语言的理论基础.应用工具链情况: 理论基础: 网络资料上面介绍JML有两种主要的用法: 开展规格化设计.这样交给代码实现人员的将不是可能带有内在模糊性.二义性的自然语言描述,而是逻辑严格的规格语言描述. 这应该也是我们学习JML的目的,希望我们可以掌握这种逻辑严格的面向对象思想,首先从整体上规范每个类和方法,再去考虑内部的逻辑实现. 针对已有的代码实现,书写其对应的规格,从而提高代码的可维护性.这在遗留代码的维护方面具有特别重要的意义. 这一方面,我个人的理…
第四单元博客 这个单元的作业,emmmm助教们做的工作还是一如既往的多,我们只负责添一添代码,最后一次作业了,感谢各位助教和老师,同时也希望我能顺利通过这最后一关. 架构设计 第一次作业架构展示 第一次作业需要实现10个命令,需要熟悉staruml的文件格式,同时还需要区分类与接口,理解继承与实现的不同. 本次作业的实现用了5个类: MyUml类,用于实现类和接口的相同行为 MyUmlClass类,用于实现类相关命令,是MyUml的子类 MyUmlInterface类,用于实现接口相关的命令,也…
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十三次作业: 用HashMap嵌套HashSet.ArrayList建抽象图 查询在容器里找就行了 共440行 第十四次作业: 复制上一次作业代码来解决类图查询 新建check类并复制上次作业建的图,然后完成三种check: 001: 用String(id)建容器,\(O(n^2)\)查询重复name…
第四单元博客总结--暨OO课程总结 第四单元架构设计 第一次UML作业 简单陈述 第一次作业较为简单,只需要实现查询功能,并在查询的同时考虑到性能问题,即我简单的将每一次查询的结果以及递归的上层结果都存储下来,使用一个Boolean型变量记录是否更新过该结果,即日后查询可以直接返回查询内容,而无需再次更新,也算是一种较为无脑的办法,根据后来的评测数据以及结果来看,性能.CPU运行时间并不是该次作业的重点,正确性才是关键之所在.需要同学们对于UML每一个元素有充分的理解,同时助教也在讨论区回答大家…
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼与熊掌不可兼得.故而,人们提出了结构化程序设计的编程思想,旨在使程序实现结构化设计的思想.这种设计思想旨在控制各个模块的程序复杂度,从而保证整体工程的正确性. 然而,由于硬件设备的快速迭代,对于软件的要求也越来越高.工程的日益庞大.面向过程程序的可扩展性差.可维护性有限,使得人们提出了面型对象程序编…
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值. 程序设计语言的三次分离使软件技术产生了飞跃 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过程:分析—设计—编码—测试,…
第三次博客作业:案例分析 1. 调研和评测 1.1 BUG及设计缺陷描述 主要测试博客园在手机端上的使用情况. [BUG 01] 不能后退到上一界面(IOS) 重现步骤:打开博客首页中任意博文,点击博文中的链接跳转到其它网页,点击左上角返回按钮 测试结果:直接回到博客首页,而非回到博文 分析:博文中引用链接是非常常见的情况,而当阅读了链接网页的内容后,用户一般会选择继续阅读博文,而直接跳转到博客首页意味着还要重新寻找之前阅读的博文,这样下来看完一篇博文要反复打开若干次,不仅很麻烦,还容易出现找不…
OO第三单元(地铁,JML)单元总结 这是我们OO课程的第二个单元,这个单元的主要目的是让我们熟悉并了解JML来是我们具有规格化编程架构的思想.这个单元的主题一开始并不明了,从第一次作业的路径到第二次作业的图再到第三次作业的地铁系统,需求一步步提升,整个架构也变得复杂.这三次作业为我们模拟了一个需求不断进化的过程,也考验了我们在规格之下的架构能力. 一.JML语言的理论基础及应用工具链 1. 理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种…
转眼间第三次作业了,似乎需要说点啥,那就说点. 规格&工业 说到这个,不得不提一下软件开发的发展史. 历史的进程 早在上世纪50年代,就已经有早期的编程语言出现,也开始有一些程序编写者出现(多为资深电子工程师,和半路出家的数学家). 然而那个时代,软件开发基本局限于自己或自己部门内部的使用,需求并没有很多,也并不复杂(或者说人们并没有意识到有那么多事情可以通过软件解决).所以基本都是靠早期的程序猿们的自由开发,也并没有现代代码规范的概念. 然而等到了60到70年代,随着硬件技术和工业界思想的进步…
一.第四单元架构设计 1.第一次作业 我在本次作业中设置了多个储存结构:Directory,ElementsInName,ElementsInId,Cache. Directory: 顾名思义,这是个目录结构,可以通过一个UmlElement的id来获得他的子元素(储存结构上的子元素).之所以设置这个结构是因为这个结构是UML中最基本的组织结构,通过UmlElement的一些属性可以快速的建立起来. ElementsInName: 在这个结构中,可以通过一个元素的名字,获取所有同名的元素.设置这…
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack了.在实际的程序执行,方法调用的过程中都离不开stack.那么,在一个成熟的类库里面,它的实现是怎么样的呢?也许平时我们实践的时候也会尝试着去写一个stack的实现玩玩.这里,我们就仔细的分析一下jdk里的详细实现. Stack 如果我们去查jdk的文档,我们会发现stack是在java.util这…
一,本周助教小结 工作稳步推进,时间分配合理,点评效率有所提高,主要进行了评分工作,工作情况都汇总到了Excel中. 二,助教本人博客       https://home.cnblogs.com/u/zaw-315/ 三, 学生作业/打分要求       https://www.cnblogs.com/nwnu-daizh/p/10527959.html https://www.cnblogs.com/nwnu-daizh/p/10447658.html 四,点评情况 学生的能力有差异,作业完…
一.JML语言理论基础及其工具链 1. JML语言理论基础 JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言(Behavior Interface Specification Language,BISL),基于Larch方法构建.BISL提供了对方法和类型的规格定义手段.所谓接口即一个方法或类型外部可见的内容.JML主要由Leavens教授在Larch上的工作,并融入了BetrandMeyer, John Guttag等人关于Design by Contract的研…
1.助教博客链接:https://www.cnblogs.com/lxt-/MyComments.html 2.学生作业打分要求:   https://www.cnblogs.com/nwnu-daizh/p/10527959.html https://www.cnblogs.com/nwnu-daizh/p/10447658.html 3.点评作业情况: 本周加上上周剩余未点评博客,共计20份,3人未交. 每个学生的基础不同,根据他们的完成成度都给出了相应的分数. 4.本周点评有困难的地方:…
项目搭建好了之后是不是可以编码了呢? 等等不要着急,我们是不是应该先设计一下?比如博客的功能等? 博客设计 先做个简单的个人博客,因为是个人版,所以可以省略注册.登录这些功能,表结构也可以简单一点. 基础功能:添加博文.显示博文.博文列表+查询+分页.讨论列表和添加讨论. 虽然功能弱了一点,但是麻雀虽小五脏俱全,vite2 和 vue3 的基础用法也可以体现一些. 功能设计 是不是做成图更明显一些? 代码设计 model设计 model代码 先来看看 model 的代码. /src/model/…
(1)梳理JML语言的理论基础.应用工具链情况 Java 建模语言(JML)将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点.有了 JML,我们就可以描述方法预期的功能,无需考虑实现.通过这种方法,JML 将延迟过程设想的面向对象原则扩展到了方法设计阶段. JML的核心包括以下三个部分: 前置条件:requires 后置条件:ensures 副作用:assignable/modifiable 同时它也能够对程序的各种执行条件进行划分:normal_…
一.JML 语言的理论基础及应用工具链 JML 是一种行为接口规格语言,提供了对方法和类型的规格定义手段.通过 JML 和其支持工具,不仅可以基于规格自动构造测试用例,并整合了 SMT Solver 等工具以静态方式来检查代码实现对规格的满足情况. 1.1 方法规格 JML 中的前置条件指的是在调用方法之前必须要满足的条件: 后置条件指的是该方法返回时必须要满足的条件,即制定了该方法的指责: 副作用范围限定指的是在执行过程中可能(允许)被修改的对象的属性数据或者类的静态成员变量. 1.2 类型规…
JML语言及工具 JML语言理论 JML语言利用前置条件.后置条件.不变式等约束语法,描述了Java程序的数据.方法.类的规格,是一种契约式程序设计的实现工具. 常用的JML语言特性 \result:表示方法的返回值. \old(expr):表示在方法执行前的值.一般将所关心的表达式取值整体括起来. \forall:全称量词修饰的布尔表达式,可声明局部变量.覆盖变量的取值范围,对目标条件进行验证. \exists:存在量词修饰的布尔表达式,类似\forall. \sum, \max, \min:…
一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句导致的面条式代码,极大的限制了程序的规模,“软件危机”产生,程序设计的思想又经历了几次革命,“结构化程序设计”作为解决软件危机的方案被提出来了,这个概念通过“自顶向下.逐步细化.模块化”的方法降低程序的复杂度,但需求永远发展的更快,又产生了第二次软件危机,这次软件危机主要体现在可扩展性和可维护性上面…
一.用户及权限(DBA有最高系统权限) 1.数据库的安全性:系统的安全性.数据的安全性 2.权限分类: 2.1系统权限:获得后可访问数据库 常用的有create table,create user,create views,create session 2.2对象权限:操作数据库对象的内容 Select  insert  update  delete 3.权限的使用 3.1授予系统权限 grant 系统权限 to 用户 [with admin option] with admin option…
一.数据库的定义.作用介绍 1.定义:按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 2.数据库的发展历史: 2.1.在1962年数据库一词出现在系统研发的公司的技术备忘录中 2.2.在1968年商业数据库诞生 2.3.在1970年IBM公司研究员埃德加·弗兰克·科德发表题为“大型共享数据库的关系模型”的论文,被誉为“关系数据库之父” 2.4.在1983年IBM发布DB2(自主开发的关系型数据库管理系统) 2.5.在1991年第一款开源的文件数据库发布 2.6.在2012年第…
一. 规格发展历史 从20世纪60年代开始,就存在着许多不同的形式规格说明语言和软件开发方法.在形式规格说明领域一些最主要的发展过程列举如下: 1969-1972 C.A.R Hoare撰写了"计算机编程的公理基础(An Axiomatic Basis for Computer Programming)"和"数据表示的正确性证明"两篇开创性的论文,并提出了规格说明的概念. 1974-1975 B.Liskow/S.N. Zilles和J. Guttag引入了&quo…
当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三次分离使软件技术产生了飞跃. 程序设计的演变大致可以分成以下三个过程: 1. 20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,很少使用系统化的开发方式,此时的代码更多的是私人性质…
调研规格化设计 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过程:分析—设计—编码—测试,使大型软件系统的开发成为可能 1975—1980年代,第二次分离,规格说明(Spec)和体(body)的分离说明是类型定义和操作描述,体是操作的具体实现.(具体的例子就是C++,Java等面向对象语言的类说明与类实现的分离.)解决方案设计只关注说明,实现时引用或者设计体.体的更改.置换不影响规格…
一. JML语言 1. 理论基础 首先,JML不是JAVA的一部分,它是一群研究者为JAVA设计的扩展部分,但还没有得到官方的支持.因此,JAVA编译器并不支持JML,所以要想JML起作用,只能采用类似openJML这样的第三方来编译,将JML 规格编译为运行时检查的语句,即RAC code(runtime assertion checking).如果代码实现与其JML规格不一致,将引发运行时JML exception. JML遵从契约式设计范式(DBC),Design by contract是…
P1 设计结构 三次作业的架构都没有较大的改动,基本上都是靠调度器接受输入的请求并放入队列,然后调度器根据不同的电梯的当前状态来把请求分配至不同电梯的请求队列中,最后电梯再根据自己的请求队列去运行.因此接下来都以第三次的作业为例来进行讨论. 一.diagram MainClass类 负责创建并启动调度器线程和所有的电梯线程,然后不断地读取输入并送至调度器. ControllerAll类 能够读取所有电梯的信息以及所有的输入请求,然后根据电梯的状态来对请求进行分配.其成员变量requests为共享…