Gastón Ramos

Blog personal

← Volver al blog

Modulos

Recuperado del archivo original de WordPress.

Bueno en este post voy a mostrar un ejemplo sencillo con módulos de ruby, muy básicamente un módulo es una colección de métodos y constanstes, los métodos en un módulo pueden ser métodos de instancia o métodos de módulo. Los métodos de instancia aparecen como métodos en una clase cuando el módulo es incluido, los métodos de módulo no. Al contrario los métodos de módulo pueden ser llamados sin crear un objeto encapsulado, mientras que los métodos de instanacia no. (ref: http://www.ruby-doc.org/core/classes/Module.html)

Veamos un ejemplo dónde tenemos algunos métodos de instancia:

module Saludo
  attr_accessor :saludo

def agregar_nombre @saludo << " Pepe" end end

class SaludoNuevo include Saludo

def saludo= value @saludo = value end end

s = SaludoNuevo.new s.saludo = 'Hola' puts s.saludo s.agregar_nombre puts s.saludo

La salida de este programa es la siguiente:

=> Hola
=> Hola Pepe

Cómo podemos ver los métodos declarados dentro del Módulo Saludo aparecen cómo métodos de instancia de la clase SaludoNuevo, dado que Saludable "Mixed in" en SaludadorNuevo. Los Mixins son la manera en que ruby resuelve la Herencia Múltiple (Ya veremos algunos ejemplos más adelante).

Ahora agregamos un método de Módulo:

module Saludo
  attr_accessor :saludo

def agregar_nombre @saludo << " Pepe" end

def Saludo::general "Hola a todos" end end

class SaludoNuevo include Saludo

def saludo= value @saludo = value end end

puts Saludo::general

s = SaludoNuevo.new s.saludo = 'Hola' puts s.saludo s.agregar_nombre puts s.saludo

Y la salida es:

=> Hola a todos
=> Hola
=> Hola Pepe

Ahora vamos a agregar una variable de instancia en el módulo Y la vamos a usar y modificar desde la clase cliente:

module Saludo
  attr_accessor :saludo, :nombres

def initialize @nombres = ["Pepe", "Gaston", "David"] end

def agregar_nombre @saludo << " Pepe" end

def Saludo::general "Hola a todos" end

end

class SaludoNuevo include Saludo

def saludo= value @saludo = value end

def saludo_general_con_nombres "Hola " + @nombres.join(', ') end

end

s = SaludoNuevo.new puts s.saludo_general_con_nombres

# Modifico la variable de instancia @nombres Heredada del módulo "Saludo" s.nombres << "Dave" puts s.saludo_general_con_nombres

# Creo un nuevo objeto de Saludo Nuevo y modifico @nombres para # ver que es una variable de instancia s2 = SaludoNuevo.new s2.nombres = ["Matz", "Kent", "Bruce"] puts s2.saludo_general_con_nombres

puts s.saludo_general_con_nombres

la salida es:

=> Hola Pepe, Gaston, David
=> Hola Pepe, Gaston, David, Dave
=> Hola Matz, Kent, Bruce
=> Hola Pepe, Gaston, David, Dave

Bueno esto fue todo por ahora, cortito y sencilllo.

También puede interesarte

Comentarios del archivo (1)

Modulos parte II &laquo; Gastón Ramos - Ruby, Rails&#8230; · 12 de diciembre de 2007

[...] tiene la habilidad de llamar métodos de instancia definidos en el módulo (esto lo vimos en los ejemplos anteriores). Se podría decir que cuando hacemos un Mixin, por ejmeplo dentro de la clase A hacemos un include [...]

Los comentarios históricos se conservan como archivo. Para conversar hoy, podés escribirme.