19 - Módulos


Tutorial creado por matz . Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-guia-usuario-ruby/doc-guia-usuario-ruby-html/
27 Febrero 2006
< anterior | 1 .. 17 18 19 20 21 .. 33 | siguiente >
Los módulos en Ruby son similares a las clases, excepto en:

~- Un módulo no puede tener instancias
~- Un módulo no puede tener subclases
~- Un módulo se define con module ... end

Ciertamente ... la clase Module de un módulo es la superclase de la clase Class de una clase. ¿Se pilla esto? ¿No? Sigamos.

Existen dos usos típicos de los módulos. Uno es agrupar métodos y constantes relacionadas en un repositorio central. El módulo Math de Ruby hace esta función:

|| ruby> Math.sqrt(2)
1.414213562
ruby> Math::PI
3.141592654
||

El operador :: indica al intérprete de Ruby qué módulo debe consultar para obtener el valor de la constante (es concebible, que algún otro módulo a parte de Math interprete PI de otra forma). Si queremos referenciar a los métodos o constantes de un módulo, directamente, sin utilizar ::, podemos //incluir// ese módulo con include:

|| ruby> include Math
Object
ruby> sqrt(2)
1.414213562
ruby> PI
3.141592654
||

El otro uso de los módulos se denomina //mixin//. Algunos lenguajes OO, incluidos el C++, permiten //herencia múltiple//, es decir, una clase puede heredar de más de una superclase. Un ejemplo de herencia múltiple en el mundo real es un despertador, se podría pensar que un despertador es una clase de //reloj// y que también pertenece a la clase de objetos que podríamos llamar //zumbadores//.

Ruby, con toda la intención del mundo, no implementa herencia múltiple real, aunque la técnica de los //mixins// es una buena alternativa. Recuérdese que los módulos no se pueden instanciar ni se pueden crear subclases de ellos; pero si se incluye un módulo en la definición de una clase sus métodos quedan añadidos a ella, es decir se asocian (//mixin//http://es.tldp.org/Manuales-LuCAS/doc-guia-usuario-ruby/doc-guia-usuario-ruby-html/c743.html#FTN.AEN774 [1]) a la clase.

Se puede pensar que los mixins son una forma de pedir qué propiedades concretas se desean. Por ejemplo, si una clase tiene un método each funcional, asociarla con el módulo Enumerable de la biblioteca estándar nos proporciona gratuitamente los métodos sort y find.

Esta utilización de los módulos proporciona la funcionalidad básica de la herencia múltiple permitiéndonos representar las relaciones de la clase en una simple estructura en árbol que simplifica considerablemente la implementación del lenguaje (Los diseñadores de Java hicieron una elección parecida).

====
- ====

|| http://es.tldp.org/Manuales-LuCAS/doc-guia-usuario-ruby/doc-guia-usuario-ruby-html/c743.html#AEN774 [1] || asociar ||
< anterior | 1 .. 17 18 19 20 21 .. 33 | siguiente >

Autor y licencia de 'Guía del usuario de Ruby'

Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.