Advice from the GOF*: Favor aggregation over inheritance
OO languages typically support inheritance. Intially, our focus was on creating re-use by specializing types through deriving them into new types which took most of the existing behavior as-in, and then replaced one or more functions. While this can be beneficial, the GOF suggests that inheritance is a more powerful tool when used to create categories of implementing objects that can be made inherchangeable. They refer to this as "aggregation" because the object that would prevoisly have been specialized now delegates to this interchangeable object, and thus we have an aggregation of two entites now, instead of the specialization of one.