oo第3次博客作业

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

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

上一篇:怎样按字母顺序(ABCDEF)动态添加控件


下一篇:SQL Server 性能优化之——T-SQL 临时表、表变量、UNION