SlideShare a Scribd company logo
Ruby
The (good) compulsive obsession for the objects
(or the object of obsession)


An introduction to the Ruby Object Model


                          raf.magana@gmail.com
                                                  1
What you will find in this presentation
 OOP concepts
 Definition of object
 Ruby Objects
 Ruby Classes
 Objects and classes interaction
 Ruby Modules
 Ruby and Meta-programming
 Ruby Variables
 Ruby Methods
 The Top Level
                                         2
OOP concepts
Inheritance
  It allows a class to have the same behavior as another class
  Ruby uses < (less than) for inheritance: class Human < Mammal
    The default parent class is Object
Encapsulation
  To modify an object's state, one of the object's behaviors must be used
  In “my_object.something”, “something” must be a method, not a variable
Polymorphism
  It allows two or more objects respond to the same message
    person.wake_up / computer.wake_up / animal.wake_up
                                                                            3
Object? what is that?
 The OOP definition: Object = state + behavior
   state is described by variables (attributes)
   behavior is described by methods
 Every object of the same type will have its own state
 All the objects of the same type will share the same behavior




                                                                 4
Ruby Objects
A Ruby object consist of the following
  A reference to the object immediate class (interpreter stores this in ‘klass’)
  A hash table of instance variables
    Objects does not have a table of methods, they are in the class.
    Only classes can have methods.
  A set of flags: Singleton, Mark, Finalize, Taint, Exivar, Freeze, etc.




                                                                                   5
Ruby Classes (get ready to become insane)
 A Ruby class: it’s an instance object of class Class, an consists of the following:
   A reference to the object immediate class (interpreter stores this in ‘klass’)
   A hash table of instance variables
   A hash table of methods
   A set of flags: Singleton, Mark, Finalize, Taint, Exivar, Freeze, etc.
   A reference to the superclass (interpreter stores it in “super”)
      my_object.class denotes "instance of" (my_object = MyClass.new)
      MyClass.superclass denotes "inherits from" ( MyClass < OtherClass)

 In Ruby, always remember this, CLASSES ARE OBJECTS!!!

                                                                                       6
Ruby Classes
 since classes are objects, class objects are instances of other class
 “but, if classes are objects, and you just said objects doesn’t have
 methods, only classes does, so what’s going on here?”, you’d say.
   well, I have to say that a class isn’t really an object (x_X)
   look at the following code taken from the Ruby source




but a class is still an object:
* you can store instance variables
* inherits from the Object class

                                                                         7
Ruby Classes
In Ruby there are two types of classes
  “Real” classes and “meta”-classes (singleton, virtual, Eigen or ghost classes)

What is the difference?
  “meta”-classes are “Real” classes with a flag set to ‘virtual’
  a “meta”-class is created as needed and inserted in the inheritance chain before
  the object "real" class and they are hidden.
What are meta-classes useful for?
  If the instance methods of my_object are in MyClass and MyClass is an instance
  of class Class, so it can’t have its own instance methods, then where are the
  instance methods of MyClass object?
  The instance methods of MyClass object are in a meta-class, a Singleton class.


                                                                                     8
How classes and instances interact
Every method call nominate a receiver and a message.
“my_obj.my_method”: my_obj is the receiver and my_method is the message.

my_guitar = receiver; dup/play = message         Guitar = receiver; strings = message




                                                                                        9
Ruby modules
A Ruby module is an object that acts as a placeholder for classes,
methods and constants.
A module is like a class with 3 key differences
  It isn’t a class, (but it is an object and it has instance methods),
  Module is actually the superclass of Class - class Class < Module

  It cannot be instantiated (you cannot do x = MyModule.new)
  It can be mixed in a class to enhance its possibilities
A module can be two things
  A namespace, a way to regroup similar things.
  A Mixin (mixed in), they eliminate the need of multiple inheritance

                                                                         10
Ruby Modules
As a namespace   As a Mixin
                              Kernel#require

                                loads an external file

                              Module#include

                                Module#append_features

                                it makes a reference from
                                the class to the included
                                module




                                                            11
