programming by contract