next up previous
Next: 1.6.3 Inheritance and the Up: 1.6.2 An Extended Example: Previous: 1.6.2.3 Maintaining Sample Test

1.6.2.4 A Sample Program

We are now ready to define a simple program to sum the integers in a lists. We will add a definition of the method

int sum();
to each class in our composite class hierarchy for IntList. Let's begin by writing the contract and header for sum in the abstract class IntList:
// IntList := Empty() + Cons(Object, IntList)

abstract class IntList {
  ...
  abstract int sum();
  // returns the sum of the numbers in this 
}

Next we need to generate examples showing the expected behavior of the method:

// IntList := Empty() + Cons(Object, IntList)

abstract class IntList {
  ...
  abstract int sum();
  // returns the sum of the numbers in this 

  void test(int ans) {
    // assumes that ans is the correct answer for this.sum()
    // prints this and the this.sum(); 
    // reports failure if result does not match ans 

    int result = sum();	
    System.out.println("computed sum of " + this + " = " + sum());
    if (result != ans)  
      System.out.println("FAILURE: correct answer is " + ans);
  }

  public static void main(String[] args) {
  // test method
    Empty.only.test(0);
    Cons.oneElt.test(1);
    Cons.twoElts.test(6);
    Cons.threeElts.test(-4);
  }
}

As the fourth step, we select a template for writing the sum method:

class Empty {
  ...
  int sum() { ... }
}

class Cons extends IntList {

  int first;
  IntList rest;
  ...
  int sum() { ... first  ... rest ... rest.sum() ... ; }
}

Finally, we complete the coding process by filling in the bodies of the methods in the template:

class Empty {
  ...
  int sum() { return 0; }
}

class Cons extends IntList {

  int first;
  IntList rest;
  ...
  int sum() { return first + rest.sum(); }
}

To finish the design recipe, we test our code using the examples in the main method of IntList.


Finger exercise: Load the IntList2 sample program into the DrJava Definitions window. In the Interactions window, run the tests specified in IntList.main. Using the design recipe, add a definition of a method prod to compute the product of a list of numbers and test it. Note that the Data Analysis and Design step has aleady been done in IntList code.


next up previous
Next: 1.6.3 Inheritance and the Up: 1.6.2 An Extended Example: Previous: 1.6.2.3 Maintaining Sample Test
Corky Cartwright
2000-01-07