Brian Candler escreveu: > David B. wrote: > >> I would like to implemente the "Aggregation" - as in >> http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) - >> and the "Composition" - as >> > > Wikipedia says that Composition is where a structure directly includes > its members, whereas Aggregation is where a structure only contains > references to those members. > > This distinction doesn't apply in Ruby; everything is a reference, so > Aggregation is your only option. > > class Professor; end > > class Department > attr_accessor :members > def initialize > @members = [] > end > end > > class University > attr_accessor :faculty > def initialize > @faculty = [] > end > end > > u = University.new > d = Department.new > u.faculty << d > p = Professor.new > d.members << p > > Neither the arrays nor their elements are 'directly contained'; rather, > references to those objects are stored. For example: > > @faculty > University ------------> Array ---------> Department(1) > '---------> Department(2) > > If you no longer hold a reference to the University anywhere, then it > will eventually be garbage collected. If this means that nothing else > holds a reference to that particular Array, then that will be > garbage-collected too. Ditto for the Departments, if there were no other > references to them apart from those in the Array. > > Arrays are untyped collections. Ruby won't enforce that > University#faculty may only contain Department objects, nor that each > Department may only be referenced from a single University (as the UML > shows). > It's right. And , dont worry , but probaply you can not implements some "design patterns" too. Am i right Brian? - tiago nogueira