El lenguaje de programación Ruby tiene un par de maneras de combinar los métodos de dos clases. Las clases son colecciones de métodos relacionados y miembros de datos. Dos clases pueden combinar sus métodos que utilizan las sentencias de inclusión o ampliar. Ambas declaraciones son especializados para un propósito diferente y lograr cosas diferentes.
Métodos de clase
Extender añade especificados métodos módulos como métodos de la clase a la clase de destino. Los métodos de clase están disponibles para todas las instancias de la clase de destino. Eso significa que todos los objetos creados en base a la clase de destino tienen acceso a los métodos de cualquier clase que se extiende. Por lo tanto, extender es una forma más universal para incluir métodos en una clase, ya que afecta a todas las instancias de esa clase.
Métodos de instancia
Incluir añade especificados métodos módulos como los métodos de instancia a la clase de destino. Los métodos de instancia sólo están disponibles para la instancia específica de la clase de destino. Cualquier otra clase del mismo tipo no tiene acceso a los métodos de la clase incluidos, a menos que también tiene el método invocado incluir en él.
Acceso variable
Una clase de destino tiene acceso a las variables de cualquier otra clase que se ha incluido. Extender no facilita este acceso.
Pública o privada
Incluir es un método privado, y extender es un método público. Esto significa que se debe invocar incluye dentro de un cuerpo de la clase.