Aprende POO con Ruby

Carlos Torrealba
Academia Hack
Published in
4 min readJun 7, 2019

Un paradigma que cambiará tu forma de ver las cosas

Photo by Sven Mieke on Unsplash

La programación orientada a objetos (poo) se define según Wikipedia como:

Un paradigma de la programación orientado a abstracciones de algún hecho o ente del mundo real (objeto), con atributos que representan sus características o propiedades, y métodos que emulan su comportamiento o actividad. Todas las propiedades y métodos comunes a los objetos se encapsulan o agrupan en clases. Una clase es una plantilla, un prototipo para crear objetos; en general, se dice que cada objeto es una instancia o ejemplar de una clase.

Photo by Patrick Fore on Unsplash

Si después de leer esa definición quedaste viendo para los lados y con 3 puntos menos de autoestima, tranquilo, todo va a estar bien.

Es mucho más fácil de lo que parece, primero debemos entender algunos conceptos básicos y con un poco de practica le daremos paso a la programación orientada a objetos a nuestras vidas.

Clases

Las clases son como el plano (blueprint) principal de un objeto, a partir de una clase se crean objetos. Este plano define que aspecto o características va a tener o como se va a comportar.

Photo by Sean Stratton on Unsplash

En el mundo real a menudo encontramos muchos objetos del mismo tipo. Todas las marcas y modelos de automóviles tienen motor, ruedas, puertas, etc. Cada automóvil fue construido a partir del mismo conjunto de planos y tiene los mismos componentes.

Además los automóviles tienen datos como el número de ruedas, el número de puertas, la capacidad de asientos y también tienen comportamientos como acelerar, detener, quedarse accidentados en momentos inoportunos, etc.

Basados en la programación orientada a objetos podemos llamar a los datos como atributos y al comportamiento como métodos

Datos → Atributos y Comportamiento → Métodos

Veamos un ejemplo de como podemos declarar una clase con Ruby

La sintaxis es bastante simple, la palabra reservada class debe de anteceder el nombre de nuestra clase y como convención en Ruby siempre escribiremos el nombre de nuestra clase con la primera letra en “Mayúscula”.

Instancia

El siguiente concepto que tenemos que traer a la mesa es: la instancia de la clase. Esto no es más que una representación de nuestra clase Vehicle .

Imaginemos que tenemos un molde para hacer gelatina, si ponemos nuestra mezcla de gelatina en el model, con el tiempo tendremos una replica del molde hecho con gelatina. Si repetimos una y otra vez ese proceso tendremos un ejercito de gelatina listo para ser comido.

Así que en este punto podemos llamar a nuestro molde una clase y a nuestra gelatina sacada de ese molde la instancia de una clase.

Ahora que tenemos ese punto claro ¿como creamos instancias/objetos de la clase Vehicle ?

Así de simple, la palabra reservada new permite crear instancias/objetos, es importante almacenar este objeto creado en una variable, para su posterior uso.

Hasta ahora tenemos un vehículo que no hace absolutamente nada, de hecho tenemos un concepto etéreo de vehículo ya que no le hemos dado forma, para ello debemos hacer uso de un constructor.

Constructor

Un constructor, es un Bob 👷 … asdasd

Un constructor es un método que se ejecuta automáticamente, cuando ejecutamos .new sobre una clase. Dentro de la estructura del constructor podemos definir todos los atributos de nuestra clase.

La palabra reservada initialize define nuestro constructor, todos los argumentos que recibimos al momento de crear una instancia de nuestro objeto, los asignaremos a variables de instancia, de eso hablaremos en un momento.

Atributos

Los datos que caracterizan a un Vehículo son sus atributos es por ello que usamos las variables de instancia para poder acceder a estos datos. ¿Como lo hacemos?

Como podemos observar acabamos de definir métodos de instancia y accedimos a información guardada en las variables de instancia definidas en el constructor inicialize .

Estos métodos de lectura de datos se suelen llamar getters y son necesarios para acceder a los datos la instancia.

Si queremos cambiar un atributo de nuestra instancia tenemos que definir los llamados métodos setters y podemos hacerlo de la siguiente manera:

¿Se imaginan tener que definir siempre todos los métodos getters y setters de todos los atributos de nuestra clase? ¿Y si nuestra clase tiene más de 20 atributos?

Es por eso que en Ruby tenemos macros que permiten que se definan los getters y los setters automágicamente:

Los tipos de atributos de acceso son:

  • attr_reader (read-only/getter)
  • attr_writer (write-only/setter)
  • attr_accessor (read & write/getter & setter)

Métodos

Por último nos falta definir métodos que nos permitan darle comportamiento a nuestro objeto, así que definamos el método engine_start en nuestra clase Vehicle

¡Eso es todo por ahora!

Hemos aprendido algunos conceptos de programación orientada a objetos en Ruby:

  • Objetos & Clases
  • Atributos como data de los objetos
  • Métodos como comportamiento de los objetos
  • Usamos los getters y setters de Ruby
Photo by Matt Duncan on Unsplash

--

--