Ruby object model: A matter of life and death

Post on 29-Jan-2018

2.166 views 0 download

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