Design by Contract (DbC) рассматривает отношение между методом и его вызывающей функцией как формальное соглашение, определяемое тремя вещами: preconditions (что должен гарантировать вызывающий код), postconditions (что гарантирует метод в return), и invariants (что остается истинным для объекта во все времена).
Три обязательства
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
