Ho trovato una citazione interessante in SICP che penso sia molto rilevante nella progettazione orientata agli oggetti:
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.
Penso che un tipo con molti sottotipi sia molto comune nelle lingue tradizionali. Un tipo con più di un supertipo è anche possibile con ereditarietà o interfacce multiple.
Quando ho letto questa citazione, ho pensato al polimorfismo e al casting. Quindi penso che il problema non sia più difficile come suggerisce il testo. Il polimorfismo ha davvero risolto questo problema?
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.
È ancora vero oggi? O questa citazione è superata? Se è ancora vero, puoi fornire alcuni esempi in cui la modellazione di qualcosa con tipi correlati in linguaggi orientati agli oggetti sarebbe molto difficile?
Non ho familiarità con la progettazione della lingua e quindi vorrei che qualcuno spiegasse se la mia comprensione della citazione è corretta.