oo第12次作业
一、规格化设计发展历史
在上世纪60年代,由于程序猿们难以忍受超级难懂的机器语言和稍微好懂一点点的汇编语言,便发明了结构化的程序语言,使得程序猿们能愉快地编写复杂程度适中的程序。但是需求是在不断增长的,渐渐地程序复杂度上涨得超过了人们的想象,使用结构化的程序语言也会无法控制。这时,面向对象的程序设计方法便应运而生。但是人和人写代码的习惯是不一样的,干脆用一套规格化的框架来写出代码大致功能,让不同的人都能看的舒服。正是如此,程序规格化设计越来越被人们重视,其对于代码编写的规范能够让程序变得更加易懂,能让使用者更加轻松简单的学会如何正确使用这段程序。此外,通过规格的抽象和总结,使用者能够直接使用这段程序而免去浪费大量时间来看懂代码的痛苦过程。更重要的是,代码的维护变得更加简单。其一,按我自身的经历,程序中隐藏的逻辑错误比如括号位置写错或者其他有关优先级的bug,在找到相应错误方法后能够非常轻松的通过抽象出来的规格判断代码具体错误位置。其二,在真正的做项目开发时,规格化设计能够方便整个团队的开发,因其能够统一规范每个人的编写方式,能使分工更加细致,使团队之间更加协调。
二、规格bug

三、规格bug分析
对于EFFCTS里面的错误我认为主要的原因是自己对于jsf的书写规范还是理解的不够深,所以使得虽然自己知道逻辑是怎样的但是表达出来不符合规范,所以造成了逻辑的错误以及书写上面的不规范。而对于MODIFIES和REQUIRES上面的问题,主要是因为自己写的有些着急,所以一些变量没有注意到,因为程序和jsf是分开写的,所以一旦没有看仔细,就会出现漏过一些变量的情况
四、不好写的写法和改进
1.
/**
* @REQUIRES: None
* @MODIFIES: None
* @EFFECTS: (\all int i; 0<=i<=r.taxis.size())==>\result.contains(MIN(r.taxis.get(i).pathlength))
*/
没有考虑输入指向空的情况,因此这部分JSF的前置条件写的不完整。
改进如下
/**
* @REQUIRES: r!=null
* @MODIFIES: None
* @EFFECTS: (\all int i; 0<=i<r.taxis.size) && (\exists int j; 0<=j<r.taxis.size && r.taxis[j].credit>=r.taxis[i])
* ==>\result.contains(j)==true
*/
2.
/**
* @REQUIRES: x!=null;
* @MODIFIES: queue;
* @EFFECTS:
*queue.contains(x);
这个函数是把请求x加入到队列中,在这里还需要对请求的类别进行判断,即只把乘客请求加入到队列中,不用管开关路请求
改进如下:
/**
* @REQUIRES: (x!=null)&&(x.gettype()==0);
* @MODIFIES: queue;
* @EFFECTS:
*queue.contains(x);
3.
/**@REQUIRES:None
* @MODIFIES:None
*@EFFECTS:获得start_x的值,起点的x坐标
*/
运用自然语言
改进如下:
/**@REQUIRES:None
* @MODIFIES:None
*@EFFECTS:\result==>start_x
*/
4、
/**@REQUIRES:
*@MODIFIES:
*@EFFECTS:q!=null
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/
直接使用源代码
改进如下:
/**@REQUIRES:
*@MODIFIES:
*@EFFECTS:(q!=null)==>\result=true
otherwise==>\result=false;
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/
5、
/** @REQUIRES: r范围为0-300
*@MODIFIES: this
*@EFFECTS: this!=null
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/
前置条件必须为布尔表达式
改进如下:
/** @REQUIRES: 0<=r<300
*@MODIFIES: this
*@EFFECTS: this!=null
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/
五、分析被报的功能bug与规格bug在方法上的聚集关系
感觉主要问题在于对jsf的了解不够透彻,指导书给的例子太少了,然后自己遇到一些情况就会不知道标准的正确结果。所以写的时候心里也没有底,所以才会有这些规格bug
六、心得体会
感觉上自己对jsf还是有些不重视,因为没有办法知道jsf的正确和错误吧,要是写的时候能有办法知道自己写的正确或者错误(类似java里的书写错误直接提醒?),可能就会好一点,感觉自己还是对指导书的理解不够透彻吧。不管怎么说还是自己的理解有问题给了别人可乘之机,被扣得分数也都心服口服,不过也算知道了jsf的作用和重要性吧,希望以后能写的更好
oo第12次作业的更多相关文章
- 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的编程也算终于了解了一丢丢.现在做完了三次的编程作业,对前三次的作业做一次总结. 第一次作业 ------------------ ...
- day 12 课后作业
# -*- coding: utf-8 -*-# @Time : 2019/1/4 20:49# @Author : Endless-cloud# @Site : # @File : day 12 课 ...
- Week12《java程序设计》第12次作业总结
Week12<java程序设计>第12次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 ...
随机推荐
- css3 实现动画
CSS3,我们可以创建动画,它可以取代许多网页动画图像,例如下面这个小球动画 使用css3关键帧动画可以轻松实现 请看下面代码 <!DOCTYPE html> <html lang= ...
- Java 8 默认方法
转自:https://www.runoob.com/java/java8-default-methods.html Java 8 新增了接口的默认方法. 简单说,默认方法就是接口可以有实现方法,而且不 ...
- 有哪些api接口可以实现微信自动唤醒浏览器,下载app,打开网页
现在微信渠道可以说是拉新最快的渠道,因为微信具备强裂变性.但是目前微信对第三方下载链接的拦截是越来越严格了,那么想要在微信内肆无忌惮地推广链接就需要用到微信跳转浏览器的接口,那如何获取该接口呢? ...
- P1100 高低位交换
题目描述 给出一个小于2^{32}232的正整数.这个数可以用一个3232位的二进制数表示(不足3232位用00补足).我们称这个二进制数的前1616位为“高位”,后1616位为“低位”.将它的高低位 ...
- python 打开文件基础 (笔记)
1.打开文件:建立文件与程序的关联 open(filenname,mode) filenname:文件名(包括路径):mode :打开模式 模式 打开模式 含义 r 只读,文件不存在则报错 w 只写, ...
- Golang源码探索(一) 编译和调试源码(转)
GO可以说是近几年最热门的新兴语言之一了, 一般人看到分布式和大数据就会想到GO,这个系列的文章会通过研究golang的源代码来分析内部的实现原理,和CoreCLR不同的是, golang的源代码已经 ...
- python学习Day7 数据类型的转换,字符编码演变历程
一.数据类型的转换 1.1.1.字符转列表:lst1 = str.split(默认空格,也可依据指定字符分界),若无分界字符,就没法拆分,这时可以直接放进list转成列表 ----> s1 = ...
- TS和C#的差异
1. TS中let a : () => void; 假设有个class B, B里有个方法 c; 不能像C#委托一样, a = B.c;...........如果这样的话方法c里调用的thi ...
- cmake: error: symbol(s) not found for architecture x86_64 mac os 使用boost asio
最近在使用boost的asio库,在mac osx 上编写网络服务程序报错: :-1: error: symbol(s) not found for architecture x86_64 然后在CM ...
- 关于新版oracle不支持wm_concat函数的解决办法
oracle12G中不支持wm_concat,就改用:listagg(合并字段,'连接符号') within group (order by 字段) 来实现列转行