Programación Orientada a Objetos (POO) en Ruby

La Programación Orientada a Objetos (POO) es un paradigma de programación que organiza el código en torno a objetos. Un objeto representa una entidad del mundo real o del sistema que se está modelando.

Clases: Link to heading

  • Las clases son plantillas que definen los atributos (variables de instancia) y el comportamiento (métodos) de los objetos.
  • Se declara utilizando la palabra clave class.

Ejemplo: Link to heading

Forma larga Link to heading

class Persona
    # Constructor
    def initialize(nombre, edad)
        @nombre = nombre
        @edad = edad
    end

    # Getters
    def nombre
        @nombre
    end

    def edad
        @edad
    end

    # Setters
    def nombre=(nombre)
        @nombre = nombre
        self
    end

    def edad=(edad)
        @edad = edad
        self
    end

    # ... otros metodos de comportamiento
end

Forma corta Link to heading

class Persona
    # Metodos de clase
    def self.nombres_sugeridos
        ["juan", "ana", "maria"]
    end

    # Constructor
    def initialize(nombre, edad)
        @nombre = nombre
        @edad = edad
    end

    # Metodos de instancia (Getters y Setters)
    attr_accessor :nombre, :edad

    # ... otros metodos de comportamiento
end

Forma aun mas corta Link to heading

class Person < Struct.new(:nombre, :edad)
    # Struct declara el constructor, getters y setters

    # ... otros metodos de comportamiento
end

Cada enfoque tiene sus ventajas y desventajas. La forma larga ofrece mayor control, mientras que las formas abreviadas son más concisas. La elección depende de las necesidades específicas de la clase.

Objetos: Link to heading

  • Las instancias de una clase son los objetos.
  • Se crean utilizando el método new de la clase.
  • Cada objeto tiene sus propios valores para los atributos definidos en la clase.

Ejemplo: Link to heading

persona = Persona.new("Juan", 25)

puts persona.nombre # "Juan"
puts persona.edad # 25

Métodos: Link to heading

  • Los métodos son funciones definidas dentro de una clase que operan sobre los objetos de esa clase.
  • Pueden acceder y modificar los atributos del objeto.
  • Se pueden definir métodos de clase y métodos de instancia.

Ejemplo: Link to heading

class Persona

# ...

    def saludo
        puts "Hola, mi nombre es #{@nombre}"
    end
end

persona.saludo #  "hola, mi nombre es Juan"

Herencia: Link to heading

  • Una clase puede heredar atributos y comportamiento de otra clase (clase padre).
  • La clase hija (subclase) puede agregar su propia funcionalidad o modificar la heredada.

Abstracción: Link to heading

  • La POO permite ocultar los detalles de implementación de un objeto y exponer solo su interfaz (métodos públicos).

La POO proporciona una forma de organizar el código de manera modular, reutilizable y mantenible. Al modelar el mundo real con objetos, los programas se vuelven más fáciles de entender, modificar y ampliar.

Consejos adicionales: Link to heading

  • Puedes usar módulos para agrupar funcionalidad compartida entre clases.
  • Puedes usar el patrón de diseño MVC para separar la lógica del negocio, la presentación y el control.
  • Puedes usar la inyección de dependencias para mejorar la testabilidad y mantenibilidad del código.

¡Sigue experimentando con POO para crear aplicaciones complejas y bien diseñadas!

<< Procs y Lambdas en Ruby Módulos en Ruby >>