Ruby object model: A matter of life and death
-
Upload
javier-lafora-rey -
Category
Technology
-
view
2.166 -
download
0
Transcript of Ruby object model: A matter of life and death
Ruby object model
Javier Lafora
@eLafo
Working at ASPgems
elafosobrerailes.blogspot.com
In ruby everything is an object
object
flagsklassinstance_variables
MyClass
flagsklasssuperinstance_variablesconstantsmethods
object
flagsklassinstance_variables
MyClass
flagsklassinstance_variablessuperconstantsmethods
RObject
RClassRBasic
bruceIronMaiden
*super
*klass@name=”bruce”
Musician*super
*klass
name=()name()
BasicObject*super
*klass
Object*super
*klass
Module*super
*klass
Class*super
*klass
*klass
Every instance of RClass will be an instance of Class
even Class itself
Unshamesly taken from Burkey Libbey's presentation “Ruby's Object Model: Metaprogramming and other Magic”
bruceIronMaiden
*super
*klass@name=”bruce”
Musician*super
*klass
name=()name()
BasicObject*super
*klass
Object*super
*klass
*klass
bruceIronMaiden
*super
*klass@name=”bruce”
Musician*super
*klass
BasicObject*super
*klass
Object*super
*klass
*klass
to_s()
Extending an object
SINGLETON CLASSES
bruce IronMaiden
*super
*klass
*klass
#bruce
*super
*klass
flight_plane()
Class Methods
Musician*super
*klass
Class*super
*klass
#Musician*super
*klass
awesome_musicians()
FAIL
Musician*super
*klass
Class*super
*klass
#Musician*super
*klass
awesome_musicians()
IronMaiden
*super
*klass
Object*super
*klass
Class*super
*klass
Class*super
*klass
Module*super
*klass
IronMaiden
*super
*klass
Musician*super
*klass
#Musician*super
*klass
#IronMaiden
*super
*klass
Object*super
*klass
#Object*super
*klass
BasicObject*super
*klass
#BasicObject
*super
*klass
Class*super
*klass
“The superclass of the eigenclass of an object is the object's class. The superclass of the eigenclass of a class is the eigenclass of the class's superclass.”
Paolo Perrotta
Modules and mixins
ICSinger*super
*klass
high_pitch_from_hell()
bruce
IronMaiden
*super
*klass
*klass
#bruce
*super
*klass
ICSinger*super
*klass
high_pitch_from_hell()
bruce
IronMaiden
*super
*klass
*klass
#bruce
*super
*klass
ICHeavyMetal
*super
*klass
devil_horns()
Musician*super
*klass
ICHeavyMetal
*super
*klass
*iv_tbl
HeavyMetal
*klass
*iv_tbl
*m_tbl
iv_tbl
m_tbl
devil_horns()
*m_tbl
IronMaiden*super
*klass
ICHeavyMetal
*super
*klass
*m_tbl
Musician*super
*klass
m_tbl
Object*super
*klass
m_tbl
#Object*super
*klass
m_tbl
#Musician*super
*klass
m_tbl
HeavyMetal
*super
*klass
*m_tbl
*m_tbl
#IronMaiden
*super
*klass
*m_tbl
#HeavyMetal
*super
*klass
*m_tbl
ICHeavyMetal
IronMaiden
ICHeavyMetal::InstanceMethods
HeavyMetal::InstanceMethods
HeavyMetal
Musician
Object #Object
#Musician
ICHeavyMetal::ClassMethods
#IronMaiden
HeavyMetal::ClassMethods
Metaprogramming with Ruby – Paolo Perrotta
http://mwrc2008.confreaks.com/11farley.html
http://rhg.rubyforge.org/
http://www.madebydna.com/all/code/2011/06/24/eigenclasses-demystified.html
http://www.atalon.cz/rb-om/ruby-object-model/#sc-inheritance-sample
http://www.rubyinside.com/a-look-into-rubys-object-model-3940.html
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
Thank you