Quando si leggono varie domande di Stack Overflow e il codice di altri, il consenso generale su come progettare le classi viene chiuso. Ciò significa che per impostazione predefinita in Java e C # tutto è privato, i campi sono finali, alcuni metodi sono definitivi e talvolta le classi sono persino definitive .
L'idea alla base di ciò è quella di nascondere i dettagli dell'implementazione, che è un'ottima ragione. Tuttavia, con l'esistenza della protectedmaggior parte delle lingue e del polimorfismo OOP, questo non funziona.
Ogni volta che desidero aggiungere o modificare funzionalità a una classe, di solito sono ostacolato da posizioni private e finali posizionate ovunque. Qui i dettagli dell'implementazione sono importanti: stai prendendo l'implementazione e la stai estendendo, conoscendo bene quali sono le conseguenze. Tuttavia, poiché non riesco ad accedere ai campi e ai metodi privati e finali, ho tre opzioni:
- Non estendere la classe, solo aggirare il problema che porta al codice più complesso
- Copia e incolla l'intera classe, uccidendo la riusabilità del codice
- Fork il progetto
Quelle non sono buone opzioni. Perché non viene protectedutilizzato nei progetti scritti in lingue che lo supportano? Perché alcuni progetti proibiscono esplicitamente di ereditare dalle loro classi?