Composizione invece di ereditarietà è un principio di design ampiamente citato — favorisce la costruzione di oggetti combinando comportamenti (composizione) piuttosto che ereditando da classi base (ereditarietà). L'ereditarietà ha significativi svantaggi che la composizione evita, anche se entrambe hanno il loro posto.
Ereditarietà vs composizione
INHERITANCE → a class EXTENDS another, inheriting its behavior ("IS-A" relationship):
class Dog extends Animal
COMPOSITION → a class is BUILT FROM other objects/behaviors ("HAS-A" / uses):
class Car { constructor() { this.engine = new Engine(); } } // composes behaviors
→ composition: combine smaller pieces; inheritance: derive from a parent
