En Ruby, los módulos son una forma de agrupar métodos, clases y constantes. Los módulos no pueden ser instanciados, pero pueden ser incluidos en clases para compartir funcionalidad. Los mixins son una técnica que utiliza módulos para compartir código entre clases.
¿Qué es un Módulo?
Un módulo es una colección de métodos y constantes. A diferencia de las clases, los módulos no pueden ser instanciados ni heredados. Se utilizan principalmente para agrupar métodos relacionados y compartir funcionalidad entre clases.
Definición de un Módulo
module MiModulo CONSTANTE = 100 def self.metodo_de_clase puts "Este es un método de clase en un módulo" end def metodo_de_instancia puts "Este es un método de instancia en un módulo" end end
En este ejemplo, MiModulo
contiene una constante CONSTANTE
, un método de clase metodo_de_clase
y un método de instancia metodo_de_instancia
.
Uso de Módulos
Para acceder a los métodos de clase y constantes de un módulo, utilizamos la sintaxis de punto (.
).
Mixins
Los mixins son una forma de incluir métodos de un módulo en una clase. Esto se hace utilizando las palabras clave include
o extend
.
include
vs extend
include
: Incluye los métodos de instancia del módulo en la clase.extend
: Incluye los métodos de clase del módulo en la clase.
Ejemplo de include
module Habilidades def correr puts "Estoy corriendo" end def saltar puts "Estoy saltando" end end class Persona include Habilidades end persona = Persona.new persona.correr # Salida: Estoy corriendo persona.saltar # Salida: Estoy saltando
Ejemplo de extend
module HabilidadesDeClase def habilidades_de_clase puts "Método de clase en el módulo" end end class Persona extend HabilidadesDeClase end Persona.habilidades_de_clase # Salida: Método de clase en el módulo
Ejercicio Práctico
Ejercicio 1: Crear un Módulo y Usarlo en una Clase
- Define un módulo llamado
Saludable
que tenga dos métodos:comer
ydormir
. - Crea una clase llamada
Animal
que incluya el móduloSaludable
. - Instancia un objeto de la clase
Animal
y llama a los métodoscomer
ydormir
.
Solución
module Saludable def comer puts "Estoy comiendo" end def dormir puts "Estoy durmiendo" end end class Animal include Saludable end animal = Animal.new animal.comer # Salida: Estoy comiendo animal.dormir # Salida: Estoy durmiendo
Ejercicio 2: Usar extend
para Métodos de Clase
- Define un módulo llamado
Utilidades
que tenga un método de claseinformacion
. - Crea una clase llamada
Vehiculo
que extienda el móduloUtilidades
. - Llama al método
informacion
desde la claseVehiculo
.
Solución
module Utilidades def informacion puts "Este es un método de clase en el módulo" end end class Vehiculo extend Utilidades end Vehiculo.informacion # Salida: Este es un método de clase en el módulo
Resumen
En esta sección, hemos aprendido sobre los módulos y mixins en Ruby. Los módulos son una forma de agrupar métodos y constantes, y no pueden ser instanciados. Los mixins permiten compartir funcionalidad entre clases utilizando include
para métodos de instancia y extend
para métodos de clase. Estos conceptos son fundamentales para escribir código Ruby modular y reutilizable.
En el próximo tema, exploraremos conceptos avanzados de Ruby, como bloques, procs y lambdas.
Curso de Programación en Ruby
Módulo 1: Introducción a Ruby
Módulo 2: Conceptos Básicos de Ruby
Módulo 3: Trabajando con Colecciones
Módulo 4: Programación Orientada a Objetos en Ruby
- Clases y Objetos
- Variables y Métodos de Instancia
- Variables y Métodos de Clase
- Herencia
- Módulos y Mixins
Módulo 5: Conceptos Avanzados de Ruby
- Bloques, Procs y Lambdas
- Metaprogramación
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Expresiones Regulares
Módulo 6: Introducción a Ruby on Rails
- ¿Qué es Ruby on Rails?
- Configuración del Entorno Rails
- Creando una Aplicación Simple en Rails
- Arquitectura MVC
- Enrutamiento
Módulo 7: Pruebas en Ruby
- Introducción a las Pruebas
- Pruebas Unitarias con Minitest
- Desarrollo Guiado por Comportamiento con RSpec
- Mocking y Stubbing
Módulo 8: Mejores Prácticas en Ruby
- Estilo de Código y Convenciones
- Refactorización
- Optimización del Rendimiento
- Mejores Prácticas de Seguridad