Design by Contract (DbC) obravnava razmerje med metodo in njenim kličočem kot formalno dogovor, definiran s tremi stvarmi: pogoji pred izvajanjem (kaj mora zagotoviti klicatelj), pogoji po izvajanju (kaj metoda zagotavlja v zameno) in invariante (kaj ostane resnično za objekt ves čas).
Tri obveznosti
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
