Appunti tratti dalla rilettura di Effective C++ di Scott Meyers. Sesto blocco: Ereditarietà e progettazione Object-Oriented.
(35) La derivazione pubblica deve modellare un "is-a".
(36) Ereditare l'inerfaccia é diverso da ereditare l'implementazione.
(37) Le funzioni non virtuale ereditate non vanno ridefinite.
(38) Il valore di default di un parametro non deve essere ridefinito.
(39) Il downcasting non é una buona cosa. In caso non se ne possa proprio fare a meno, conviene almeno farlo in modo sicuro, usando dynamic_cast<>
(40) La relazione "has-a" o "é implementato in termini di" va modellata via composizione (layering, inclusione, ...).
(41) Ereditarietà vs. template. L'ereditarietà modella una gerarchia di classi, ognuna delle quali rappresenta un diverso comportamento, i template modellano una famiglia di classi che si distinguono per il tipo sottostante.
(42) L'ereditarietà privata va utilizzata con cautela. Quando possibile é meglio usare la composizione (layering).
(43) L'ereditarietà multipla (MI: Multiple Inheritance) va utilizzata con cautela.
(44) Occorre fare attenzione al fatto che quello che si dice corrisponda a quello che si vuole dire. Una classe comune vuol dire che le derivate hanno quei tratti in comune; l'ereditarietà pubblica indica una relazione "is-a"; l'ereditarietà privata indica una "implementazione in termini di"; composizione é per "has-a" o "implementazione in termini di".
Nessun commento:
Posta un commento