Lecture Lab - Pump

class Pump {
  public static final int COST_PER_LITRE = 1.45;

  // REQUIRES: 10 * COST_PER_LITRE  <= amount 
  //		   <= 30 * COST_PER_LITRE 
  // EFFECTS: payment is recorded 
  void prePay(int amount) {
     // stub
  }

  // EFFECTS: returns at least 10 litres of gas
  int dispense() {
     return 0;  // stub
  }
}
class APump extends Pump {
  // REQUIRES: 5 * COST_PER_LITRE  <= amount
  //		   <= 30 * COST_PER_LITRE 
  // EFFECTS: payment is recorded 
  void prePay(int amount) {
  // stub  
  }

  // EFFECTS: returns at least 5 litres of gas
  int dispense() {
     return 0;  // stub   
  }
}
class BPump extends Pump {
  // REQUIRES: 20 * COST_PER_LITRE  <= amount
  //		   <= 30 * COST_PER_LITRE 
  // EFFECTS: payment is recorded 
  void prePay(int amount) {
   // stub 
  }
  // EFFECTS: returns at least 20 litres of gas
  int dispense() {
     return 0;  // stub   
  }
}

Is precondition narrower?

Is postcondition wider?

Is LSP violated?

A

B

C

N-N-N

N-Y-Y

Y-N-Y

N-N-N

No good substitute if LSP is violated!

?-?-?

?-?-?

?-?-?

?-?-?

D2 Lecture Lab Solution

By Felix Grund

D2 Lecture Lab Solution

  • 442