Questo disegno riconduce davvero a Smalltalk, che considererei in gran parte come un tentativo di perseguire l'orientamento degli oggetti a scapito di quasi tutte le altre preoccupazioni. In quanto tale, tende (secondo me) a usare l'orientamento all'oggetto, anche quando altre tecniche sono probabilmente (o anche certamente) superiori.
Avere una singola gerarchia con Object
(o qualcosa di simile) alla radice rende abbastanza facile (per un esempio) creare le tue classi di raccolta come raccolte di Object
, quindi è banale che una raccolta contenga qualsiasi tipo di oggetto.
In cambio di questo vantaggio piuttosto secondario, si ottiene comunque una serie di svantaggi. In primo luogo, da un punto di vista del design, si finisce con alcune idee veramente folli. Almeno secondo la visione di Java dell'universo, che cosa hanno in comune l'ateismo e una foresta? Che entrambi hanno codici hash! Una mappa è una collezione? Secondo Java, no, non lo è!
Negli anni '70, quando Smalltalk veniva progettato, questo tipo di assurdità veniva accettato, principalmente perché nessuno aveva progettato un'alternativa ragionevole. Smalltalk è stato finalizzato nel 1980 e, nel 1983, è stata progettata Ada (che include i generici). Sebbene Ada non abbia mai raggiunto il tipo di popolarità che qualcuno aveva predetto, i suoi generici erano sufficienti a supportare raccolte di oggetti di tipi arbitrari - senza la follia insita nelle gerarchie monolitiche.
Quando sono stati progettati Java (e in misura minore, .NET), la gerarchia di classe monolitica è stata probabilmente considerata una scelta "sicura", una con problemi, ma soprattutto con problemi noti . La programmazione generica, al contrario, era quella che quasi tutti (anche allora) realizzarono almeno teoricamente un approccio molto migliore al problema, ma che molti sviluppatori commercialmente orientati consideravano piuttosto scarsamente esplorato e / o rischioso (cioè, nel mondo commerciale, Ada è stato in gran parte respinto come un fallimento).
Però, lasciami essere chiaro: la gerarchia monolitica era un errore. Le ragioni di tale errore erano almeno comprensibili, ma era comunque un errore. È un cattivo design e i suoi problemi di progettazione pervadono quasi tutto il codice che lo utilizza.
Per un nuovo design oggi, tuttavia, non c'è una domanda ragionevole: usare una gerarchia monolitica è un chiaro errore e una cattiva idea.