La herencia es un concepto fundamental en la programación orientada a objetos (OOP) que permite a una clase (subclase o clase derivada) heredar atributos y métodos de otra clase (superclase o clase base). En Ruby, la herencia se utiliza para crear una jerarquía de clases que comparten comportamientos comunes, lo que facilita la reutilización del código y la organización lógica del mismo.
Conceptos Clave
-
Superclase y Subclase:
- Superclase: La clase de la cual se heredan atributos y métodos.
- Subclase: La clase que hereda atributos y métodos de la superclase.
-
Palabra clave
super
:- Utilizada dentro de un método en la subclase para llamar al método correspondiente en la superclase.
-
Sobrescritura de Métodos:
- La subclase puede redefinir métodos de la superclase para proporcionar una implementación específica.
Ejemplo Práctico
Definiendo una Superclase
Definiendo una Subclase
Uso de la Herencia
# Creando una instancia de la superclase animal = Animal.new("Generic Animal") puts animal.speak # Output: Hello, I am an animal. # Creando una instancia de la subclase dog = Dog.new("Buddy") puts dog.speak # Output: Woof! My name is Buddy.
Explicación del Código
-
Superclase
Animal
:- Tiene un método
initialize
que establece el nombre del animal. - Tiene un método
speak
que devuelve una cadena de texto.
- Tiene un método
-
Subclase
Dog
:- Hereda de
Animal
usando<
. - Redefine el método
speak
para proporcionar una implementación específica para los perros.
- Hereda de
Uso de super
La palabra clave super
se utiliza para llamar al método de la superclase desde la subclase. Esto es útil cuando deseas extender la funcionalidad de un método heredado sin reemplazarlo por completo.
class Dog < Animal def initialize(name, breed) super(name) # Llama al método initialize de la superclase @breed = breed end def speak super + " I am a #{@breed}." end end dog = Dog.new("Buddy", "Golden Retriever") puts dog.speak # Output: Hello, I am an animal. I am a Golden Retriever.
Ejercicio Práctico
Ejercicio 1: Crear una Jerarquía de Clases
-
Define una superclase
Vehicle
con los siguientes atributos y métodos:- Atributo
make
(marca del vehículo). - Método
initialize
que establece el atributomake
. - Método
description
que devuelve una cadena de texto con la marca del vehículo.
- Atributo
-
Define una subclase
Car
que herede deVehicle
y añada los siguientes atributos y métodos:- Atributo
model
(modelo del coche). - Método
initialize
que establece los atributosmake
ymodel
. - Método
description
que sobrescriba el método de la superclase para incluir el modelo del coche.
- Atributo
Solución
class Vehicle def initialize(make) @make = make end def description "This is a vehicle made by #{@make}." end end class Car < Vehicle def initialize(make, model) super(make) @model = model end def description super + " The model is #{@model}." end end # Prueba de la jerarquía de clases vehicle = Vehicle.new("Toyota") puts vehicle.description # Output: This is a vehicle made by Toyota. car = Car.new("Toyota", "Corolla") puts car.description # Output: This is a vehicle made by Toyota. The model is Corolla.
Resumen
En esta sección, hemos aprendido sobre la herencia en Ruby, un concepto clave en la programación orientada a objetos. Hemos visto cómo una subclase puede heredar atributos y métodos de una superclase, cómo sobrescribir métodos y cómo utilizar la palabra clave super
para extender la funcionalidad de los métodos heredados. La herencia nos permite crear jerarquías de clases que facilitan la reutilización y organización del código.
En la próxima sección, exploraremos los módulos y mixins, que proporcionan otra forma de compartir comportamientos entre clases en Ruby.
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