(一)规格化设计的发展


  人们在脱离了面向机器的语言,创建了当时看来更高级的面向过程的语言后,大大地提升了编程效率,但一些面向过程的语言中的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

面向对象课程 第三次博客总结相关推荐

  1. 闽江学院2015-2016学年下学期《软件测试》课程-第三次博客作业

    闽江学院2015-2016学年下学期<软件测试>课程-第三次博客作业 作业提交班级:13软金2班全体同学 作业提交截止日期:2016年4月30日24:00前(超过截止时间提交的不给成绩) ...

  2. OO第三次博客作业——规格

    OO第三次博客作业--规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  3. [BUAA OO]第三次博客作业

    OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...

  4. SEO网络优化的三个博客优化技巧

    相信大家都听说过"博客",很多人也在使用博客记录自己的日常生活,但是对于新站长而言,刚开始写博客记录自己的学习经历,分享知识经验,很容易一腔热血在几个月以后就被打回原形,因为自身S ...

  5. OO第三次博客总结作业

    OO第三次博客总结作业 1.规格化设计的大致发展历史和为什么得到了人们的重视  发展历史...上网搜索了一圈...什么都没搜索到,只能谈谈自己对规格化设计重要性的一些看法. 规格化设计,顾名思义,是有 ...

  6. GitHub一份深度学习资源,包括论文、数据集、课程、图书、博客、教程、框架

    整体来说,这份资源可以理解为是深度学习领域的hao123,一共将深度学习各方面的资源分成了7大类.具体是: 论文 论文资源版块,一共分成3个类别,分别是模型.核心和应用. 在每个类别之下,又进行了两次 ...

  7. java博客论坛设计报告_javaweb课程设计报告个人博客网站的实现(Java).doc

    javaweb课程设计报告个人博客网站的实现(Java) 项目名称: 个人博客网站的实现(Java) 学生姓名: 学 号: 班 级: 指导教师: 2014年12月23日 目录 1 绪论1 1.1系统应 ...

  8. TensorFlow 最佳学习资源大全(含课程、书籍、博客、实战项目)

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx TensorFlow 从0到1学习资料大全,含入门指南.在线博客.视频教程.书籍推荐和实战项 ...

  9. Django 快速入门课程「搭建个人博客」

    文章目录 1. 初探 Django 1. Why Django? 2. 新建 Python 虚拟环境 3. 安装 Django 并新建项目 4. 初始化生成文件用途 5. 检测 Django 项目是否 ...

  10. Redis入门到精通只需要三篇博客

    2019独角兽企业重金招聘Python工程师标准>>> (Redis介绍:略) Redis-win-x64位程序的下载地址(缺分,分多的可以给我贡献点): http://downlo ...

最新文章

  1. 什么心态阻碍了你职业的发展
  2. Zynq linux的I2C驱动学习笔记
  3. js 继承的几种方式
  4. php短信接口加密_PHP短信接口、PHP短信验证码接口源码
  5. 【BZOJ-4631】踩气球 线段树 + STL
  6. hadoop2.7 伪分布
  7. Powershell配置SharePoint环境
  8. datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
  9. 后台产品的基石:权限管理体系设计
  10. 百度云服务器最新活动,百度云服务器1折_云服务器超值优惠_特价云服务器促销活动-天互数据...
  11. Bailian2976 Bailian1936 All in All【字符串匹配】
  12. 【深度学习笔记】多层感知机,非权值共享型卷积神经网络,权值共享型卷积神经网络之间的关系
  13. MS SQL Server 2000 游标的使用方法
  14. 《XX》――SY 手把手教你如何XX
  15. 中国的Palantir诞生,开启大数据关联挖掘的新时代
  16. npm install报错errno -4048
  17. linux系统下 blast,Linux下BLAST安装及BLAST使用
  18. 20190527-陈静初-文件操作-笔记
  19. 身为一个SEO/SEM/运营专员,一天的工作是怎样的?
  20. 如此正经,日本首部让人流泪的VR电影诞生

热门文章

  1. 威金又现!专杀收集整合
  2. CSS 属性 aspect-ratio
  3. html5 手机uc浏览器 复制链接,UC浏览器里任意复制粘贴文本的方法
  4. 腾达ap设置说明_腾达(Tenda)F6无线信号放大模式(Client+AP)设置教程 | 192路由网
  5. python -白白入门篇
  6. 使用Everything清理垃圾文件
  7. 【暑假阅读推荐书目】历史篇·中国史
  8. 欧奈尔RPS曲线的编制方法及常见问题解答
  9. win7无法连接打印机拒绝访问_打印机共享时拒绝访问
  10. UBUNTU——启动栏图标问号?异常