Ruby Class.inherited

Visita este artí­culo en http://www.estadobeta.com/2008/02/25/ruby-classinherited/

Por Ismael en Documentación, Ruby & Rails, artículos, tips

En mi artículo anterior explicaba cómo podemos usar la maleabilidad de Ruby para solucionar problemas espinosos. Concretamente, cómo “inyectar” datos desde una subclase a una superclase sin contravenir las buenas practicas de OOP (leer el artículo en cuestión para entender de qué diablos estoy hablando).

Resulta que Ruby nos ofrece otra solución, en bandeja de plata:

Code (ruby)
  1.  
  2. # La subclase sólo sabe sobre si misma
  3. #
  4. class FlickrAdapter < ServiceFactory
  5.   URL_EXP = /flickr\.com/
  6. end
  7.  
  8. # La Super Clase sabe cuando una subclase es creada!
  9. #
  10. class ServiceFactory
  11.   def self.inherited( subclass )
  12.     # self.adapters fue definido en el articulo anterior
  13.     #
  14.     adapters << subclass, subclass::URL_EXP
  15.   end
  16. end
  17.  

En Ruby, toda clase invoca el método de clase Class.inherited, que recibe la subclase como argumento, toda vez que una subclase es definida. Este callback es similar a Module.included (usado abundantemente en los plugins de ActiveRecord, por ejemplo). Podemos usar este método para registrar información de las subclases en la superclase, sin duplicar esta información en la superclase y evitando así romper la modularidad del código.

5 comentarios para “Ruby Class.inherited”

  1. GravatarFabian Ramírez Dice:

    Hablando de comentarios de ruby on rails, me gustaria que hecharas un vistaso a este articulo:

    http://www.gurunet.cl/noticia/ver/28/guruNET-apuesta-por-Ruby-on-Rails

    Saludos

  2. Gravatarvladimir prieto Dice:

    y mientras otros piensan en dejarlo.

  3. Gravatarismael Dice:

    Siempre fue una mala idea hacer un servicio de mensajeria como Twitter en Rails. De hecho es una mala idea hacerlo sobre HTTP!

    Rails no es ni pretende ser una solucion universal.

    Dicho eso, Rails le permitio a Twitter tener el servicio funcionando en pocas semanas y con 3 personas! Ahora que tienen un trafico descomunal tiene sentido invertir mas plata y tiempo en optimizar el rendimiento.

    Hasta que tenga el trafico de Twitter, voy a seguir trabajando con las herramientas que me hagan sentir mas comodo y productivo. Los problemas de escalabilidad son indicio de que tu sitio esta teniendo exito, no lo contrario. Para que preocuparse de problemas que no se tienen?

  4. Gravatarlore Dice:

    waaaaa necesito una calcu cientifica en ruby :S… help meeeeeeeeeeeeeee

  5. Gravatarbedomax Dice:

    Hola Ismael, viendo este post me quedo pensado

    En la U me dan una materia llamada Programación Orientado a Objetos y nos dan java, pero creo que sería mucho mejor que nos den Ruby ya que todo es objeto hasta los números.
    Por ejemplo
    x=2
    x.class => fixnum
    #Y si le elevas
    x=x^1000000
    x.class => bignum

    Esto en java lo harias mediante metods de la clase integer , pero no es un metodo del número, corrigeme si no es asi :)

    Saludos

Deja un comentario

XHTML: puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>