You've seen here a few of the more esoteric or advanced techniques in OOP, as well as some of the more everyday usages. We've also looked at Ruby's reflection API, some interesting consequences of Ruby's dynamic nature, and various neat tricks that can be done in a dynamic language.
It's time now to rejoin the real world. After all, OOP is not an end in itself, but a means to an end; the end is to write applications that are effective, bug free, and maintainable.
In modern computing, these applications frequently need a graphical interface. In Chapter 6, "Graphical Interfaces for Ruby," we discuss creating graphical interfaces in Ruby.