I am interested in the `Design by Contract` approach. It seems that for `preconditions` checked exceptions must be used to enforce them.  

But for `post-conditions` and `class-invariants` I think that `assertions` are preferred.  

Am I right? If I am correct, why for `post-conditions` and `class-invariants` assertions which may be disabled are allowed? Shouldn't post-conditions and invariants also be enforced?