Enumerazioni 1 sono spesso associate al codice procedurale piuttosto che al codice orientato agli oggetti. Tendono a dare origine a dichiarazioni switch simili disseminate nel codice e, in generale, queste sono sostituite dal polimorfismo nel codice orientato agli oggetti.
Ad esempio, vedi Sostituisci codice tipo con classe , Sostituisci codice tipo con sottoclassi e Sostituisci codice tipo con stato / strategia in < em> Refactoring di Martin Fowler. Strettamente correlato, vedi Sostituisci condizionale con polimorfismo nello stesso volume; Bob Martin ha anche un bel po 'da dire sugli svantaggi delle istruzioni switch in Clean Code (ad esempio, euristico G23 Preferisci polimorfismo a If / Else o Switch / Case ).
Tuttavia, poiché l'orientamento all'oggetto, come ogni altro buon paradigma, può essere uno strumento potente ma non un proiettile d'argento, ci sono momenti in cui l'uso di un'enumerazione è una buona decisione?
1 Uso ampiamente questo termine; non solo per qualcosa che è strettamente un enum
in un linguaggio basato su C, ma per qualsiasi insieme di entità che sono usate per rappresentarlo (una classe con un insieme di membri statici, ecc ...).