Ruby fué desarrollado teniendo en cuenta el principio de ortogonalidad :
Cada dato es un objeto
Cada Objeto es una instancia de una clase
Cada clase es un objeto a su vez
Cada clase tiene su metaclase.
Ejemplo 3
#! /usr/local/bin/ruby -w # Definicion basica de una clase class Vaca def muje # método que hace mujir a las vacas print "Muuuu : Dos patas no!! \nCuatro patas si !!\n" end end VacaPinta = Vaca.new # Creamos una vaca pinta VacaPinta.muje #Antes de cantar "Bestias de Inglaterra" |
Ejemplo 4
#! /usr/local/bin/ruby -w # Creamos un segundo metodo para simplificar class Vaca # 'mujido' es un metodo, no una variable def mujido "moooo" end def muje print "Esta vaca muje asi... #{mujido}!\n" end end VacaSuiza = Vaca.new VacaSuiza.muje |
Ejemplo 5
#! /usr/local/bin/ruby -w # Herencia de métodos de una superclase class Animal_de_Cuatro_patas def chilla print "Un #{self.class} chilla... #{chillido}!\n" end end class Cerdo < Animal_de_Cuatro_patas def chillido "Las Bestias de Inglaterra" end end Napoleon = Cerdo.new Napoleon.chilla SnowBall = Cerdo.new SnowBall.chilla |
Ejemplo 6
#!/usr/local/bin/ruby class Animal_de_Cuatro_Patas def initialize(nombre, color) if nombre == "" @nombre = "un #{self.class} sin_nombre" else @nombre = nombre end if color == "" @color = default_color # Igual que self.default_color else @color = color end end def habla print @nombre, " dice : ...", sonido, "\n" end def come(alimento) @alimento = alimento print @nombre, " come ", alimento, "\n" end def default_color; " azabache "; end def muestra_color print self.class, ": ", @nombre, " tiene color #{@color}!\n" end end class Caballo < Animal_de_Cuatro_Patas def sonido; "Hoy Trabajaré más duro...."; end end class Oveja < Animal_de_Cuatro_Patas def sonido; "Dos patas Si, Cuatro Patas No"; end def default_color; "blanco"; end end unaOveja = Oveja.new( "Oveja_Rasurada", "negro") unaOveja.muestra_color unaOveja.habla pequenaOveja = Oveja.new( "", "") pequenaOveja.muestra_color pequenaOveja.habla otraOveja = Oveja.new( "Oveja_Sin_Lana", "") # Usa el Color de defecto de la Oveja otraOveja.muestra_color otraOveja.come("Pasto") unCaballo = Caballo.new("","") # Usa el Color de Default del Animal_de_Cuatro_Patas unCaballo.muestra_color unCaballo.habla otroCaballo = Caballo.new("Boxer","café") # Usa el Color de Default del Animal_de_Cuatro_Patas otroCaballo.muestra_color otroCaballo.come("Alfalfa") |
Clases y Métodos
Como muestra el ejemplo 1, las definiciones de clases en Ruby son notablemente simples: la palabra clave class seguida por el nombre de la clase, el cuerpo de la clase, y la palabra clave end para terminar todo. Ruby permite la herencia simple: cada clase tiene exactamente una superclase, que puede ser especificada como muestra el ejemplo 2. Una clase sin padre explícito se considera hija de la clase Object --la raíz de la jerarquía de clases, la cual es la única que no tiene superclases. Si te preocupa que un modelo de herencia simple no sea suficiente, no temas. Hablaremos sobre las capacidades de mezclado (``mixin'') en breve. Ejemplos