zoukankan      html  css  js  c++  java
  • 面向对象第三单元感想

    面向对象第三单元感想

    前言

    这一单元并没能开一个比较好的头,导致之后的工作搁置并且未能完成,三次作业全军覆灭。第一次作业丝毫不了解JML,在实现规格要求的时侯没能正确理解规格的要求。在逐渐熟悉JML的过程中,之后的两次作业所分配的时间都用来填补第一次作业的坑了,第二次作业也仅完成大半。这种脱节式的学习带来的不好的影响就是没有明确的时间观念,而且期间会产生落差感,希望下一单元作业不要再出现这种状况。

    正文

    1.JML语言的理论基础以及工具链

    理论基础

    JML(java modeling language),是一种行为规范语言,遵循契约式设计,重在对规格的定义而并不在实现,目的即避免自然语言的二义性,使得每个java模块都能有严格、唯一的定义。​

    ​语法方面,JML有它自身的语法表达式,在基于JAVA语法基础上,新增了一些操作符和和原子表达式组成的,例如原子表达式:/result 、量化表达式 /forall、集合表达式、操作符:<(表示是子类)等。

    ​ 规格方面,主要包括:

    • 前置条件(pre-condition)
    • 后置条件(post-condition)
    • 副作用范围限定(side-effects)

    ​ 因为有了这三个方面,一个方法的行为基本上就固定了,前置条件代表了方法调用者需要满足的义务,后置条件则是方法编写者需要满足的义务,而副作用范围则规定了方法对于一些属性的影响,通过这种制约,调用者和编写者实际上也就形成了一种契约,使得方法的编写和使用有了严格的限制,这种规格和契约的思想,在某种程度上也会减少bug的产生,并且也方便了测试,是一种功能强大的规范约束语言。

    工具链

    OpenJML:可以对代码进行JML规格的语法的静态检查,还支持使用SMT Solver动态地检查代码对JML规格满足的情况,因此OpenJML一般也自带有其支持的JML solver。

    JML UnitNG:根据JML描述自动生成与之符合的测试样例,重点会检测边界条件。

    2.架构设计

    在看过其他人的博客以及相应题目下的讨论后,我发现自己进行数据处理的手段是非常简单粗暴的,第一次作业由于并没有正确理解JML,所以一切都建立在规格上,没有丝毫的变通。具体体现在:1、完全依据规格规定的数据结构来进行定义,数组即数组,虽然可实现长度更改以及元素的排序存取,但是未考虑时间复杂度。2、仅仅认为后条件就是可以直接一句话就能规定的,在实现@ ensures pList.length == pidList.length;这一句话的时候,用了if(pList.length != pidList.length){不作输出及其他操作;}这样的笨比结构,理解真的差到极点。

    在具体实现第九次作业要求的时候,舍弃上边的“骚”操作,改采用了邻接表的方式,大大简化了长度变更的操作,而且设置一个公共长度N来控制两个列表长度不变。
    后两次作业并不完善,这里就不继续卖(diu)弄(ren)了

    3.本单元心得体会

    这单元作业在工程量上并比不过前面电梯那次,但是复杂度上提升了不少,一是由于要理解JML要求,并将之转化为我们的方法,二是需要参与自己的设计,以减少时间复杂度。我在完成作业的时候,花费在解读JML规格上的时间大概占了四成,将之转化成书面上可以理解的规格要求,之后便是架构设计,只有最初确定比较好的架构,之后的工作才会变得简单。最后填充方法算是比较简单的逻辑,只是在处理具体方法的时候可以加以不一样的算法结构,可以使程序更快或者更安全。通篇下来,都在透露着自身的不足,希望接下来的一个单元能能够对我更加“温柔”吧。
    勇士向死而生!
  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/xuwenguang/p/10902435.html
Copyright © 2011-2022 走看看