Chapter 4. Modules and program organization

 

In this chapter

  • Encapsulation of behavior in modules
  • Modular extension of classes
  • The object method-lookup path
  • Handling method-lookup failure
  • Establishing namespaces with modules and nesting

This chapter will introduce you to a Ruby construct that’s closely related to classes: modules. Like classes, modules are bundles of methods and constants. Unlike classes, modules don’t have instances; instead, you specify that you want the functionality of a particular module to be added to the functionality of a class or of a specific object.

The greatest strength of modules is that they help with program design and flexibility. You’ll see evidence of this both in examples of modules you can write yourself and in the workings of modules that come built into Ruby. As their name suggests, modules encourage modular design: program design that breaks large components into smaller ones and lets you mix and match object behaviors.

It’s no accident that modules are similar in many respects to classes: the class Class is a subclass of the class Module, which means that every class object is ancestrally a module object. We discussed classes first because Ruby is object-centric and objects are instances of classes. But you could say that modules are the more basic structure, and classes are just a specialization. The bottom line is that they’re both part of Ruby, and both are available as you design your programs and model your data.

4.1. Basics of module creation and use

4.2. Modules, classes, and method lookup

4.3. The method_missing method

4.4. Class/module design and naming

4.5. Summary