OO第9-11作业总结
一、 规格化设计
规格化抽象,即将执行的细节抽象为用户所需求的行为(模块做什么)。
主要作用在于提高工程设计中的可维护性,可读性,明确功能,使整个编程任务变得清晰有序以减少程序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作业总结的更多相关文章
- OO第一次博客作业
OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...
- oo 第一次博客作业
oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...
- oo第八次作业
oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...
- 面向对象OO第15次作业总结
面向对象OO第15次作业总结 1.论述测试与正确性论证的效果差异,比较其优缺点测试通过大量测试数据来覆盖测试代码,比较直观,优点在于知道测的是啥,特别直观,缺点在于很难覆盖所有情况.正确性论证从逻辑关 ...
- 面向对象OO第9-11次作业总结
面向对象OO第9-11次作业总结 1.关于规格化设计的调研程序规格说明:对程序所应满足的要求,以可验证的方式作出完全.精确陈述的文件.“规格说明”一词与其他工业产品的“规格说明书”有相似的含义.不过, ...
- 面向对象OO第5-7次作业总结
面向对象OO第5-7次作业总结 学习OO七周了,深切的感受到了这门课程的不友好.前三次作业能够算是勉强地通过了,但是从第五次作业开始就完全GG了.这三次作业,从多线程电梯开始,然后文件监控,然后到出租 ...
- 面向对象OO第1-3次作业总结
面向对象OO第1-3次作业总结 学习OO已经四周了,对OO以及JAVA的编程也算终于了解了一丢丢.现在做完了三次的编程作业,对前三次的作业做一次总结. 第一次作业 ------------------ ...
- OO第三单元作业总结
OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- 【OO学习】OO第三单元作业总结
[OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...
随机推荐
- 使用Jquery easyui datagrid请求servlet没有反应的解决办法
在Jsp页面中把servlet请求地址写全,我已经将要注意的地方红色加粗了.我的jsp页面是新建的一个文件夹. <%@ page language="java" conten ...
- python_11 装饰器,闭包
装饰器:本质就是函数,功能是为其他函数添加附加功能 原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 #装饰器: def tim ...
- Unable to docker login through CLI - unauthorized: incorrect username or password
Unable to docker login through CLI - unauthorized: incorrect username or password To solve it proper ...
- Python学习日记 --day4
list列表: # # 列表 ''' # 增 # li = [1,'qwer','小明',[1,2,'qwe']] # print(li[0],type(li)) # 跟字符串的操作方法是一样的,返回 ...
- Django项目创建
一.创建方式 1.命令行创建: 2.pycharm创建项目: 二.创建MySQL数据库 三.修改配置文件链接数据库 修改python连接数据库方式 四.Django配置 1.添加app项目 2.修改h ...
- Druid中配置双数据库
配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...
- [Sw] 使用 Swoole Server task/协程 处理大数据量异步任务时注意
关于 Buffered Query 和 Unbuffered Query:http://www.php.net/manual/zh/mysqlinfo.concepts.buffering.php 对 ...
- Working with Excel Files in Python
Working with Excel Files in Python from: http://www.python-excel.org/ This site contains pointers to ...
- java调用webservice方法
由于项目的历史原因,webservice服务端是乙方公司开发的,我们自己开发的系统需要去调用乙方公司的webservice接口.前面用了网上提供的一种方法(非生成代理类),怎么也调用不成功(也许是因为 ...
- 网上Java总结
1. 编译 javac 文件名.java 运行 java 文件名 2. Public class 和 class 声明类的区别:public 声明的文件名必须和其类名一 ...