Ho un codice in cui un buon modello di ereditarietà è andato in discesa e sto cercando di capire perché e come risolverlo. Fondamentalmente, immagina di avere una gerarchia Zoo con:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
ecc.
Hai i tuoi metodi eat (), run (), etc e tutto va bene. Poi un giorno arriva qualcuno e dice: la nostra classe CageBuilder funziona alla grande e usa animal.weight () e animal.height (), eccetto il nuovo Bison africano che è troppo strong e può frantumare il muro, quindi aggiungerò un'altra proprietà alla classe Animal - isAfricanBizon () e usala quando scegli il materiale e la sostituisci solo per la classe AfricanBizon. La prossima persona arriva e fa qualcosa di simile e la prossima cosa che sai è che tutte queste proprietà sono specifiche per alcuni sottoinsiemi della gerarchia nella classe base.
Quale è un buon modo per migliorare / rifattorizzare tale codice? Un'alternativa qui sarebbe utilizzare solo dynamic_casts per verificare i tipi, ma che ingombra i chiamanti e aggiunge un sacco di if-then-else ovunque. Puoi avere interfacce più specifiche qui, ma se tutto quello che hai è il riferimento della classe base che non aiuta molto. Qualche altro suggerimento? Esempi?
Grazie!