Este diseño realmente se remonta a Smalltalk, que vería en gran medida como un intento de perseguir la orientación a objetos a expensas de casi cualquier otra inquietud. Como tal, tiende (en mi opinión) a usar la orientación a objetos, incluso cuando otras técnicas son probablemente (o incluso ciertamente) superiores.
Tener una sola jerarquía con Object(o algo similar) en la raíz hace que sea bastante fácil (por ejemplo) crear sus clases de colección como colecciones Object, por lo que es trivial que una colección contenga cualquier tipo de objeto.
Sin embargo, a cambio de esta pequeña ventaja, obtienes una gran cantidad de desventajas. Primero, desde el punto de vista del diseño, terminas con algunas ideas verdaderamente locas. Al menos según la visión Java del universo, ¿qué tienen en común el ateísmo y un bosque? ¡Que ambos tienen códigos hash! ¿Es un mapa una colección? Según Java, no, ¡no lo es!
En los años 70, cuando se estaba diseñando Smalltalk, este tipo de tonterías fueron aceptadas, principalmente porque nadie había diseñado una alternativa razonable. Sin embargo, Smalltalk se finalizó en 1980 y en 1983 se diseñó Ada (que incluye genéricos). Aunque Ada nunca alcanzó el tipo de popularidad que algunos predijeron, sus genéricos fueron suficientes para soportar colecciones de objetos de tipos arbitrarios, sin la locura inherente a las jerarquías monolíticas.
Cuando se diseñó Java (y, en menor medida, .NET), la jerarquía de clases monolítica probablemente se vio como una opción "segura", una con problemas, pero en su mayoría problemas conocidos . La programación genérica, por el contrario, era una que casi todo el mundo (incluso entonces) se dio cuenta de que era al menos teóricamente un enfoque mucho mejor para el problema, pero que muchos desarrolladores con orientación comercial consideraron poco explorado y / o riesgoso (es decir, en el mundo comercial). Ada fue despedida en gran medida como un fracaso).
Sin embargo, déjenme ser claro: la jerarquía monolítica fue un error. Las razones de ese error eran al menos comprensibles, pero de todos modos fue un error. Es un mal diseño, y sus problemas de diseño impregnan casi todo el código que lo usa.
Para un nuevo diseño hoy, sin embargo, no hay una pregunta razonable: usar una jerarquía monolítica es un claro error y una mala idea.
objecten el marco .NET en parte porque proporciona algunas capacidades básicas en todos los objetos, comoToString()yGetHashCode()