Riutilizzo del codice tramite ereditarietà [duplicato]

1

Ho una serie di classi che si occupano di alcune attività correlate. Queste attività hanno input e output diversi. Questo fa sì che diventi impossibile avere le attività eseguite tramite codice condiviso senza che questo codice sia una pila di istruzioni if-else che gestiscono tutti i diversi casi.

Ora qualcuno ha refactorizzato questo codice per usare l'ereditarietà - ora c'è una classe base astratta che contiene metodi per ciascuno dei quali è usata da alcune delle classi derivate, per alcune delle quali vengono sovrascritte o annullate e alcune delle quali sono sempre chiamato anche se non sempre applicabile per la classe derivante. Inoltre, l'ereditarietà non viene utilizzata per il polimorfismo, ma solo per il riutilizzo del codice.

Mi sono accasciato un po 'quando ho notato che questo refactoring è stato fatto e che è passato felicemente attraverso la revisione del codice. Il codice base con cui sto lavorando esiste da un po 'ed è pieno di questo genere di cose, e la maggior parte delle persone non capisce i problemi. Sto quindi cercando una buona panoramica sul perché l'ereditarietà non dovrebbe essere sfruttata in questo modo, specialmente con tutti i problemi che provoca.

    
posta Jeroen De Dauw 21.02.2013 - 15:31
fonte

1 risposta

3

La parola chiave (o frase) da cercare qui è composizione sull'eredità . È una linea guida di design popolare e puoi trovare un'introduzione generale a wikipedia .

Inoltre, c'è una domanda della community qui che ti fornisce un numero enorme di argomenti su quando preferire il CoI. Come indicato da diverse (e molto apprezzate) risposte, la linea guida di base per decidere tra composizione ed eredità è il principio di sostituzione di Liskov , che dovrebbe essere rispettato quando si utilizza l'ereditarietà.

    
risposta data 21.02.2013 - 15:37
fonte

Leggi altre domande sui tag