Design by Contract (DbC) traite la relation entre une méthode et son appelant comme un accord formel, défini par trois choses : les préconditions (ce que l'appelant doit garantir), les postconditions (ce que la méthode garantit en retour) et les invariants (ce qui reste vrai pour l'objet à tout moment).
Pourquoi c'est important
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
