Waldemar Horwat wrote:
> Graydon Hoare wrote:
>> Quoting Liskov[1]:
>>
>> "What is wanted here is something like the following substitution
>> property: If for each object o1 of type S there is an object o2 of
>> type T such that for all programs P defined in terms of T, the
>> behavior of P is unchanged when o1 is substituted for o2, then S
>> is a subtype of T."
>>
>> Think it over. Imagine what you'd have to delete from any language you
>> use, for its "subtype" relation to conform to that definition.
>
> What? For example, what would you have to delete from Java, ignoring the
> parts where a program can examine itself like reflection?
The big one is "method overriding in subtypes", though as you say there
are various other cases such as reflection. If I have a program that
uses some type:
class Mul {
int f(int x, int y) { return x * y; }
}
I can form a subtype such that substituting the subtype for the
supertype in some program will likely change the behavior of the program:
class NotTheMulYoureLookingFor extends Mul {
int f(int x, int y) { return x + y; }
}
There was once a line of work on "ADT" languages that aimed to formulate
subtyping in more restrictive terms. Liskov's work was generally in that
lineage. Ours is not.
-Graydon
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss