Ruby object model: A matter of life and death

68
Ruby object model

Transcript of Ruby object model: A matter of life and death

Page 1: Ruby object model: A matter of life and death

Ruby object model

Page 2: Ruby object model: A matter of life and death

Javier Lafora

@eLafo

Working at ASPgems

elafosobrerailes.blogspot.com

Page 3: Ruby object model: A matter of life and death

In ruby everything is an object

Page 4: Ruby object model: A matter of life and death
Page 5: Ruby object model: A matter of life and death
Page 6: Ruby object model: A matter of life and death
Page 7: Ruby object model: A matter of life and death

object

flagsklassinstance_variables

Page 8: Ruby object model: A matter of life and death

MyClass

flagsklasssuperinstance_variablesconstantsmethods

Page 9: Ruby object model: A matter of life and death

object

flagsklassinstance_variables

MyClass

flagsklassinstance_variablessuperconstantsmethods

RObject

RClassRBasic

Page 10: Ruby object model: A matter of life and death
Page 11: Ruby object model: A matter of life and death
Page 12: Ruby object model: A matter of life and death
Page 13: Ruby object model: A matter of life and death

bruceIronMaiden

*super

*klass@name=”bruce”

Musician*super

*klass

name=()name()

BasicObject*super

*klass

Object*super

*klass

Module*super

*klass

Class*super

*klass

*klass

Page 14: Ruby object model: A matter of life and death

Every instance of RClass will be an instance of Class

even Class itself

Page 15: Ruby object model: A matter of life and death

Unshamesly taken from Burkey Libbey's presentation “Ruby's Object Model: Metaprogramming and other Magic”

Page 16: Ruby object model: A matter of life and death

bruceIronMaiden

*super

*klass@name=”bruce”

Musician*super

*klass

name=()name()

BasicObject*super

*klass

Object*super

*klass

*klass

Page 17: Ruby object model: A matter of life and death

bruceIronMaiden

*super

*klass@name=”bruce”

Musician*super

*klass

BasicObject*super

*klass

Object*super

*klass

*klass

to_s()

Page 18: Ruby object model: A matter of life and death

Extending an object

Page 19: Ruby object model: A matter of life and death
Page 20: Ruby object model: A matter of life and death
Page 21: Ruby object model: A matter of life and death
Page 22: Ruby object model: A matter of life and death

SINGLETON CLASSES

Page 23: Ruby object model: A matter of life and death
Page 24: Ruby object model: A matter of life and death
Page 25: Ruby object model: A matter of life and death
Page 26: Ruby object model: A matter of life and death

bruce IronMaiden

*super

*klass

*klass

#bruce

*super

*klass

flight_plane()

Page 27: Ruby object model: A matter of life and death
Page 28: Ruby object model: A matter of life and death
Page 29: Ruby object model: A matter of life and death
Page 30: Ruby object model: A matter of life and death

Class Methods

Page 31: Ruby object model: A matter of life and death
Page 32: Ruby object model: A matter of life and death

Musician*super

*klass

Class*super

*klass

#Musician*super

*klass

awesome_musicians()

Page 33: Ruby object model: A matter of life and death

FAIL

Page 34: Ruby object model: A matter of life and death

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

Page 35: Ruby object model: A matter of life and death
Page 36: Ruby object model: A matter of life and death
Page 37: Ruby object model: A matter of life and death
Page 38: Ruby object model: A matter of life and death

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

Page 39: Ruby object model: A matter of life and death

“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

Page 40: Ruby object model: A matter of life and death

Modules and mixins

Page 41: Ruby object model: A matter of life and death
Page 42: Ruby object model: A matter of life and death
Page 43: Ruby object model: A matter of life and death

ICSinger*super

*klass

high_pitch_from_hell()

bruce

IronMaiden

*super

*klass

*klass

#bruce

*super

*klass

Page 44: Ruby object model: A matter of life and death
Page 45: Ruby object model: A matter of life and death
Page 46: Ruby object model: A matter of life and death

ICSinger*super

*klass

high_pitch_from_hell()

bruce

IronMaiden

*super

*klass

*klass

#bruce

*super

*klass

ICHeavyMetal

*super

*klass

devil_horns()

Musician*super

*klass

Page 47: Ruby object model: A matter of life and death
Page 48: Ruby object model: A matter of life and death
Page 49: Ruby object model: A matter of life and death
Page 50: Ruby object model: A matter of life and death

ICHeavyMetal

*super

*klass

*iv_tbl

HeavyMetal

*klass

*iv_tbl

*m_tbl

iv_tbl

m_tbl

devil_horns()

*m_tbl

Page 51: Ruby object model: A matter of life and death
Page 52: Ruby object model: A matter of life and death
Page 53: Ruby object model: A matter of life and death
Page 54: Ruby object model: A matter of life and death

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

Page 55: Ruby object model: A matter of life and death
Page 56: Ruby object model: A matter of life and death

ICHeavyMetal

IronMaiden

ICHeavyMetal::InstanceMethods

HeavyMetal::InstanceMethods

HeavyMetal

Musician

Object #Object

#Musician

ICHeavyMetal::ClassMethods

#IronMaiden

HeavyMetal::ClassMethods

Page 57: Ruby object model: A matter of life and death
Page 58: Ruby object model: A matter of life and death
Page 59: Ruby object model: A matter of life and death
Page 60: Ruby object model: A matter of life and death
Page 61: Ruby object model: A matter of life and death
Page 62: Ruby object model: A matter of life and death
Page 63: Ruby object model: A matter of life and death
Page 64: Ruby object model: A matter of life and death
Page 65: Ruby object model: A matter of life and death
Page 66: Ruby object model: A matter of life and death
Page 67: Ruby object model: A matter of life and death

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

Page 68: Ruby object model: A matter of life and death

Thank you