freeCodeCamp/guide/spanish/ruby/classes-and-objects/index.md

4.0 KiB

title localeTitle
Classes and Objects Clases y objetos

Clases y objetos

Objetos en ruby

Repasemos rápidamente los objetos de rubí. En el mundo real, los objetos pueden ser cualquier cosa, incluyendo un automóvil, una computadora o incluso un humano. Cada uno de estos objetos tiene un estado y comportamientos.

Teniendo en cuenta un automóvil, su estado podría describirse como su modelo, marca y color. El comportamiento del automóvil podría ser girar, sonar o frenar.

Un objeto en Ruby tiene características muy similares. Los objetos de rubí también tienen un estado y comportamiento. En Ruby Objects, el estado se almacena en variables de instancia y el comportamiento se almacena en funciones.

Clases en Ruby

Una clase es básicamente una plantilla de programa. Esta plantilla define las properties iniciales utilizando instance variables . De nuevo, también hay behaviors definidos de nuevo en forma de funciones.

Se crea una nueva instancia de una clase utilizando el método de initialize de una clase.

Tomemos, por ejemplo, el siguiente código de ejemplo de una clase:

class Car 
    def initialize(make, model, color) 
        @make = make 
        @model = model 
        @color = color 
    end 
 
    def turn(direction) 
    end 
 
    def honk 
        puts "beep beep" 
    end 
 
    def brake 
    end 
 end 

Como se vio, las clases se definen utilizando la palabra clave de class y el bloque de código de clase termina con un trabajo de teclas de end . La función .initialize es el constructor. Cuando creamos este objeto, definimos los atributos @make , @model y @color con los valores que pasamos al constructor.

Creando una instancia de una clase

Ahora, para crear una instancia de esta clase solo necesita llamar a la función .new .

mazda3 = Car.new('Mazda', 'Mazda3', 'White') 

Esto es genial, pero a veces es posible que necesite cambiar algunos de estos atributos. La mayoría de estos atributos en este ejemplo serían estáticos. Aun así, imagina que decidiste conseguir un nuevo trabajo de pintura. ¿Cómo haría para actualizar el estado de esta instancia del objeto Car ?

Modificación del estado de instancia

Afortunadamente, es bastante simple actualizar el estado de un objeto. Primero, necesitaríamos un método setter ! Ruby define las configuraciones de getter y setter como attr_reader y attr_accessor respectivamente. Para las configuraciones de captador y definidor en un atributo dado, también puede usar attr_accessor .

Para demostrar esto, he modificado el objeto Car anterior con estas configuraciones recién definidas.

class Car 
    attr_accessor :color 
    attr_reader :make, :model 
 
    def initialize(make, model, color) 
        @make = make 
        @model = model 
        @color = color 
    end 
 
    def turn(direction) 
    end 
 
    def honk 
        puts "beep beep" 
    end 
 
    def brake 
    end 
 end 

Así que ahora podemos cambiar de estado y leer el estado del objeto.

irb(main):023:0> c = Car.new('Mazda', 'Mazda3', 'White') 
 => #<Car:0x00007fd3ca13fdd0 @make="Mazda", @model="Mazda3", @color="White", @speed=nil> 
 irb(main):024:0> c.color 
 => "White" 
 irb(main):025:0> c.make 
 => "Mazda" 
 irb(main):026:0> c.model 
 => "Mazda3" 
 irb(main):027:0> c.color = 'Brutal Blue' 
 => "Brutal Blue" 
 irb(main):028:0> c.make = 'Prius' 
 Traceback (most recent call last): 
        2: from /usr/local/bin/irb:11:in `<main>' 
        1: from (irb):28 
 NoMethodError (undefined method `make=' for #<Car:0x00007fd3ca13fdd0>) 
 Did you mean?  make 

Viendo la salida anterior de irb , puede ver que cada una de las variables de instancia es legible. Podemos escribir en @color , pero terminamos causando una excepción NoMethodError cuando intentamos escribir en @make . Esto se debe a que @make solo se definió utilizando attr_reader , por lo que make= no está definido.

Recursos