Dichiarare le funzioni come definitive ... tranne quando sono io a fare il derivante

5

Ho una classe in cui voglio impedire ad altri programmatori di sovrascrivere uno dei suoi metodi, poiché richiede una conoscenza speciale del funzionamento interno della classe. Dal momento che conosco personalmente come funziona la classe, mi piacerebbe essere in grado di fare un'eccezione e in effetti DO sostituire la funzione in una classe derivata. Si tratta di un problema comune a cui esiste una soluzione standard o il fatto che io abbia l'impressione di dover fare un'eccezione come questa significa che dovrei ripensare al mio approccio?

Modifica: non ho menzionato le lingue, dal momento che stavo cercando una risposta generale, ma dal momento che è stata richiesta, ciò è avvenuto usando PHP.

    
posta DudeOnRock 07.02.2013 - 19:37
fonte

1 risposta

18

Dovresti ripensare al tuo approccio. Mettiti nei panni del futuro manutentore della tua classe, sia tu il futuro (chi ha dimenticato alcune cose) o qualcun altro.

Vuoi il minor numero possibile di commenti "speciali" o di comportamenti magici nel codice. Ciò è particolarmente vero per l'ereditarietà speciale, in cui i codici delle classi di base fanno presupposizioni non documentate sulle classi derivate. E nel tuo caso, la frase "richiede una conoscenza speciale del funzionamento interno della classe" significa che la conoscenza della classe base è codificata nella classe derivata, e la classe derivata fa molte assunzioni sulla classe base. Se hai il desiderio di rendere la classe base definitiva-ma-non-per-me, sembra che tu abbia la sensazione che non tutte le assunzioni siano prontamente comprese. Questo è un incubo per un manutentore.

Se hai bisogno di derivare, fallo e ottieni apertamente, con tutti i costi associati. Se non vale il costo, non derivarne. Le soluzioni intermedie sostengono tutti i costi di manutenzione, ma nessuno dei guadagni.

    
risposta data 07.02.2013 - 19:41
fonte

Leggi altre domande sui tag