面向对象课程 第三次博客总结
(一)规格化设计的发展
人们在脱离了面向机器的语言,创建了当时看来更高级的面向过程的语言后,大大地提升了编程效率,但一些面向过程的语言中的goto语句极大地限制了程序的规模。规格化程序设计采用子程序(比如函数)、代码区块、for循环以及while循环等结构来替换传统的goto,以此来改善计算机程序的明晰性、质量以及开发时间。
随着计算机硬件的飞速发展,应用复杂度越来越高,原有的程序开发方法已经越来越不能满足人们的需求。19世纪60年代爆发了表现为软件质量低下、项目无法如期完成、项目严重超支等情况的软件危机。
经过一段时间的探索,人们提出了“规格化程序设计”来解决软件危机。1968年戴克斯特拉发表了著名的《GOTO有害论》,引起了人们多方的探讨,在这个过程中,规格化程序设计方法诞生。与此同时,第一个结构化的程序语言Pascal诞生,并迅速流行。
规格化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。规格化程序设计通过“自顶向下、逐步细化、模块化”的方法,将软 件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。结构化程序方法成为了 1970 年 代软件开发的潮流。
(二)规格BUG
没有被报规格bug,可能是测试者偷懒,又或者测试者也坚定地维护和谐六系。但是不报不等于没有,个人检查发现的bug还是有。比如有两个方法的规格是用自然语言写的。以及,存在不规范的使用现象。
(三)规格BUG产生的原因
1、诚如老师所言,许多方法都是先写了代码,再回头写的规格,所以有差错;
2、对于JSF规范的掌握不够牢固,很多时候写的时候还要对照回去,导致出现语法的错误;
3、规格其实是为了写好代码服务的,但代码以及写好了,再回头写规格,有种多余之感,认识上的误差;
4、某些情况不知道如何表达,展开又过于庞大,只好用自然语言代替。
(四)错误写法和改进
@REQUIRES:
1、偷懒型
public Taxi(int i,TaxiGUI g,mapInfo map,int _type);/*** @REQUIRES:Null* @MODIFIES:this.num* this.state* this.waitTime* this.credit* this.rtime* this.gui* this.taxiCoordinate[0]* this.taxiCoordinate[1]* this.m* @EFFECTS: this.num=i;* this.state=2;* this.waitTime=0;* this.credit=0;* this.rtime=0;* this.gui=g;* this.taxiCoordinate[0]=new Random().nextInt(80);* this.taxiCoordinate[1]=new Random().nextInt(80);* this.m=map;*/
显然在这个构造器中,对于输入的出租车编号以及地图是有要求的,无脑写Null,就为了简化工作量。
改进:
public Taxi(int i,TaxiGUI g,mapInfo map,int _type);/*** @REQUIRES:(0<=i<80 && map is Connecting diagram)* @MODIFIES:this.num* this.state* this.waitTime* this.credit* this.rtime* this.gui* this.taxiCoordinate[0]* this.taxiCoordinate[1]* this.m* @EFFECTS: this.num=i;* this.state=2;* this.waitTime=0;* this.credit=0;* this.rtime=0;* this.gui=g;* this.taxiCoordinate[0]=new Random().nextInt(80);* this.taxiCoordinate[1]=new Random().nextInt(80);* this.m=map;*/
2、自创符号代替规范语法型
public void setCoordinate(int x,int y) ;/*** @REQUIRES:0<=x<80, 0<=y<80* @MODIFIES:this.taxiCoordinate* @EFFECTS:set the taxi's coordinate to be(x,y)*/
其中 “,” 是作者自己想当然使用的表达并且的符号,应该替换为 “&&”
改进:
public void setCoordinate(int x,int y) ;/*** @REQUIRES:0<=x<80 && 0<=y<80* @MODIFIES:this.taxiCoordinate* @EFFECTS:set the taxi's coordinate to be(x,y)*/
3、自然语言型:
public synchronized int [][] getto(int[] coordinate,Order o,int sta) ;/*** @REQUIRES:\exist coordinate in map* \exist o* @MODIFIES:coordinate,state* @EFFECTS:set the taxi to coordinate* record the pass point information in o*/
显然是伪装成正确语法的自然语言
public synchronized int [][] getto(int[] coordinate,Order o,int sta) ;/*** @REQUIRES:map.contains(coordinate)* o!=Null* @MODIFIES:coordinate,state* @EFFECTS:set the taxi to coordinate* record the pass point information in o*/
4、不完整型
public Order(int scx,int scy,int dcx,int dcy,Taxi[] t,int ind);/*** @REQUEST:0<=scx,scy,dcx,dcy<80* @MODIFIES:Order* @EFFECT:initial the order*/
对照代码我发现其实实现的功能中对参数的要求不止于此,还有对于t以及ind的要求
public Order(int scx,int scy,int dcx,int dcy,Taxi[] t,int ind){/*** @REQUEST:0<=scx,scy,dcx,dcy<80 && t!=null && 0<=ind<100* @MODIFIES:Order* @EFFECT:initial the order*/
5、忘写型
public void SetarriveSrctime(long t) ; //空空如也
改正:
public void SetarriveSrctime(long t) ;/*** @REQUIRES:None* @MODIFIES:arriveSrctime* @EFFECTS:arriveSrctime=t*/
@EFFRCTS:(同上)
1、偷懒型:
public void SetarriveSrctime(long t) ;/*** @REQUIRES:None* @MODIFIES:arriveSrctime* @EFFECTS:None
Modifiels都说有改动,然后骗我说EFFECTS没有
public void SetarriveSrctime(long t) ;/*** @REQUIRES:None* @MODIFIES:arriveSrctime* @EFFECTS:arriveSrctime=t*/
2、自创符号型:
public int[] getDstCoordinate() ;/*** @REQUIRES:None* @MODIFIES:None* @EFFECTS:\result=dstCoordinate*/
不该是“=”,而是“==”
public int[] getDstCoordinate() {/*** @REQUIRES:None* @MODIFIES:None* @EFFECTS:\result==dstCoordinate*/
3、自然语言型:
public Order(int scx,int scy,int dcx,int dcy,Taxi[] t,int ind);/*** @REQUEST:0<=scx,scy,dcx,dcy<80 && t!=null && 0<=ind<100* @MODIFIES:Order* @EFFECT:initial the order*/
可能是因为规范写的话,要写的太多了吧
public Order(int scx,int scy,int dcx,int dcy,Taxi[] t,int ind){/*** @REQUEST:0<=scx,scy,dcx,dcy<80 && t!=null && 0<=ind<100* @MODIFIES:Order* @EFFECT:* this.srcCoordinate[0]=scx;* this.srcCoordinate[1]=scy;* this.dstCoordinate[0]=dcx;* this.dstCoordinate[1]=dcy;* this.ordtime=System.currentTimeMillis()/500*500;*/
4、不完整型
public void iteration() ;/*** @REQUIRES:NONE* @MODIFIES:None* @EFFECTS:* (type==1)==>\result==iter*/
事实上,还有一个分支条件
public void iteration() {/*** @REQUIRES:NONE* @MODIFIES:None* @EFFECTS: * (type!=1)==>\result=="the taxi is not vip!"* (type==1)==>\result==iter*/
5、忘写型
public void SetarriveSrctime(long t) ; //空空如也
改正
public void SetarriveSrctime(long t) ;/*** @REQUIRES:None* @MODIFIES:arriveSrctime* @EFFECTS:arriveSrctime=t*/
(五)功能BUG和规格BUG的聚集关系
序号 | 功能BUG | 出现BUG的方法 |
1 | 边界的出租车在判断流量是忘记越界问题,导致CRASH | Taxi类,getto函数 |
2 | 车辆回头现象 | 流量的刷新时间与车辆运行时间不协调 |
(六)心得体会
1、在写代码的时候,应该提前想好自己想要实现什么,如何实现,一个方法需要哪些数据,他会对我的类产生什么样的影响,这样写出来的代码有据可循,无论是debug还是将来改动都会方便得多;
2、撰写JSF可以很好地表现一个方法的特性,就像是这个方法的使用说明书,也是编程者的生产设计图。无论是自己再看代码,或者其他使用者使用你的方法,都会十分便捷。
转载于:https://www.cnblogs.com/silence-age/p/9109220.html
面向对象课程 第三次博客总结相关推荐
- 闽江学院2015-2016学年下学期《软件测试》课程-第三次博客作业
闽江学院2015-2016学年下学期<软件测试>课程-第三次博客作业 作业提交班级:13软金2班全体同学 作业提交截止日期:2016年4月30日24:00前(超过截止时间提交的不给成绩) ...
- OO第三次博客作业——规格
OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- SEO网络优化的三个博客优化技巧
相信大家都听说过"博客",很多人也在使用博客记录自己的日常生活,但是对于新站长而言,刚开始写博客记录自己的学习经历,分享知识经验,很容易一腔热血在几个月以后就被打回原形,因为自身S ...
- OO第三次博客总结作业
OO第三次博客总结作业 1.规格化设计的大致发展历史和为什么得到了人们的重视 发展历史...上网搜索了一圈...什么都没搜索到,只能谈谈自己对规格化设计重要性的一些看法. 规格化设计,顾名思义,是有 ...
- GitHub一份深度学习资源,包括论文、数据集、课程、图书、博客、教程、框架
整体来说,这份资源可以理解为是深度学习领域的hao123,一共将深度学习各方面的资源分成了7大类.具体是: 论文 论文资源版块,一共分成3个类别,分别是模型.核心和应用. 在每个类别之下,又进行了两次 ...
- java博客论坛设计报告_javaweb课程设计报告个人博客网站的实现(Java).doc
javaweb课程设计报告个人博客网站的实现(Java) 项目名称: 个人博客网站的实现(Java) 学生姓名: 学 号: 班 级: 指导教师: 2014年12月23日 目录 1 绪论1 1.1系统应 ...
- TensorFlow 最佳学习资源大全(含课程、书籍、博客、实战项目)
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx TensorFlow 从0到1学习资料大全,含入门指南.在线博客.视频教程.书籍推荐和实战项 ...
- Django 快速入门课程「搭建个人博客」
文章目录 1. 初探 Django 1. Why Django? 2. 新建 Python 虚拟环境 3. 安装 Django 并新建项目 4. 初始化生成文件用途 5. 检测 Django 项目是否 ...
- Redis入门到精通只需要三篇博客
2019独角兽企业重金招聘Python工程师标准>>> (Redis介绍:略) Redis-win-x64位程序的下载地址(缺分,分多的可以给我贡献点): http://downlo ...
最新文章
- 什么心态阻碍了你职业的发展
- Zynq linux的I2C驱动学习笔记
- js 继承的几种方式
- php短信接口加密_PHP短信接口、PHP短信验证码接口源码
- 【BZOJ-4631】踩气球 线段树 + STL
- hadoop2.7 伪分布
- Powershell配置SharePoint环境
- datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
- 后台产品的基石:权限管理体系设计
- 百度云服务器最新活动,百度云服务器1折_云服务器超值优惠_特价云服务器促销活动-天互数据...
- Bailian2976 Bailian1936 All in All【字符串匹配】
- 【深度学习笔记】多层感知机,非权值共享型卷积神经网络,权值共享型卷积神经网络之间的关系
- MS SQL Server 2000 游标的使用方法
- 《XX》――SY 手把手教你如何XX
- 中国的Palantir诞生,开启大数据关联挖掘的新时代
- npm install报错errno -4048
- linux系统下 blast,Linux下BLAST安装及BLAST使用
- 20190527-陈静初-文件操作-笔记
- 身为一个SEO/SEM/运营专员,一天的工作是怎样的?
- 如此正经,日本首部让人流泪的VR电影诞生
热门文章
- 威金又现!专杀收集整合
- CSS 属性 aspect-ratio
- html5 手机uc浏览器 复制链接,UC浏览器里任意复制粘贴文本的方法
- 腾达ap设置说明_腾达(Tenda)F6无线信号放大模式(Client+AP)设置教程 | 192路由网
- python -白白入门篇
- 使用Everything清理垃圾文件
- 【暑假阅读推荐书目】历史篇·中国史
- 欧奈尔RPS曲线的编制方法及常见问题解答
- win7无法连接打印机拒绝访问_打印机共享时拒绝访问
- UBUNTU——启动栏图标问号?异常