Design by Contract (DbC) behandelt de relatie tussen een methode en de aanroeper als een formeel akkoord, gedefinieerd door drie dingen: precondities (wat de aanroeper moet garanderen), postcondities (wat de methode ervoor terug garandeert), en invarianten (wat voor het object altijd waar blijft).
De drie verplichtingen
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
