Ho del 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
eccetera.
Hai i tuoi metodi eat (), run (), ecc. E tutto va bene. Poi un giorno qualcuno arriva e dice: la nostra classe CageBuilder funziona alla grande e usa animal.weight () e animal.height (), ad eccezione del nuovo bisonte africano che è troppo forte e può mandare in frantumi il muro, quindi aggiungerò un'altra proprietà per la classe Animal - isAfricanBizon () e usala quando scegli il materiale e lo ignori solo per la classe AfricanBizon. La persona successiva arriva e fa qualcosa di simile e la prossima cosa che sai di avere tutte queste proprietà specifiche per alcuni sottogruppi della gerarchia nella classe base.
Qual è un buon modo per migliorare / refactoring tale codice? Un'alternativa qui sarebbe usare solo dynamic_casts per verificare i tipi, ma ciò ingombra i chiamanti e aggiunge un sacco di if-then-else in tutto il luogo. Puoi avere interfacce più specifiche qui, ma se tutto ciò che hai è il riferimento della classe base che non aiuta molto. Altri suggerimenti? Esempi?
Grazie!