>In Java
>this could be acheived by either defining an abstract base class or
>(preferrably) an interface. This specifies the 'contract' that the
>framework expects a valid 'Store' instance to support.
Well, it specifies a very tiny subset of the 'contract' that the framework expects. In reality, there's a much more specific 'general contract' that the Store must support (just read the javadocs for Map, for example). Ruby just goes all the way and makes method signatures part of the 'general contract,' too.

Devin