| AnExternallyCheckableBMISpreadsheet.java |
package lectures.documentations.assertions;
import util.annotations.WebDocuments;
import bus.uigen.ObjectEditor;
// What do you think externally checkable could mean?
@WebDocuments({"Lectures/DocumentationsAssertions.pptx", "Lectures/DocumentationsAssertions.pdf", "Videos/DocumentationsAssertions.avi"})
public class AnExternallyCheckableBMISpreadsheet extends AnErroneousAssertingSpreadsheet {
double initialHeight, initialWeight; // will allow initial state to be restored in this version
public AnExternallyCheckableBMISpreadsheet(double anInitialHeight,
double anInitialWeight) {
super(anInitialHeight, anInitialWeight);
initialHeight = anInitialHeight;
initialWeight = anInitialWeight;
}
@Override
//Increasing visibility of pre so external modules - in particularly OE- can call it
public boolean preGetBMI() {
return super.preGetBMI();
}
// prcondition method for restoreHeightAndWeight, again public
// If the initial state has not changed, nothing to restore so no point calling restoreHeightAndWeight
public boolean preRestoreHeightAndWeight() {
return getHeight() != initialHeight || getWeight() != initialWeight;
}
public void restoreHeightAndWeight() {
assert preRestoreHeightAndWeight();
setHeight(initialHeight);
setWeight(initialWeight);
}
public static void main (String[] args) {
ObjectEditor.edit(new AnExternallyCheckableBMISpreadsheet(1.77, 75));
}
// What is the naming condition we are using for public precondition methods.
// Given a method M, its precondition is checked by a method with what header/signature?
// Run the program. Look at the AnExternallyCheckableBMISpreadsheet->restoreHeightAndWeight. Should
// the item be grayed out? Is it? If not execute it. What happens.
// Change the height or weight to 0. What happens to the display?
// Look at the menu item AnExternallyCheckableBMISpreadsheet->restoreHeightAndWeight again.
// Should the item be grayed out? Is it? If not execute it. What happens.
// Do you have a theory about how ObjectEditor is interacting with the public precondition methods?
}