Design by Contract (DbC) trata a relação entre um método e seu chamador como um acordo formal, definido por três coisas: precondições (o que o chamador deve garantir), postcondições (o que o método garante em troca), e invariantes (o que permanece verdadeiro para o objeto em todos os momentos).
As três obrigações
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
