Ahora vamos a crear y usar un objeto anfitrión:
Una vez que el objeto a
es creado, nos recuerda que el nombre es Juan.
Mmm, ¿y si queremos acceder al nombre directamente?
No, no podemos.
Por debajo de la piel del objeto
Las variables de instancia se esconden dentro del objeto. No están tan escondidas, las puedes ver cuando inspeccionas el objeto, y hay otras formas de acceder a ellas, pero Ruby es fiel a las buenas costumbres de la programación orientada a objetos manteniendo los datos lo más privados posible.
Entonces, ¿qué métodos están disponibles para los objetos Anfitrion?
Bien. Eso es un montón de métodos. Nosotros sólo definimos dos métodos.
¿Qué es lo que está sucediendo? Bueno, estos son todos los métodos
para los objetos Anfitrion, una lista completa, incluyendo los que están
definidos en las superclases de Anfitrion. Si queremos listar únicamente
los métodos definidos para la clase Anfitrion podemos pedirle que no
incluya sus ancestros pasándole el parámetro false
, que significa que
no queremos los métodos definidos por sus ancestros.
Ah, hay más cosas como esa. Veamos a qué métodos puede responder nuestro objeto anfitrión:
Así que, sabe decir_hola
, y to_s
(que significa “convertir algo en
un string”, un método que está definido por defecto para todos los
objetos), pero no reconoce nombre
como un método.
Modificando clases—Nunca es demasiado tarde
¿Pero qué pasa si quieres poder ver o modificar el nombre? Ruby provee una forma fácil para permitir acceder a las variables de un objeto.
En Ruby, puedes volver a abrir una clase y modificarla. Eso no cambia
objetos que ya existan, pero afecta a los nuevos objetos que puedas
crear. Así que vamos a crear un nuevo objeto y juguemos con su propiedad
@nombre
.
El uso de attr_accessor
determinó que se definan dos nuevos métodos
por nosotros, nombre
para obtener el valor, y nombre=
para
modificarlo.
Saludando a todo el mundo, ¡MegaAnfitrion no niega el saludo a nadie!
De todas formas, este anfitrión no es tan interesante, sólo puede trabajar con una persona a la vez. ¿Qué pasaría si tuviéramos alguna clase MegaAnfitrion que pudiera saludar al mundo, a una persona, o una lista completa de personas?
Escribamos esto en un archivo en vez de usar directamente el intérprete interactivo de Ruby IRB.
Para salir de IRB, escribe “quit”, “exit” o simplemente presiona Control-D.
Guarda este archivo como “ri20min.rb”, y ejecútalo con “ruby ri20min.rb”. El resultado debería ser:
Hola Mundo
Adiós Mundo. Vuelve pronto.
Hola Diego
Adiós Diego. Vuelve pronto.
Hola Alberto
Hola Beatriz
Hola Carlos
Hola David
Hola Ernesto
Adiós Alberto, Beatriz, Carlos, David, Ernesto. Vuelvan pronto.
...
...
Hay un montón de cosas nuevas en este nuevo ejemplo en las que podemos echar una mirada más profunda.