Design by Contract - Invariantes

Lendo o livro “UML Essencial”, do Martin Fowler, acabei por deparar novamente com a teoria do “Design by Contract”. Meu primeiro contato com esta teoria se deu em um artigo do Phillip Calçado “Shoes” (pcalcado) intitulado de “Contratos Nulos”.

Link para o artigo: http://fragmental.com.br/wiki/index.php/Contratos_Nulos

Minha dúvida em relação a esta teoria diz respeito as invariantes. No seu artigo Phillip Calçado “Shoes” define invariantes como:

Como exemplo ele faz a seguinte colocação:

Ao meu ver os valores do exemplo denotados por 20 e 50 podem ser vistos como atributos que auxiliam na construção das invariantes do objeto. Se esta minha colocação estiver correta, onde eu devo definir estes atributos? No construtor? Como um atributo imutável do meu objeto? Onde? E mais, este pode ser definido por quem utiliza o objeto?

:oops: PS: Achei melhor reformular toda a minha pergunta pois esta estava muito confusa. Peço desculpas a todos que já haviam lido este tópico.

Não exatamente. Releia o conceito de espaço-estado no próprio artigo.

Tem uma implementação no próprio artigo. Como Java não possui suporte completo a DbC, gambiarra-se com uma operação como checarEstado e põe-se na implementação desta, a invariante do objeto.

Não. E o termo encapsulamento endossa isso.