Defining substitutability criteria for object oriented components