El método load incluye el archivo fuente de Ruby especificado cada
vez que es ejecutado.
El método require, que es usado con más frecuencia, carga el archivo
especificado sólo una vez.
Observa que escribimos require 'nombre_del_archivo', y no
require 'nombre_del_archivo.rb'.
En Ruby, las clases nunca son cerradas: siempre es posible agregar métodos a una
clase que ya existe. Lo anterior es cierto para las clases que tu mismo secribes
y para las clases estándar incluídas en Ruby. Todo lo que tienes que hacer es abrir
la definición de la clase existente, y el contenido que especifiques va a ser agregado
a lo que ya exista en la definición de la clase.
El beneficio de la herencia es que las clases más abajo en la jerarquía heredan
de sus ancestros y pueden agregar características propias.
En Ruby, las clases sólo puede heredar de una sola clase.
La clase Object es la clase madre de todas las clases en Ruby. Por
lo tanto, sus métodos están disponibles en todos los objetos a menos que sean
redefinidos explícitamente.
Method overriding permite a una subclase proporcionar una implementación
específica de un método que ya existe en uno de sus ancestros. La implementación
de la subclase reemplaza la implementación de la clase madre.
Nada nos detiene de definir un método dos veces, sin embargo, la nueva versión
tiene precedencia.
Cuando llamas al método super sin argumentos, Ruby envía un mensaje
a la clase madre del objecto actual, pidiendo que invoque un método del mismo nombre
que el método desde el cual se invoca super. Los argumentos que fueron
pasados al método delde el cual se invoca super son automáticamente
reenviados.
Si se llama con una lista de argumentos vacía, (super()), no reenvía
argumentos al método que se encuentra más arriba en la jerarquía de clases.
Si se llama con une lista de argumentos específica (super(a,b,c)),
envía exactamente esos argumentos.