Todo es un Objeto

Ruby fué desarrollado teniendo en cuenta el principio de ortogonalidad :

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