On Jan 5, 2006, at 12:12 PM, Adam Sanderson wrote:

> When do you guys choose to inherit from a class, use a delegate, or
> forwarding?

As the saying goes, "Favor composition over inheritance."  The theory  
there is simply that inheritance is a tighter coupling than  
composition, so the latter handles change better.  Delegation is a  
form of composition.

Any Design Patterns book will have a detailed treatment of this very  
topic.

> What are some examples of common uses for Delegates or Forwardable?

Well, I wrote the documentation for both, and I must confess that I  
still rarely use Delegate.  It can think of one example where I  
wanted full delegation and I wanted it for two classes, so I had to  
roll my own anyway.  The best example I can think of for it is  
TempFile[1], in the standard library.

I use forwardable all the time, on the other hand.  I love that  
library.  It allows me to control what gets delegated and rename  
delegated methods.  Good stuff.  Two examples from my work would be  
my solution-in-progress to the Ruby Test First Challenge[2] and my  
FasterCSV library[3].

Hope that helps.

1:  http://stonecode.org:3000/articles/show_all
2:  http://groups.google.com/group/Ruby-Test-First-Challenge/msg/ 
1df37a6f0b781a88
3:  http://rubyforge.org/plugins/scmsvn/viewcvs.php/trunk/lib/ 
faster_csv.rb?root=fastercsv&view=markup

James Edward Gray II