Ultimamente ho riflettuto su principi e schemi di progettazione e una domanda mi ha colpito.
Diciamo che voglio progettare un gioco di corse. Voglio progettare le classi per una varietà di macchine.
- ogni auto può avere una caratteristica diversa
- le funzioni più comuni possono essere inserite nella classe base - 'Car'
Ora, ho imparato che dovresti sempre cercare di lavorare con le astrazioni.
Tutto il codice che tenta di manipolare la macchina proverà a chiamare i metodi astratti su Car
come Car.Accelerate()
, Car.TurnLeft()
, ecc ...
Ma per quanto riguarda le caratteristiche specifiche? Come alcune auto potrebbero avere propulsori di razzi o un paracadute e potresti volerli usare (so che sembra ridicolo, ma il mio punto qui è "Potrebbero esserci caratteristiche speciali nelle classi derivate che potrebbero non giustificare il tipo reale (o il tipo di base) di quella specifica classe ')?
Quindi, che dire di loro?
Preferiresti piuttosto aumentare alcuni metodi astratti nella classe base rendendolo meno coeso, o ne inseriresti alcuni se blocchi e digiti cast (per ottenere l'oggetto classe effettivo e usi quel metodo) rendendolo più accoppiato?