Design by Contract (DbC) egy metódus és hívója közötti kapcsolatot formális szerződésként kezeli, amely három dologgal van meghatározva: előfeltételek (amit a hívónak garantálnia kell), utófeltételek (amit a metódus viszonzásul garantál), és invariánsok (amit az objektum számára mindig igaz marad).
A három kötelezettség
PRECONDITION → caller's duty: inputs/state the method requires to run correctly
POSTCONDITION → method's duty: what it promises on return (if precondition held)
INVARIANT → always-true property of the object, before and after every method
