Um módulo é um conjunto de métodos e constantes. Os métodos em um módulo podem ser métodos de instância ou métodos do próprio módulo. Módulos também proporcionam um espaço de nomes (namespace) onde pode-se organizar o código e evitar possíveis colisões de nomenclaturas. Os métodos de instância se comportam como métodos em uma classe quando o módulo está incluído na classe, os métodos do módulo não se comportam da mesma forma. Por outro lado, os métodos de módulos podem ser chamados sem criar um objeto de encapsulamento, enquanto os métodos de instância não podem.
Module: http://www.ruby-doc.org/core-2.2.0/Module.html
Linguagens como C++ permitem que uma classe possa herdar mais de uma classe, Ruby não, entretanto existe o conceito chamado Mixing que nos permite utilizar está mesma funcionalidade através dos módulos.
Exemplo:
Neste exemplo criamos um modulo chamado Portas e um modulo chamado Janelas. A especificação de objetos Ruby não permite múltiplas heranças ou seja, não permite que minha classe chamada Casa possa herdar as classes Portas e Janelas ao mesmo tempo, no entanto existe um modo de criar esta mesma funcionalidade incluindo os módulos em minha classe.
Ruby
#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Mixing.rb
# Define modulo
module Portas
def porta(tipo)
puts "Portas: " + tipo
end
end
# Define modulo
module Janelas
def janela(tipo)
puts "Janelas: " + tipo
end
end
# Define classe
class Casa
# Inclui modulos
include Portas
include Janelas
def modelo(tipo, cor)
puts "Casa ----------------->>>> 1\n\n"
puts "Modelo:" + tipo
puts "Cor: " + cor
end
end
# Cria instancia do objeto
minhaCasa = Casa.new
# utiliza objeto
minhaCasa.modelo("Sobrado", "Branco")
minhaCasa.porta("Azul")
minhaCasa.janela("Amarelas")


