Eiffel ( Meyer, 1992a, 1992b; Thomas & Weedon, 1998; Wiener, 1996), Java (Feng & Zhu, 2001) and UML (Gogolla & Kobryn, 2001; Warmer & Kleppe, 1999) are powerful languages to implement a mobile object programming system (MOPS), in particular the intergalactic client-server program (ICSP). They provide for a software contract that captures mutual obligations through program constructs such as "require [else]" for precondition and "ensure [then]" for postcondition, assertions, and invariants. Eiffel provides for a good semantics for exception handling through a " rescue " clause and " retry " clause for dealing with the recovery and resumption.
The tool called iContract (Kramer, 1998) provides developers with supports for design by contract using Java. It provides:
Support for design testability.
Uniform implementation of invariant and pre- and postcondition checks.
Synchronized documentation and code.
Semantic level specification of what requirements and benefits a class/ message offers.
Special features include quantifiers (for all, exists), implications, old and return values references to postconditions, as well as the naming of exception classes to throw. iContract also supports the propagation of invariants, pre- and postconditions via inheritance, multiple interface implementation, and interface extension mechanism.
UML (Unified Modelling Language, Warmer & Kleppe, 1999) has also been gaining importance. OCL (Object Constraint Language) is used along with UML (Clark & Warmer, 2002). OCL can be used to add design by contract information in UML (Gogolla & Kobryn, 2001).