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. 面向系统综合设计-图书馆管理系统或购物车 ...
随机推荐
- 关于在Python3.6下安装MySQL-python,flask-sqlalchemy模块的问题
这周末在学习Flask框架的时候,有需要安装MySQL-python模块,一开始用pip安装: pip install MySQL-python 但是安装的时候报错了: error: command ...
- 201772020113李清华《面向对象程序设计(java)》第十二周学习总结
1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的API: (3) 了解Java GUI中2D图形中字体与颜色的 ...
- part1
一.hello world 明确的指出 hello.py 脚本由 python 解释器来执行.coding:utf-8处理脚本中的中文 #!/usr/bin/env python # _*_ codi ...
- Mac系统如何显示隐藏文件?
显示全部文件 defaults write com.apple.finder AppleShowAllFiles -bool true osascript -e 'tell application & ...
- pywin32安装教程
下载 pywin32-224-cp37-cp37m-win32.whl 放在 Scripts 目录下,然后cmd 安装 pip install pypiwin32 即可成功 此次安装成功对应的pyth ...
- js判断访问浏览器是安卓还是ios还是微信浏览器还是微博
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- curl -d中的json存在引号怎么处理?
1\将其改写为I'\''m就可以执行 2\ curl -u elastic:mypass -X GET "localhost:9200/_analyze?pretty" -d 'a ...
- SpringCloud-day03-服务注册与发现组件Eureka
5.服务注册与发现组件Eureka 5.1Eureka简介: Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中 ...
- Excel VBA ——如何导出数据到excel表格
sub OutPut() Dim FileTitle, MyPath, MyFullName As String Application.ScreenUpdating = false '关闭表格公式的 ...
- 学生管理系统(javaweb版)
准备用javaweb 的技术做一个简单的学生管理系统 打算不用登陆的那种,直接进入管理界面. 完成增删改查的功能. 慢慢开始更新,先写那么多.