Code Contracts Using Documentation Comments

  • Declare an ADT using a Java interface, with complete JavaDoc comments.
  • Understand the importance and use of pre- and post-conditions for methods documentation.

Here is the IndexedList documented using Java Documentation Comments (or simply Javadoc):

/**
 * IndexedList ADT.
 */
public interface IndexedList {

  /**
   * Change the value at the given index.
   *
   * @param index representing a position in this list.
   *              Pre: 0 <= index < length
   * @param value to be written at the given index.
   *              Post: this.get(index) == value
   */
  void put(int index, int value);

  /**
   * Retrieve the value stored at the given index.
   *
   * @param index representing a position in this list.
   *              Pre: 0 <= index < length
   * @return value at the given index.
   */
  int get(int index);

  /**
   * Get the declared capacity of this list.
   *
   * @return the length
   *         Inv: length() >= 0
   */
  int length();
}

Documentation comments are considered part of the specification of an ADT, as well as a general good programming practice.You are expected to follow this practice in this course.

Documentation comments provide code contract: a way to specify the behavior of your ADT as well as preconditions, post-conditions, invariants, etc.

  • Preconditions are requirements that must be met when entering a method. For example, the get method specifies Pre: 0 <= index < length(), which means the value for the index parameter must be non-negative and smaller than the length of the list. If a client violates this condition, they cannot expect the get method to behave as specified.

  • Postconditions describe expectations at the time the method exits. For example, the put method specifies Post: this.get(index) == value which means once the method is successfully executed, you can call get(index) and expect it to return the value.

  • Invariants describe the expected state for all objects of a class. For example, the length method specifies Inv: length() >= 0 which means the length is always a non-negative value.

Resources

Here are two articles to help you get up to speed with Java Documentation Comments:

You can add a Javadoc using automatic comments in IntelliJ. See this guideline for more details.