Contract Programming
Class invariants
class Day { int d; invariant() { assert(d >= 1 && d <= 31); } }
Preconditions
"loosened" by polymorphic inheritance
Postconditions
"tightened"