no 'siempre' favorece la composición o la herencia o viceversa; ellos tienen diferentes semánticas (significados); mira cuidadosamente los significados, luego decide: no importa si uno es "más fácil" que el otro, para la longevidad es importante que obtienes la semántica correcta
recuerda: is-a = tipo, has-a = contención
por lo que en este caso, una cartera lógicamente es una colección de fondos; una cartera en sí es no es un tipo de fondo, por lo que la composición es la relación correcta
EDIT: He leído mal la pregunta originalmente, pero la respuesta sigue siendo la misma. Una Cartera no es un tipo de lista, es una entidad distinta con sus propias propiedades. Por ejemplo, una cartera es un agregado de instrumentos financieros con un costo de inversión inicial, un valor actual total, un historial de valores a lo largo del tiempo, etc., mientras que una Lista es una colección simple de objetos. Una cartera es un "tipo de lista" solo en el sentido más abstracto.
EDIT 2: piense en la definición de cartera: es, sin excepción, caracterizada como una colección de cosas. La cartera de un artista es una colección de sus obras de arte, la cartera de un diseñador web es una colección de sus sitios web, la cartera de un inversor consta de todos los instrumentos financieros que poseen, y así sucesivamente. Entonces, claramente, necesitamos una lista (o algún tipo) para representar una cartera, ¡pero eso de ninguna manera implica que una cartera sea un tipo de lista!
supongamos que decidimos dejar que Portfolio herede de List. Esto funciona hasta que agreguemos Stock, Bond o Metal precioso a la Cartera, y de repente, la herencia incorrecta ya no funciona. O supongamos que se nos pide que modelemos, digamos, la cartera de Bill Gates, y descubramos que la Lista se quedará sin memoria ;-) Más realistamente, después de la refactorización futura probablemente descubriremos que deberíamos heredar de una clase base como Asset, pero si ya hemos heredado de List, entonces no podemos.
Resumen: distingue entre las estructuras de datos que elegimos para representar un concepto y la semántica (tipo de jerarquía) del concepto en sí.
Consulte también [prefer-composition-over-inheritance?] (Http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance?rq=1) – nawfal