Cette conception remonte vraiment à Smalltalk, que je considérerais en grande partie comme une tentative de poursuivre l'orientation de l'objet au détriment de presque toutes les autres préoccupations. En tant que tel, il a tendance (à mon avis) à utiliser l'orientation objet, même lorsque d'autres techniques sont probablement (ou même certainement) supérieures.
Le fait d'avoir une seule hiérarchie avec Object
(ou quelque chose de similaire) à la racine facilite (par exemple) la création de vos classes de collection en tant que collections de Object
, il est donc trivial qu'une collection contienne tout type d'objet.
En contrepartie de cet avantage plutôt mineur, vous obtenez cependant toute une série d'inconvénients. D'abord, du point de vue du design, vous vous retrouvez avec des idées vraiment folles. Au moins selon la vision Java de l'univers, qu'est-ce que l'athéisme et une forêt ont en commun? Qu'ils ont tous les deux des codes de hachage! Une carte est-elle une collection? Selon Java, non, ce n'est pas le cas!
Dans les années 70, lorsque Smalltalk était conçu, ce genre de non-sens a été accepté, principalement parce que personne n'avait conçu une alternative raisonnable. Smalltalk a été finalisé en 1980, et en 1983, Ada (qui comprend les génériques) a été conçu. Bien qu'Ada n'ait jamais atteint le genre de popularité que certains prédisaient, ses génériques étaient suffisants pour supporter des collections d'objets de types arbitraires - sans la folie inhérente aux hiérarchies monolithiques.
Lorsque Java (et dans une moindre mesure, .NET) a été conçu, la hiérarchie des classes monolithiques était probablement considérée comme un choix «sûr» - avec des problèmes, mais surtout des problèmes connus . La programmation générique, en revanche, était celle que presque tout le monde (même alors) a réalisé était au moins théoriquement une bien meilleure approche du problème, mais que beaucoup de développeurs à orientation commerciale considéraient plutôt mal explorée et / ou risquée (c'est-à-dire dans le monde commercial , Ada a été largement rejeté comme un échec).
Mais soyons clairs: la hiérarchie monolithique était une erreur. Les raisons de cette erreur étaient au moins compréhensibles, mais c'était quand même une erreur. C'est une mauvaise conception, et ses problèmes de conception imprègnent presque tout le code qui l'utilise.
Pour un nouveau design aujourd'hui, cependant, il n'y a pas de question raisonnable: l'utilisation d'une hiérarchie monolithique est une erreur claire et une mauvaise idée.
object
dans le framework .NET en partie parce qu'il fournit des capacités de base sur tous les objets, tels queToString()
etGetHashCode()