Design by Contract (DbC) tretira odnos između metode i njezinog pozivatelja kao formalni ugovor, definiran s tri stvari: preduslovi (što pozivatelj mora jamčiti), postuvjeti (što metoda zauzvrat jamči), i invarijante (što ostaje istinito za objekt u svakom trenutku).
Tri obveze
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
