Se un oggetto esiste fisicamente o no, possiamo scegliere di modellarlo in diversi modi. In molti casi potremmo usare arbitrariamente la generalizzazione o la composizione. Tuttavia, il principio GoF di "favorire la composizione rispetto alla generalizzazione [sic]" ci guida all'utilizzo della composizione. Quindi, quando modelliamo, ad esempio, una linea, creiamo una classe che contiene due membri PointA e PointB del tipo Point (composizione) anziché estendere Point (generalizzazione). Questo è solo un esempio semplificato di come possiamo arbitrariamente scegliere la composizione o l'eredità da modellare, nonostante gli oggetti siano generalmente molto più complessi.
Come facciamo a sapere che questa è la scelta giusta? Importa almeno perché potrebbe esserci un sacco di refactoring da fare se è sbagliato?