Hi Jeff,
#1: A system of objects that are not related
Aggregation implies containment, so I'd say that this is incorrect.
FYI, ownership of constituents is normally called composition. In terms of
disposal logic, this means that the Dispose method of a compositing object
will call Dispose on its components, whereas an aggregator wouldn't.
#2: A system of objects that are built using each other
True, but incomplete. This definition doesn't imply containment. "Using"
an object isn't exactly the same as containing it.
#3: A system of objects that define each other
The identity of the constituents are certainly not defined by the
aggregator, although one could argue that the aggregator is partially
defined by its constituents. I'd say this answer is wrong.
#4: A system of objects inherited from each other
Wrong. That is subtyping. Although, it's possible to have recursive
composition whereby a class composites itself or one of its subtypes, but
that certainly isn't the best definition for aggregation.
#5: A system of objects that implement each other
An aggregator doesn't implement its components and its components don't
normally implement the aggregator, except in recursive composition like I've
mentioned above. I'd say this answer is wrong.
So it seems #2 is the best choice; however, I'd say that it's not the best
definition of aggregation.