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

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. 《c++ concurrency in action》读书笔记1

    1. 什么是并发通俗来说,并发指两个或者多个独立的事件(活动)同时发生.比如,一边走路一边说话,两个手同时做不同的事情.计算机系统的并发是指一个系统并行处理多个独立的事件(活动), 而不是按顺序或者一 ...

  2. hbase的api操作之过滤器

    Comparison Filter:   对比过滤器:    1.RowFilter        select * from ns1:t1 where rowkey <= row100    ...

  3. [GXOI/GZOI2019]旧词

    很像LNOI 2014 LCA那道题. 同样的套路,离线以后直接扫描线. k=1的话就是原题. 考虑一般情况. 原本的做法是对x到根的这条链做一下区间+1操作,目的是为了是的在深度为i的位置得到的贡献 ...

  4. PHP获取POST的几种方法

    一.PHP获取POST数据的几种方法 方法1.最常见的方法是:$_POST['fieldname'];说明:只能接收Content-Type: application/x-www-form-urlen ...

  5. composer常用的一些命令\参数\说明

    安装 curl -sS https://getcomposer.org/installer | php 或者 php -r "readfile('https://getcomposer.or ...

  6. git相关操作记录

    拉取远端并强制覆盖本地文件 有时候会出现想放弃本地修改的情况,那么只需要下面几行命令 git fetch --all git reset --hard origin/master git pull / ...

  7. os.path官方文档(附翻译)

    This module implements some useful functions on pathnames. To read or write files see open(), and fo ...

  8. 访问链接出现 ERR_CONTENT_DECODING_FAILED 错误的解决办法

    今天跑一个应用,别人的机器上都是好的,但是本地部署就是不行.访问页面调试工具console总是提示 ERR_CONTENT_DECODING_FAILED 错误. 就是数据表格无法显示,经排查,发现是 ...

  9. PlantUML + Chrome 联合使用

    之前都是本地下载安装一个PlantUML,安装过程有点复杂,涉及到的其他插件也有些多. 后面发现Chrome浏览器上提供了相关插件,整个过程简直太流畅了.记录下. 安装: 打开Chrome的线上应用商 ...

  10. 关于C++中Hash的应用

    本文只介绍我们在C++中如何使用Hash这种数据结构达到我们编程的目的,有关Hash的概念和实现不做详谈. C++11新增了一类散列容器包括unordered_set, unordered_map, ...