¿Existe algún principio de diseño para implementar una relación de composición entre clases?

Hay un principio de diseño que dice: “Favorecer la composición de objetos sobre la herencia de clase” . Necesita implementarlo por su cuenta.

Existe un debate de muchos años sobre cuál debería usarse. A veces, la herencia parece ser mejor, mientras que a veces la composición. Se ha convertido en un tema religioso para los desarrolladores de software. La composición es más favorecida porque la herencia tiene algunos problemas como: –

El código se duplica en las subclases.
Los cambios de comportamiento en tiempo de ejecución son difíciles.
Difícil de conocer el comportamiento de todas las subclases.
Los cambios pueden afectar involuntariamente a otras clases también.

¿Cuál debo usar?
En mi humilde opinión, si se sigue el principio de sustitución de Liskov, entonces herencia, si se utilizan comportamientos, composición.