Overblog
Edit post Seguir este blog Administration + Create my blog
28 junio 2012 4 28 /06 /junio /2012 01:22

Este capitulo es la continuación del tema 10, e incluso seguimos utilizando los ejemplos anteriores donde habíamos creado la clase Juguete y hemos creado 2 objetos, un soldadito y un trencito.

 

Propiedades

 

En Ruby, al igual que en la mayoría de lenguajes de programación orientado a objetos, una clase tiene propiedades, es decir, se definen variables que "viven" dentro de cada objeto creado.

 

Nuestros objetos "soldadito" y "trencito" no tienen ninguna propiedad, para que un objeto tenga propiedad se tiene que definir en la clase, en este caso vamos a definir una propiedad llamada "marca" en la clase "Juguete"

 

irb(main):036:0> class Juguete

irb(main):037:1>  @marca

irb(main):038:1> end

=> nil

 

Muy bien, las variables de instancia se definen con una "@" como prefijo, en este caso le hemos agregado a la clase "Juguete" una propiedad llamada @marca, esta variable de instancia viene a ser la propiedad.

 

Y algo adicional, magicamente los objetos "soldadito" y "trencito" ya tienen la propiedad @marca, esto es una característica de Ruby, pero la mala noticia es que lo tienen "adentro", es decir, no podemos acceder a esa variable porque es privada, para ello necesitamos crear una forma de acceder o mejor dicho, "una forma de comunicacion" con el objeto, y a eso se le llama metodos.

 

Metodos

 

En las clases de Ruby pueden definirse métodos, que son una especie de funciones o definiciones que hacen algo, ahora en la POO cuando una funcion permite al objeto un mecanismo de comunicacion ya no se le dice funcion sino se le dice método, por ejemplo vamos a agregar un método que devuelva de que país son los juguetes, para ello modificamos la clase:

 

irb(main):059:0> class Juguete

irb(main):060:1>  def pais

irb(main):061:2>   return "Peru" #En Ruby la palabra "return" no es necesario siempre que la sintaxis no sea trivial.

irb(main):062:2>  end

irb(main):063:1> end

=> nil

 

Al igual como hicimos para definir la propiedad @marca, hemos modificado nuevamente la clase Juguete y hemos agregado un metodo (o funcion) llamado pais, los métodos se definen con la palabra "def", y automagicamente "trencito" y "soldadito" ya cuentan con ese método, para llamarlo solo basta poner el punto "." y el nombre del metodo.

 

irb(main):064:0> soldadito.pais

=> "Peru"

 

Ahora este método simplemente nos muestra la palabra "Peru", si quisieramos modificarlo (para que pais ya no se llame "Peru" sino otro nombre), tenemos que agregar otro metodo más que nos permita cambiar el país.

 

Pero recordamos que soldadito tiene una propiedad llamada @marca pero que no tenemos como acceder, podríamos construir un metodo similiar al "def pais" pero existe un camino mas facil (y menos código)

 

irb(main):065:0> class Juguete

irb(main):066:1>  attr_accessor :marca

irb(main):067:1> end

=> nil

 

En una sola linea (la 066) hemos definido no solo 1 metodo, sino 2 metodos de lectura y escritura de la variable de instancia @marca (mediante el simbolo :marca el attr_accessor reconoce @marca y ademas crea los metodos marca), ahora automagicamente ya lo podemos usar en nuestros objetos.

 

irb(main):080:0> soldadito.marca="Acme"

=> "Acme"

irb(main):081:0> soldadito.marca

=> "Acme"

 

Como vemos, ya tenemos los metodos para utilizar nuestra variable de instancia @marca.

 

El "attr_accessor" utiliza la "metaprogramacion" que en cristiano, lo que hace es crear los metodos automágicamente en tiempo de ejecucion (es decir cuando ya se esta usando el programa).

 

Tambien estamos viendo que la codificacion es bien reducida en Ruby, por lo que nos ayuda a entender más fácil y rápido el codigo fuente.

 

Bueno terminamos con este tema 11, continaremos con el tema 12, no se olviden de exponer sus dudas en la seccion de comentarios lineas abajo y no necesitas registrarte.

Compartir este post
Repost0

Comentarios

Presentación

  • : El blog de Daniel A. Nuñez C.
  • : Un blog sobre tecnologías y futuro, también sobre lenguaje de programación Ruby y más.
  • Contacto

Perfil

  • Daniel A. Nuñez C.
  • Ingeniero de Sistemas
  • Ingeniero de Sistemas

Donaciones/Donations

Por favor considera realizar una donación

Please make a donation

btn_donateCC_LG.png

Buscar Tema En Este Blog

Archivos