Design by Contract (DbC) považuje vztah mezi method a jejím volajícím za formální dohodu definovanou třemi věcmi: preconditions (co musí volající zaručit), postconditions (co method zaměnem zaručuje), a invariants (co zůstává pravdivé pro objekt za všech okolností).
Tři povinnosti
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
