OO课程第三次总结

OO课程第三次总结

一、规格化设计调研

  (一)规格化设计的发展历史

规格化设计的发展历史和计算机程序通用性增强有关。早期的程序功能单一,编制后基本不进行维护和修改,因此设计的规范未成为程序编写的阻碍。但随着计算机系统的飞速发展,软件的功能大大提升,由此带来的就是对程序可扩展性,可维护性的需求不断增加。而规格化设计是解决问题的有效方法,因此程序编写的各种规范逐渐推出,软件开发也就走上了规格化设计的道路。

  (二)人们重视规格化发展的原因

  1. 如今各种应用程序的开发都是以团队合作为基础,在多个开发人员共同写作的情况下,不得不遵循统一的规则,这不仅仅是为了提高合作开发的效率,也是为了后期维护成本考虑。
  2. 写规格是为了规范程序员的设计与编程,使之养成良好的习惯,从而增强软件产品的稳定性、健壮性和可靠性。
  3. 同一的规格可以提高软件的可读性,让程序员能快速地理解代码,使产品的可维护性提高。

二、bug分析

  (一)表格

    

  (二)分析

这三次作业我都很“幸运”吧,遇到的同学比较友好(很佛系),前两次都是挂了我一两个功能bug,JSF就没给我细扣,所以实际上我规格里还有很多错误等着我自己去发现和改正。

功能性bug产生的原因主要还是我能力不够。本身时间就紧,有些时候连写完代码都是奢望,更别说调试了,所以有些方法就是一遍写完后也没仔细测试就接着写其他的了。而我经常粗心大意,没有bug才是奇怪。

规格bug很多,只是互测时同学没给点出来。自己对于规格的重视不够,每次作业我都想着尽快完成,因此写新方法时我仍然是先写代码再写规格,写规格的练习对于我来说基本就没用。

三、JSF改进样例

  (一)前置条件

    1.

    更改前

1     private void colorConcert()
2         /**
3         * @REQUIRES:None;
4         * @MODIFIES:this;
5         * @EFFECTS:
6         * (\all int i,j;0<=i,j<80;this.lightinfo[i][j] == (this.lightinfo[i][j]==1?2:this.lightinfo[i][j]==2?1:0));
7         * this.lastchangetime == System.currentTimeMillis();
8         */

    更改后

1     private void colorConcert() {
2         /**
3         * @REQUIRES:this.lightinfo!=null && this.mygui!=null;
4         * @MODIFIES:this;
5         * @EFFECTS:
6         * (\all int i,j;0<=i,j<80;this.lightinfo[i][j] == (this.lightinfo[i][j]==1?2:this.lightinfo[i][j]==2?1:0));
7         * this.lastchangetime == System.currentTimeMillis();
8         */

    2.

    更改前

1     public boolean canMoveNorth() {
2         /**
3         * @REQUIRES:None;
4         * @MODIFIES: None;
5         * @EFFECTS:
6         * \result == (this.veratt>0&&map[this.veratt-1][this.horatt]>=2);
7         */

    更改后

1     public boolean canMoveNorth() {
2         /**
3         * @REQUIRES:0<=this.veratt<80 && this.map!=null && 0<=this.horatt<80;
4         * @MODIFIES: None;
5         * @EFFECTS:
6         * \result == (this.veratt>0&&map[this.veratt-1][this.horatt]>=2);
7         */

  (二)后置条件

    1.

    更改前

1     public void appendInfo(String info) {
2         /**
3         * @REQUIRES:info!=null;
4         * @MODIFIES:this.tmpstr;
5         * @EFFECTS:    this.tmpstr == (this.tmpstr + info);
6         */

    更改后

1     public void appendInfo(String info) {
2         /**
3         * @REQUIRES:info!=null;
4         * @MODIFIES:this.tmpstr;
5         * @EFFECTS:    this.tmpstr == (\old(this.tmpstr) + info);
6         */

    2.

    更改前

 1     public synchronized void init(int[][] graph, int[][] map, TaxiGUI mygui,TrafficLight light) {
 2         /**
 3         * @REQUIRES:(graph!=null && map!=null && mygui!=null && light!=null);
 4         * @MODIFIES:this;
 5         * @EFFECTS:
 6         * this.graph== graph;
 7         * this.map    == map;
 8         * this.mygui== mygui;
 9         * this.light== light;
10         */

    更改后

1     public synchronized void init(int[][] graph, int[][] map, TaxiGUI mygui,TrafficLight light) {
2         /**
3         * @REQUIRES:(graph!=null && map!=null && mygui!=null && light!=null);
4         * @MODIFIES:this;
5         * @EFFECTS:
6         * this.graph== graph && this.map == map && this.mygui == mygui && this.light==light;
7         */

    3.

    更改前

1     public void apply4Ser() {
2         /**
3         * @REQUIRES:None;
4         * @MODIFIES:this;
5         * @EFFECTS:
6         * this.credit == this.credit + 1;;
7         */

    更改后

1     public void apply4Ser() {
2         /**
3         * @REQUIRES:None;
4         * @MODIFIES:this;
5         * @EFFECTS:
6         * this.credit == \old(this.credit) + 1;;
7         */

四、设计规格和撰写规格

  (一)基本思路

  1. 为了尽快完成作业(平时课外活动太多,时间不够),我所有方法的规格都是写完代码后才补充的,因此规格写得相当差。
  2. 因此我的基本思路都是错误的,大概就是根据已写代码总结一下,能用表达式的用表达式,不能的就直接用自然语言。

  (二)体会

  1. 我写作业的目的就不正确,所有的作业都是以完成为目标的,我并没有把作业当成能提高自己水平的练习,相反,我潜意识里觉得这是一个负担。因此我主观上不够积极,每次写代码都有许多不情愿。而这致使我完成作业基本是在浪费时间,并没有得到应有的锻炼。
  2. 态度决定一切。端正自己的学习态度,把重心转移到学习上来,是我必须要做的。有时候被琐事缠身,就会忘了分清主次。在接下来的学习中,我会及时转换思想,尽自己所能完成好每一次作业,让自己付出的每一秒时间都有其价值。
  3. 具体来说,现在急需解决的问题就是写代码的思路,我一直没有给认真完成每次作业提供机会。每次作业我一开始就是在想算法,忽略了面向对象这门课课程训练要点,对整个程序一开始也不会有什么把握,基本是先粗略打个草稿,然后边想边写,最后不停地debug。其实我知道正确的流程应该是怎样,而且我周围同学也能为我提供各种帮助,但我一直未去改变这种模式。我想时间紧是我给自己的一个借口,我经常因为害怕完成不了而把作业质量打折。有时候改变就需要一个开端,当迈出第一步后,一切就都顺其自然了。所以下一步就是逼迫自己走出这关键的第一步。

猜你喜欢

转载自www.cnblogs.com/cinyinei/p/9108429.html