一、 规格化设计

    规格化抽象,即将执行的细节抽象为用户所需求的行为(模块做什么)。

  主要作用在于提高工程设计中的可维护性,可读性,明确功能,使整个编程任务变得清晰有序以减少程序BUG。

  说其发展历史,似乎显得有些牵强,因为“规格化设计”这个标准的概念还没有得到广泛运用以至于百度上进行查找全都是北航同学的博客……不过类似的规范化设计仍然在计算机编程中发挥着比较重要的作用,在面向对象中,其主要衍生于数据抽象和过程抽象这样的初始概念,之后由于代码维护的重要性结合面向对象的特点产生了规格化设计的概念,以此使程序层次分明有条不紊。

二、作业中规格BUG总结

第九次作业 :

  无规格BUG ;

第十次作业 :

  REQUIRES规格bug2个 ; EFFECTS规格bug1个 ;

  错误原因 : (1)前置条件整型变量未限制范围大于0 ; (2)前置条件格式不正确(\old的使用) ;

       (3)后置条件用自然语言描述 ;

第十一次作业:

  REQUIRES规格bug2个 ; 一个方法未写规格 ;

  错误原因 : (1)前置条件整型变量未限制范围 ; (2)前置条件国歌约束之间使用 " ; " 连接而不是" && " ;

错误原因总结:
  这几此作业的规格bug出现原因主要是因为未能覆盖所有方法的所有约束,以及某些细节的格式错误。

三、规格改进实例

1、前置条件实例

(1)实例1

代码段截图:

前置条件更正为:

time>=InitTime ;

(2)实例2

改进前:

更正为:

p1!=null && p2!=null ;

(3)实例3

改进前:

前置条件改进为:

command.detail.paidan!=null  && command.detail.paidan.way!=null && command.detail.paidan.waytime!=null ;

(4)实例4

改进前代码:

前置条件改进为:

time>=0 ;

2、后置条件实例

(1)实例1

改进前:

后置条件改进为:

(\exist int i; 0 <= i< queue.size;queue[i].from==this.from && queue[i].to==this.to && abs(queue[i].time-this.time)<100)==>\result==true;

(2)实例2

改进前代码:

后置条件改进为:
(\all int i; 0 <= i< str.size;(new command(str).IsLegel()==true ==>queue.contains(command)==true)) ;

四、规格撰写心得体会

  最后抒发以下自己这一个月的编程体会……

  不得不说这一个月是我大学以来最无聊的编程体验,因为几乎所有的时间都围绕着一个事情:扣分(不管是给别人扣分还是被别人扣分,如何写代码已经把“不被扣分”放在了首要的位置)……

  老师可能无法体会到目前学院的OO课程氛围是怎样的,毕竟作为决策者,中心是培养我们的能力,至于采取的措施能不能起到效果或者说能不能真正起到利大于弊的效果,目前确实无法下定论,但是可以肯定的是OO这门课程的学习氛围确实非常差,最明显的一点:每次周五十点以后朋友圈满满的负能量(这个各位同学应该是深有体会的)…

  我并不是单纯抱着吐槽的目的写这些感想,因为我并不否认课程组的初衷,规格化的编程思想在工程设计中确实是很重要的,但是出发点与实际情况常常会背道而驰,所以我想把真实情况放映出来,同时表达一下自己对于课程的看法;

  规格化设计的目的在于提高可维护性,提高可读性,明确模块的目的,通过编写规格的时间大大减少更多的debug时间和代码维护的时间,这样看确实应该起到“事半功倍”的效果,但是由于目前这种规格化设计的死板性和互测中标准的欠缺,我们目前的情况似乎是“事倍功半”,并且…直接导致了OO互测不再像是相互学习的途径,而更像是一场没有硝烟的战争,然而战争的结果却无法让人信服(这也是为什么目前OO课的课程氛围极差,充满了负能量);

  同为编程为基础,我想同另外两门课作为对比:

  一是大一的数据结构:大作业中同学们能真正通过对课程知识的理解和实践去探索挖掘其中的细节奥秘,以此不断优化自己程序的算法(尽管时间只减少了1毫秒,仍然是货真价实的提高);

  二是大二上的计组:要求及其严苛,但是标准统一,评分干脆,所以尽管艰难但是没有抱怨过了就是过了没过就是没过,心服口服。

  当然并不是说OO就一无是处,OO也有它的优点,并且面向对象本身的特性导致了很多时候在标准上就无法做到完全统一,但是针对目前OO课程的体系,是否可以借鉴一下这两门课的课程思想,尤其是改善一下学院内的学习氛围,如果一门课迫使大家一步步地把分数变为绝对核心,同时这门课带给大家的不是完成任务以后的兴奋和成就感,而是相互“损害”弥漫的负能量,想想还是挺悲哀的…

  撇开评价不说,其实还是需要感谢课程组对于每位同学的付出,毕竟有时理想与现实总不能做到统一,或许老师和助教也是无奈……

  只能希望这门课的体系能越来越完善,所有人的努力都会得到回报,共勉…

OO第9-11作业总结的更多相关文章

  1. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  2. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  3. oo第八次作业

    oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...

  4. 面向对象OO第15次作业总结

    面向对象OO第15次作业总结 1.论述测试与正确性论证的效果差异,比较其优缺点测试通过大量测试数据来覆盖测试代码,比较直观,优点在于知道测的是啥,特别直观,缺点在于很难覆盖所有情况.正确性论证从逻辑关 ...

  5. 面向对象OO第9-11次作业总结

    面向对象OO第9-11次作业总结 1.关于规格化设计的调研程序规格说明:对程序所应满足的要求,以可验证的方式作出完全.精确陈述的文件.“规格说明”一词与其他工业产品的“规格说明书”有相似的含义.不过, ...

  6. 面向对象OO第5-7次作业总结

    面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租 ...

  7. 面向对象OO第1-3次作业总结

    面向对象OO第1-3次作业总结 学习OO已经四周了,对OO以及JAVA的编程也算终于了解了一丢丢.现在做完了三次的编程作业,对前三次的作业做一次总结. 第一次作业 ------------------ ...

  8. OO第三单元作业总结

    OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...

  9. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  10. 【OO学习】OO第三单元作业总结

    [OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...

随机推荐

  1. node图片资源捉取

    开头先简单说明一下,因为网络资源上最多的资源就是图片,所以在这里也只简单的捉取了图片资源,至于其他的文档,音乐等我是没有试过的.所以暂时还是以图片为案例!!! Step1 首先我们需要加载我们需要的资 ...

  2. 发布python包

    写python程序时常常要导入各种包,使用其中的模块或功能.我们如果有可以复用的功能或模块也可以发布成包,并安装在自己或他人电脑上,以供自己或别人使用.python发布包的步骤如下: 一.首先为模块创 ...

  3. https://github.com/gaoyangxiaozhu/DockerVI

    [更新]分享一个开源项目DockerVI,一个基于NodeJS实现的Docker Swarm可视化解决方案

  4. ES6你不知道的let关键字及变量的提升

    一.JavaScript变量创建到访问赋值的过程 创建 create/declare 初始化 initialize 赋值 assign 1.函数的提升 // 函数这种变量声明,首先会创建变量,再初始化 ...

  5. MySQL添加用户并授权

    一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户名 host:指定该用户 ...

  6. C# 自制报表组件 EzReportBuild 2.0

    组件无闪烁.画面流畅,效率一般,支持SQL和ACCESS两种.可以完成报表设计.预览.打印等功能,提供接口函数,可以将设计.预览等嵌入到自定的winform中调用,使用简单.每份报表可设置多页,每页可 ...

  7. Python Selenium系列学习

    以下记录刚接触Python Selenium操作Web UI的学习问题: 1.python selenium三种等待方式: ①强制等待:time.sleep(value):设置等待最简单的方法就是强制 ...

  8. mysql 文件

    慢查询日志 log_query_time 查询时间超过这个值则会出现在慢查询日志中,默认值是10 log_slow_queries  是否开启慢查询 log_queries_not_using_ind ...

  9. airTest 使用体验

    airTest是国内网易自研的一套基于图像识别进行UI自动化测试的框架,目前已经可以支持andriod,ios,web端的UI测试,在google开发者大会上得到了google的高度认可. 最近在学习 ...

  10. Java创建对象的初始化顺序

    1. 初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化块在构造方法执行之前被执行: ...