Hierarchy diagram
Kernel is a module, not a class
Object class mixes in the Kernel module
  it defines the instance methods of Object
Module inherits from Object                        Up
Class inherits from Module
How Ruby walks hierarchy to find methods?           Up
  The “Out and up” way
                                             Out
    Out = klass = object.class
    Up = super = MyClass.superclass

                                                        12
Ruby Variables
Pseudo Variables (their values can’t be changed with the assignment operator)
  self #execution context of the current method
  nil, true and false #sole-instances of NilClass, TrueClass and FalseClass
A variable can be distinguished by the characters at the start of its name.
  ‘@’ = instance variable of self.
  ‘@@’ = class variable
  ^[a-z_] = local variables
  ^[A-Z] = constant (we can change the state of the objects they reference)
  ^$ = global variables

                                                                                13
Ruby Variables - self
 it is only a reference to the current receiver
 If you omit the receiver, it defaults to self, the
 current object.
 self != this (other languages)
 self is a pseudo-variable, but it is still a variable,
 so it changes at some point, who changes the
 value of self?
   a method call
   a class/module definition




                                                          14
Ruby Variables - @ and @@
                   class variables (@@)
                     A class variable is shared among all
                     instances of a class and must be initialized
                     before they are used.
                     Example.class_v
                   class instance variables (@)
                     aka instance variables (wrong)
                     Example.class_instance_variable
                   instance variables (@)
                     Each instance of a class has a unique set of
                     instance variables
                     Example.new.iv
                                                                    15
Ruby Variables - accessors
                  accessors are Module methods
                  << is a way to access singleton classes (meta-
                  classes), in this case, we’re accessing the self’s
                  singleton class, which means AccessorsStudy
                  If we send a message to AccessorsStudy class,
                  the Ruby Interpreter uses the “out and up” way
                  to find methods.
                    AccessorsStudy.read_class_iv
                    AccessorsStudy -----> [<AccessorsStudy>]




                                                                       16
Ruby Methods
               Instance methods
                 we don’t specify the receiver, so it’s
                 self, which means the current instance
               Class methods
                 They don’t even exist, they are
                 singleton methods, because they are in
                 a singleton class
                 In this case we have 3 singleton
                 methods but Ruby only creates one
                 singleton class, hence the name.




                                                          17
Ruby Methods - object methods
                object-specific singleton classes




                                             Object




                   message
                  value = “”
                                             String
                klass = String           super = Object

                                                          18
Ruby Methods - object methods
                object-specific singleton classes

                                             Object




                                             String
                                         super = Object



                  message                   Singleton
                  value = “”              super = String
                klass = Singleton         methods: /, first

                                                             19
Ruby Methods - object creation
                  obj = Object.new
                    creates a blank object and calls the
                    initialize method
                  initialize method
                    initializes the object (variables, etc)
                  super
                    The call to super can access a
                    parent’s method regardless of its
                    visibility, that allows the subclass to
                    override its parent’s visibility rules
                    (X_o), believe it or not.

                                                              20
Ruby Methods - Access control
Ruby defines 3 levels of protection for module and class constants and
methods:
  Public: accessible to anyone. Methods are public by default (except for
  initialize, which is always private).
  Protected: Can be invoked only by objects of the defining class and its
  subclasses. Access is kept within the family.
  Private: Can be called only in functional form (that is, with an implicit self
  as the receiver). Private methods therefore can be called only in the
  defining class and by direct descendants within the same object.
You specify access levels to methods within class or module definitions
using one or more of the three functions public, protected, and private

                                                                                   21
Ruby Methods - Access control
                            protected level:

                                if you want one
                                instance of a certain
                                class to do something
                                with another instance
                                of its class.

                            private level

                                you don’t want the
                                instances to access
                                some methods of its
                                class

                            public level

                                you want methods to
                                be accessed from the
                                outside world.
                                                        22
Last but not least - Top level
The top-level default object, main, which is an
instance of Object brought into being
automatically for the sole reason that
something has to be self, even at the top level.
A method that you define at the top level is
stored as a private instance method of the
Object class.
Methods defined in Object are visible to all
objects




                                                   23
