Qu'un objet existe ou non physiquement, nous pouvons choisir de le modéliser de différentes manières. Nous pourrions utiliser arbitrairement la généralisation ou la composition dans de nombreux cas. Cependant, le principe du GoF de «privilégier la composition à la généralisation [sic]» nous guide dans l'utilisation de la composition. Ainsi, lorsque nous modélisons, par exemple, une ligne, nous créons une classe qui contient deux membres PointA et PointB de type Point (composition) au lieu d'étendre Point (généralisation). Ceci est juste un exemple simplifié de la façon dont nous pouvons choisir arbitrairement la composition ou l'héritage à modéliser, bien que les objets soient généralement beaucoup plus complexes.
Comment savons-nous que c'est le bon choix? C'est important au moins parce qu'il pourrait y avoir une tonne de refactoring à faire si c'est mal?