Design by Contract (DbC) behandlar relationen mellan en metod och dess anropare som ett formellt avtal, definierat av tre saker: förvillkor (vad anroparen måste garantera), eftervillkor (vad metoden garanterar i gengäld) och invarianter (vad som förblir sant för objektet hela tiden).
De tre förpliktelserna
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
