一、规格化设计的发展历史

20世纪60年代,软件出现严重的危机Dijkstra提出了goto语句的危害,由此引发了软件界长达数年的论战,并产生了结构化的程序设计方法。随着计算机

技术的发展,结构设计化语言和结构化分析已经无法满足用户的需求,OOP由此应运而生,即面向对象的程序设计。面向对象程序设计的诞生是程序设计方法学的一场革命,大大提高了开发效率,减少了软件开发的复杂度,提高了软件的可维护性,可扩展性。1990年以来,面向对象分析、测试、度量和管理研究都得到长足的发展。规格化设计随其而生,为了提高程序的规范性,对类。方法等进行规范化设计,有利于模块化的划分。

二、三、列举并分析规格的bug

佛系测试法,若是bug和我有缘,那么他会自己跑出来的,测试者可能是抱着这种心态,很幸运,他们没有给我报JSF的bug,好人一身平安!!!

四、 列举5个前置条件和5个后置条件的不好写法,并给出改进写法

1.

 public int hanging(boolean[] d) {
/**@REQUIRES:d.contain(true)
* @MODIFIES:point_x,point_y
* @EFFECTS: Based on flow, decide next step;
*/
int minT=101;
ArrayList<Integer> index = new ArrayList<Integer>();
for(int i=0;i<4;i++) {
if(d[i] && map.getTarfic((i==0)?point_x-1:point_x,(i==3)?point_y-1:point_y,(i<2)?false:true)<=minT) {//UP
if(map.getTarfic((i==0)?point_x-1:point_x, (i==3)?point_y-1:point_y,(i<2)?false:true)==minT) {
index.add(i);
}
else {
minT=map.getTarfic((i==0)?point_x-1:point_x,(i==3)?point_y-1:point_y,(i<2)?false:true);
for(int j=0;j<index.size();j++) index.remove(j);
index.add(i);
}
}
}
return index.get(new Random().nextInt(index.size())); }

像这个方法,主要作用的控制出租车的闲逛状态的运动,传入的是一个数组,表示上下左右的方向是否可走,require是要求传入数组至少包含一个true,effect则是判断闲逛状态的下一步位置。这个难写的主要原因是因为实现的逻辑太过于复杂,包括了很多的判断,循环,导致很难用形式化的语言来描述。

解决办法应该就是分解程序,将每一部分的逻辑更加简单。

2.

 public void writeFile(boolean a) {
/**@REQUIRES:NONE;
* @MODIFIES:file;
* @EFFECTS: write into file;
*/
try {
FileWriter fw=new FileWriter(r.getName()+".txt",true);
String s = a?" 派单":" 车辆";
fw.write("车辆编号:"+id +s+"位置:("+point_x+","+point_y+") 时刻:"+System.currentTimeMillis()+"\r\n");
fw.close();
System.out.println("车辆编号:"+id+s+"位置:("+point_x+","+point_y+") 时刻:"+System.currentTimeMillis()+"\r\n");
} catch (IOException e) {}
}

这个方法的作用是为了向文件写入信息和向控制台输出信息。这个实在是不知道如何表示写文件和向控制台输出。

五、 第十一次作业被报了一个未实现迭代器,第九次作业被报了一个未能实现模拟接单,前者的问题是因为没有很好的理解迭代器的定义,后者的问题是因为不知道应该如何模拟接单。。。。:(

六、 在设计规格和撰写规格时的思路和体会

写规格的时候还是按照先把方法实现再来写规格,因为我觉得规格更难写XD,体会就是规格化设计确实能够帮助他人,其他程序猿更好地理解方法,或者是类的作用,除此之外,还有就是要简化你的每一个类,每一个方法,控制代码的复杂度,这样也更方便进行单元测试,同时这也会对以后我们写工程化代码的时候,和别人合作的时候提供更多的便利,好看工整的代码在哪都会受欢迎呢。

oo第3次博客作业的更多相关文章

  1. OO第四次博客作业!

    oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...

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

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

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

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

  4. OO第4次博客作业

    OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...

  5. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  6. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  7. OO第三次博客作业---透过代码看设计

    不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...

  8. oo第四篇博客作业

    测试与正确性论证的效果差异及各自的优缺点: 测试针对一些典型的输入情况进行方法验证,可操作性更强,结果直观.但不能完全覆盖所有的输入情况. 正确性论证则是根据代码逻辑从所有的方面对方法进行论证,可操作 ...

  9. [BUAA OO]第四次博客作业

      一.      测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...

  10. OO第四次博客作业--第四单元总结及课程总结

    一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...

随机推荐

  1. BP neural network optimized by PSO algorithm on Ammunition storage reliability prediction 阅读笔记

    1.BP neural network optimized by PSO algorithm on Ammunition storage reliability prediction 文献简介文献来源 ...

  2. nodejs常见问题

    Js 基础问题 与前端 Js 不同, 后端是直面服务器的, 更加偏向内存方面. [Basic] 类型判断    [Basic] 作用域    [Basic] 引用传递    [Basic] 内存释放  ...

  3. web前端bug积累

    在将img转换为canvas时,在firefox中,如果img引用的svg使用了fill=(#id),此fill是无效的,可能导致整个转换失效,html2canvas.js也不行.chrome有效,其 ...

  4. Kotlin 使用类似C# 的yield功能

    用过c#的可能对 yield 关键字爱不释手,那么在像我这种被迫上java贼船的人,就想找到类似的功能. 我使用的是kotlin,下面的方法演示了产生一个序列的功能. val fibonacciSeq ...

  5. 数学运算比IF要快

    问题 虽然很早就知道,CPU在处理 if 这样的判断语句时,使用了预测的技术,所以如果条件总是一个结果,效率就很好.反过来说,如果你使用数学运算避免 if 判断,那么就意味着性能一定比 if 要好. ...

  6. 【转】Binlog 基本操作

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. 一般 ...

  7. [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目

    环境准备 Git: 安装部署使用略. Jenkins: 2.46.2版本安装部署略(修改jenkins执行用户为root,省得配置权限) JDK: 安装部署略. Maven: 安装部署略. 服务器免密 ...

  8. 关于人人网的form查找和打印

    from lianxi import sessionimport json# urlurl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqu ...

  9. JQuery 方法合集(懒人备记)

    原创文章,转载请私信.谢谢~ PS:请将jquery的引用文件放在head的标签内 语法:$(selector).action() $(document).ready(function(){ // 开 ...

  10. php 面向对象二

    多态: 多态就是多种形态:多态分为方法重写和方法重载,但是php不支持方法重载 重写: 子类和父类的方法名必须一致,严格标准要求参数必须一致,但是参数可以不一致 子类中覆盖的方法不能比父类的方法访问权 ...