The topic of this paper is contracts in object-oriented languages, especially in languages with behavioral subtyping. The authors describe how problematic it can be to identify the offender in contract violations, and then offer a suggestion on how to improve this situation. Their suggestion is to generate wrappers, which call the original methods according to the actual used types. If a contract violation occurs, they offer new statements to blame the real offender. They conclude that in object-oriented languages, the actual types involved and the associated methods need to be checked, not just the actual pre/postconditions of a method.
This paper does a good job of pointing out problems with contracts in object-oriented languages. The examples are well chosen and support the findings of the authors very clearly.
However, the issues merit further research than just a paper. Although pre/postconditions deserve to be well-established tools in procedural languages, they are underused. Also worthy of further discussion is the overhead that the authors’ suggestions bear.
The authors have chosen Java as their research object and so their suggestions will work best for languages with Java-like behavior. One might ask how well it would work for other approaches.