Ruby. Programación orientada a objetos

Introducción a Ruby y a la programación orientada a objetos

Clases y objetos

Una clase es una definición de un objeto que contiene atributos a los que representa y métodos que puede ejecutar. En Ruby una clase se define de la siguiente forma:

class Coche
    def initialize(color, puertas)
        @color = color
        @puertas = puertas
    end
end

El método initialize es un método especial de Ruby que se utiliza como constructor cada vez que se crea una nueva instancia del objeto.

En Ruby todas las classes deben empezar con letra mayúscula.

Public, private, protected

Los métodos de una clase por defecto, y si no se indica lo contrario, son públicos. Además de público, un método puede ser protected o private.

Para determinar de qué tipo es basta con añadir la palabra clave private al principio de los métodos privados por ejemplo:

class coche
    def abrirPuertas
    end

    def cerrarPuertas
    end

    private
    	def abrirGuantera
    	end
    end
end

La palabra clave protected se usa de la misma forma que private con la diferencia que un si una clase hereda el método también puede usarla como si fuera público, mientras que si se llama desde el exterior se comporta como un método privado.

Herencia

Otra de las particularidades de cualquier lenguaje orientado a objetos es sin duda la herencia. En Ruby se define la herencia de la siguiente manera:

class Vehiculo
    def initialize()
    end
end

class Coche < Vehiculo
end

La clase coche hereda todos los métodos públicos o protegidos de vehículo.

Al igual que Java por ejemplo, Ruby tampoco soporta la herencia múltiple, es decir, una clase sólo puede heredar de otra clase y no de varias.

Poliformismo

El poliformismo sirve para dar genericidad a un método de una clase. Por ejemplo: Supongamos que tenemos dos tipos de objetos un triangulo y un círculo que heredan la clase forma. La clase forma tiene un método que se llama devolverPerimetro

class Forma
    def devolverPerimetro()
    end
end

class Circulo < Forma
    def devolverPerimetro()
    ...
    end

end

class Triangulo < Forma
    def devolverPerimetro()
    ...
    end

end

Está claro que no se calcula de la misma forma el perímetro de un círculo que el de un triangulo, por ello cada objeto lo definirá de una forma distinta.

El poliformismo nos da la posibilidad de que si tenemos un objeto forma pero no sabemos si es triangulo o circulo, podamos llamar al método devolverPerimetro y nos devolverá el perímetro correcto.