The End

raf.magana@gmail.com

                       24

More Related Content

PPTX
Ruby object model
PDF
Ruby — An introduction
PPT
The ruby programming language
PDF
Introduction to Ruby Programming Language
PDF
Ruby object model at the Ruby drink-up of Sophia, January 2013
PDF
PPTX
Ruby object model - Understanding of object play role for ruby
PPTX
Inheritance Mixins & Traits
Ruby object model
Ruby — An introduction
The ruby programming language
Introduction to Ruby Programming Language
Ruby object model at the Ruby drink-up of Sophia, January 2013
Ruby object model - Understanding of object play role for ruby
Inheritance Mixins & Traits

What's hot (20)

PDF
CLASS & OBJECT IN JAVA
PDF
Object Oriented Programming in PHP
PPTX
Object oriented javascript
PPTX
PPTX
JavaScript OOPS Implimentation
PDF
First fare 2011 frc-java-introduction
PPTX
Lightning talk
PDF
PYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYA
PDF
openFrameworks freakDay S03E02 Diederick Huijbers - C++/Physics/Cloth Animati...
PPS
Introduction to class in java
PPTX
Advance OOP concepts in Python
PPT
Classes&amp;objects
PPTX
Pi j3.2 polymorphism
PDF
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
PPTX
Classes, objects in JAVA
PPT
Oop java
PDF
Chapter 01 Introduction to Java by Tushar B Kute
PPT
Java: Objects and Object References
PPTX
+2 CS class and objects
CLASS & OBJECT IN JAVA
Object Oriented Programming in PHP
Object oriented javascript
JavaScript OOPS Implimentation
First fare 2011 frc-java-introduction
Lightning talk
PYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYA
openFrameworks freakDay S03E02 Diederick Huijbers - C++/Physics/Cloth Animati...
Introduction to class in java
Advance OOP concepts in Python
Classes&amp;objects
Pi j3.2 polymorphism
Chapter 02: Classes Objects and Methods Java by Tushar B Kute
Classes, objects in JAVA
Oop java
Chapter 01 Introduction to Java by Tushar B Kute
Java: Objects and Object References
+2 CS class and objects
Ad

Similar to The Ruby Object Model by Rafael Magana (20)

PDF
Aman kingrubyoo pnew
PPTX
Ruby OOP: Objects over Classes
ODP
Intro Ruby Classes Part I
PPTX
Object Oriented Programming Tutorial.pptx
PDF
Java programming -Object-Oriented Thinking- Inheritance
PDF
Object oriented programming java inheritance
KEY
Metaprogramming Primer (Part 1)
DOCX
Java Interview Questions For Freshers
DOCX
Ruby Interview Questions
KEY
Ruby's metaclass
PPTX
Paca oops slid
DOC
Java classes and objects interview questions
PPT
Ruby Metaprogramming
PPT
Object -oriented analysis and design.ppt
PDF
CS8392-OOPS-Printed-Notes-All-Units.pdf for students
DOCX
Object oriented programming tutorial
PPTX
Object oriented programming in java
PPTX
classes and objects of python object oriented
PDF
Metaprogramming ruby
PPT
Java Simple Notes
Aman kingrubyoo pnew
Ruby OOP: Objects over Classes
Intro Ruby Classes Part I
Object Oriented Programming Tutorial.pptx
Java programming -Object-Oriented Thinking- Inheritance
Object oriented programming java inheritance
Metaprogramming Primer (Part 1)
Java Interview Questions For Freshers
Ruby Interview Questions
Ruby's metaclass
Paca oops slid
Java classes and objects interview questions
Ruby Metaprogramming
Object -oriented analysis and design.ppt
CS8392-OOPS-Printed-Notes-All-Units.pdf for students
Object oriented programming tutorial
Object oriented programming in java
classes and objects of python object oriented
Metaprogramming ruby
Java Simple Notes
Ad

Recently uploaded (20)

PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Encapsulation theory and applications.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
August Patch Tuesday
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
TLE Review Electricity (Electricity).pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
A Presentation on Artificial Intelligence
PDF
Getting Started with Data Integration: FME Form 101
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Machine Learning_overview_presentation.pptx
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Spectroscopy.pptx food analysis technology
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
A comparative analysis of optical character recognition models for extracting...
Encapsulation theory and applications.pdf
Programs and apps: productivity, graphics, security and other tools
August Patch Tuesday
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MIND Revenue Release Quarter 2 2025 Press Release
TLE Review Electricity (Electricity).pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Assigned Numbers - 2025 - Bluetooth® Document
A Presentation on Artificial Intelligence
Getting Started with Data Integration: FME Form 101
Per capita expenditure prediction using model stacking based on satellite ima...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Network Security Unit 5.pdf for BCA BBA.
Machine Learning_overview_presentation.pptx
Empathic Computing: Creating Shared Understanding
Spectroscopy.pptx food analysis technology

The Ruby Object Model by Rafael Magana

  • 1. Ruby The (good) compulsive obsession for the objects (or the object of obsession) An introduction to the Ruby Object Model [email protected] 1
  • 2. What you will find in this presentation OOP concepts Definition of object Ruby Objects Ruby Classes Objects and classes interaction Ruby Modules Ruby and Meta-programming Ruby Variables Ruby Methods The Top Level 2
  • 3. OOP concepts Inheritance It allows a class to have the same behavior as another class Ruby uses < (less than) for inheritance: class Human < Mammal The default parent class is Object Encapsulation To modify an object's state, one of the object's behaviors must be used In “my_object.something”, “something” must be a method, not a variable Polymorphism It allows two or more objects respond to the same message person.wake_up / computer.wake_up / animal.wake_up 3
  • 4. Object? what is that? The OOP definition: Object = state + behavior state is described by variables (attributes) behavior is described by methods Every object of the same type will have its own state All the objects of the same type will share the same behavior 4
  • 5. Ruby Objects A Ruby object consist of the following A reference to the object immediate class (interpreter stores this in ‘klass’) A hash table of instance variables Objects does not have a table of methods, they are in the class. Only classes can have methods. A set of flags: Singleton, Mark, Finalize, Taint, Exivar, Freeze, etc. 5
  • 6. Ruby Classes (get ready to become insane) A Ruby class: it’s an instance object of class Class, an consists of the following: A reference to the object immediate class (interpreter stores this in ‘klass’) A hash table of instance variables A hash table of methods A set of flags: Singleton, Mark, Finalize, Taint, Exivar, Freeze, etc. A reference to the superclass (interpreter stores it in “super”) my_object.class denotes "instance of" (my_object = MyClass.new) MyClass.superclass denotes "inherits from" ( MyClass < OtherClass) In Ruby, always remember this, CLASSES ARE OBJECTS!!! 6
  • 7. Ruby Classes since classes are objects, class objects are instances of other class “but, if classes are objects, and you just said objects doesn’t have methods, only classes does, so what’s going on here?”, you’d say. well, I have to say that a class isn’t really an object (x_X) look at the following code taken from the Ruby source but a class is still an object: * you can store instance variables * inherits from the Object class 7
  • 8. Ruby Classes In Ruby there are two types of classes “Real” classes and “meta”-classes (singleton, virtual, Eigen or ghost classes) What is the difference? “meta”-classes are “Real” classes with a flag set to ‘virtual’ a “meta”-class is created as needed and inserted in the inheritance chain before the object "real" class and they are hidden. What are meta-classes useful for? If the instance methods of my_object are in MyClass and MyClass is an instance of class Class, so it can’t have its own instance methods, then where are the instance methods of MyClass object? The instance methods of MyClass object are in a meta-class, a Singleton class. 8
  • 9. How classes and instances interact Every method call nominate a receiver and a message. “my_obj.my_method”: my_obj is the receiver and my_method is the message. my_guitar = receiver; dup/play = message Guitar = receiver; strings = message 9
  • 10. Ruby modules A Ruby module is an object that acts as a placeholder for classes, methods and constants. A module is like a class with 3 key differences It isn’t a class, (but it is an object and it has instance methods), Module is actually the superclass of Class - class Class < Module It cannot be instantiated (you cannot do x = MyModule.new) It can be mixed in a class to enhance its possibilities A module can be two things A namespace, a way to regroup similar things. A Mixin (mixed in), they eliminate the need of multiple inheritance 10
  • 11. Ruby Modules As a namespace As a Mixin Kernel#require loads an external file Module#include Module#append_features it makes a reference from the class to the included module 11
  • 12. Hierarchy diagram Kernel is a module, not a class Object class mixes in the Kernel module it defines the instance methods of Object Module inherits from Object Up Class inherits from Module How Ruby walks hierarchy to find methods? Up The “Out and up” way Out Out = klass = object.class Up = super = MyClass.superclass 12
  • 13. Ruby Variables Pseudo Variables (their values can’t be changed with the assignment operator) self #execution context of the current method nil, true and false #sole-instances of NilClass, TrueClass and FalseClass A variable can be distinguished by the characters at the start of its name. ‘@’ = instance variable of self. ‘@@’ = class variable ^[a-z_] = local variables ^[A-Z] = constant (we can change the state of the objects they reference) ^$ = global variables 13
  • 14. Ruby Variables - self it is only a reference to the current receiver If you omit the receiver, it defaults to self, the current object. self != this (other languages) self is a pseudo-variable, but it is still a variable, so it changes at some point, who changes the value of self? a method call a class/module definition 14
  • 15. Ruby Variables - @ and @@ class variables (@@) A class variable is shared among all instances of a class and must be initialized before they are used. Example.class_v class instance variables (@) aka instance variables (wrong) Example.class_instance_variable instance variables (@) Each instance of a class has a unique set of instance variables Example.new.iv 15
  • 16. Ruby Variables - accessors accessors are Module methods << is a way to access singleton classes (meta- classes), in this case, we’re accessing the self’s singleton class, which means AccessorsStudy If we send a message to AccessorsStudy class, the Ruby Interpreter uses the “out and up” way to find methods. AccessorsStudy.read_class_iv AccessorsStudy -----> [<AccessorsStudy>] 16
  • 17. Ruby Methods Instance methods we don’t specify the receiver, so it’s self, which means the current instance Class methods They don’t even exist, they are singleton methods, because they are in a singleton class In this case we have 3 singleton methods but Ruby only creates one singleton class, hence the name. 17
  • 18. Ruby Methods - object methods object-specific singleton classes Object message value = “” String klass = String super = Object 18
  • 19. Ruby Methods - object methods object-specific singleton classes Object String super = Object message Singleton value = “” super = String klass = Singleton methods: /, first 19
  • 20. Ruby Methods - object creation obj = Object.new creates a blank object and calls the initialize method initialize method initializes the object (variables, etc) super The call to super can access a parent’s method regardless of its visibility, that allows the subclass to override its parent’s visibility rules (X_o), believe it or not. 20
  • 21. Ruby Methods - Access control Ruby defines 3 levels of protection for module and class constants and methods: Public: accessible to anyone. Methods are public by default (except for initialize, which is always private). Protected: Can be invoked only by objects of the defining class and its subclasses. Access is kept within the family. Private: Can be called only in functional form (that is, with an implicit self as the receiver). Private methods therefore can be called only in the defining class and by direct descendants within the same object. You specify access levels to methods within class or module definitions using one or more of the three functions public, protected, and private 21
  • 22. Ruby Methods - Access control protected level: if you want one instance of a certain class to do something with another instance of its class. private level you don’t want the instances to access some methods of its class public level you want methods to be accessed from the outside world. 22
  • 23. Last but not least - Top level The top-level default object, main, which is an instance of Object brought into being automatically for the sole reason that something has to be self, even at the top level. A method that you define at the top level is stored as a private instance method of the Object class. Methods defined in Object are visible to all objects 23