I found an interesting quote in SICP that I think is highly relevant in object oriented design:
We see that, in general, a type may have more than one subtype. Triangles and quadrilaterals, for instance, are both subtypes of polygons. In addition, a type may have more than one supertype. For example, an isosceles right triangle may be regarded either as an isosceles triangle or as a right triangle. This multiple-supertypes issue is particularly thorny, since it means that there is no unique way to "raise" a type in the hierarchy. Finding the "correct" supertype in which to apply an operation to an object may involve considerable searching through the entire type network on the part of a procedure such as apply-generic. Since there generally are multiple subtypes for a type, there is a similar problem in coercing a value "down" the type hierarchy. Dealing with large numbers of interrelated types while still preserving modularity in the design of large systems is very difficult, and is an area of much current research.
I think a type with many subtypes is very common in mainstream languages. A type with more than one super type is also possible with multiple inheritance or interfaces.
When I read this quote, I thought of polymorphism and casting. So I think the issue is no longer as difficult as the text implies. Did polymorphism really solve this problem?
Dealing with large numbers of interrelated types while still preserving modularity in the design of large systems is very difficult, and is an area of much current research.
Is it still true today? Or this quote is outdated? If it's still true, can you provide some examples where modelling something with related types in object oriented languages would be very difficult?
I am not familiar with language design and so I would like someone to explain if my understanding of the quote is correct.