一、 规格化设计

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

  主要作用在于提高工程设计中的可维护性,可读性,明确功能,使整个编程任务变得清晰有序以减少程序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. 在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Framework 4

    在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Frame ...

  2. MyBatis 配制文件层次表

  3. 初探LaTeX

    第一次使用LaTeX 步骤  1 安装LaTeX 通过官网http://www.tug.org/mactex/mactex-download.html下载Mac版LaTeX. 安装成功后会出现 步骤 ...

  4. Unity 自定义导入时切割Sprite

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; us ...

  5. ajax、json、jsonp

    这章分享下ajax.json.jsonp的学习记录,不得不说这真是些令人激动的技术. 推荐文章: https://segmentfault.com/a/1190000012469713 http:// ...

  6. python入门(十五):装饰器

    1.装饰器(decorator):设计模式 作用:给不同的函数和方法,增加不同的公用的功能. @classmethod,@staticmethod等均是装饰器 定义一个装饰函数,函数必须返回一个闭包函 ...

  7. Java框架spring 学习笔记(十三):log4j介绍

    功能 日志功能,通过log4j可以看到程序运行过程的详细信息. 使用 导入log4j的jar包 复制log4j的配置文件,复制到src下面   3.设置日志级别 info:看到基本信息 debug:看 ...

  8. docker学习-常用命令2

    三.容器管理命令3.1 Docker commit 命令,从容器创建一个新的镜像.OPTIONS说明: -a :提交的镜像作者: -c :使用Dockerfile指令来创建镜像: -m :提交时的说明 ...

  9. Centos 7 Ntop 流量分析 安装

    Centos 6 安装 Ntop:https://www.cnblogs.com/weijie0717/p/4886314.html 一.安装 1.添加EPEL 仓库 # yum install ep ...

  10. The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored(E F G H I)

    http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=392 E:Sequence in the Pocket 思路:从 ...