SlideShare a Scribd company logo
1 of 9
Ruby Object Graphs
Avilay Parekh
Conventions
object Derived
Base
object, Base, and Derived are all Ruby objects.
object’s class is Derived.
Derived is a subclass of Base.
Calling Scope
c1
@flavor = ‘choc’
@calories = 100
Cookie
flavor=()
flavor ()
Class
- new()
Snack
calories=()
calories()
Module
Object
BasicObject
class Snack
def initialize
@calories = 100
end
end
class Cookie < Snack
def initialize
@flavor = „choc‟
end
end
c1 = Cookie.new
c1.calories looks in this
hierarchy.
Cookie.new looks in
this hierarchy.
For obj.method Ruby will look
in the hierarchy pointed to by
obj’s class.
For method Ruby will look in the
hierarchy pointed to by self’s
class
For @attribute Ruby will look
for the attribute in self.
Singletons
c1 Class
Define methods on a specific object that will be
available to only that object and no other object.
Not the same as the singleton creation design pattern!
This is done by “inserting” an anonymous class at the
end of the object’s class hierarchy.
Note, the picture below does not show the usual
Module, Object, BasicObject, etc.
class Cookie
# same as before
end
c1 = Cookie.new
def c1.eat
puts “chomp..chomp”
end
c2 = Cookie.new
c1.eat # => “chomp..chomp”
c2.eat # => no method found
Anon
-eat()
Cookie
Snack
Class Methods
c1
Class
Known as “static methods” in C#.
Simply a special case of singletons described in the
previous slide.
An anonymous class is inserted at the end of Cookie’s
class hierarchy.
Anon
-sweet?()
Cookie
Snack
class Cookie
# same as before
def Cookie.sweet?
true
end
end
puts Cookie.sweet?
class Cookie
# same as before
end
c1 = Cookie.new
def c1.eat
puts “chomp..chomp”
end
class << c1
def munch
puts “yummy!”
end
end
c1.eat
c1.munch
Another way to define singletons
Singletons
class Cookie
# same as before
def Cookie.sweet?
true
end
class << self
def savory?
false
end
end
end
puts Cookie.sweet?
puts Cookie.savory?
extend object with Module
c1 Class
Instance methods of the module are available as
instance methods of that specific object.
Like singleton methods, except loosely coupled.
Anon class points to the Module’s method table
instead of having the methods itself.
Done by “including” the module in a newly created
singleton class.
Anon
Cookie
Snack
module Recipe
def slice
::
end
end
class Cookie < Snack
# same as before
End
c1 = Cookie.new
c1.extend Recipe
c1.slice
Recipe
-slice
methods
extend class with Module
c1
Instance methods of the module are available as
class methods of the class.
Like class methods, except loosely coupled.
Cookie
Snack
module Recipe
def slice
::
end
end
class Cookie
extend Recipe
end
Cookie.slice
Anon
Recipe
-slice
methods
Class
include Module in class
c1 Class
Instance methods of the module are available as
instance methods of the class.
Like OO inheritance, except loosely coupled.
Done by “inserting” an anonymous class in the middle
of the object’s class hierarchy.
Cookie
Snack
Anon
Recipe
-slice
methods
module Recipe
def slice
::
end
end
class Cookie < Snack
include Recipe
# same as before
End
c1 = Cookie.new
c1.slice
c1.flavor

More Related Content

More from Avilay Parekh (10)

Backprop
BackpropBackprop
Backprop
 
Ai &amp; ml
Ai &amp; mlAi &amp; ml
Ai &amp; ml
 
Pupymeetup
PupymeetupPupymeetup
Pupymeetup
 
Day4
Day4Day4
Day4
 
Day3
Day3Day3
Day3
 
Day2
Day2Day2
Day2
 
Day1
Day1Day1
Day1
 
Git primer
Git primerGit primer
Git primer
 
Git undo
Git undoGit undo
Git undo
 
What is cloud computing
What is cloud computingWhat is cloud computing
What is cloud computing
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Ruby object graph

  • 2. Conventions object Derived Base object, Base, and Derived are all Ruby objects. object’s class is Derived. Derived is a subclass of Base.
  • 3. Calling Scope c1 @flavor = ‘choc’ @calories = 100 Cookie flavor=() flavor () Class - new() Snack calories=() calories() Module Object BasicObject class Snack def initialize @calories = 100 end end class Cookie < Snack def initialize @flavor = „choc‟ end end c1 = Cookie.new c1.calories looks in this hierarchy. Cookie.new looks in this hierarchy. For obj.method Ruby will look in the hierarchy pointed to by obj’s class. For method Ruby will look in the hierarchy pointed to by self’s class For @attribute Ruby will look for the attribute in self.
  • 4. Singletons c1 Class Define methods on a specific object that will be available to only that object and no other object. Not the same as the singleton creation design pattern! This is done by “inserting” an anonymous class at the end of the object’s class hierarchy. Note, the picture below does not show the usual Module, Object, BasicObject, etc. class Cookie # same as before end c1 = Cookie.new def c1.eat puts “chomp..chomp” end c2 = Cookie.new c1.eat # => “chomp..chomp” c2.eat # => no method found Anon -eat() Cookie Snack
  • 5. Class Methods c1 Class Known as “static methods” in C#. Simply a special case of singletons described in the previous slide. An anonymous class is inserted at the end of Cookie’s class hierarchy. Anon -sweet?() Cookie Snack class Cookie # same as before def Cookie.sweet? true end end puts Cookie.sweet?
  • 6. class Cookie # same as before end c1 = Cookie.new def c1.eat puts “chomp..chomp” end class << c1 def munch puts “yummy!” end end c1.eat c1.munch Another way to define singletons Singletons class Cookie # same as before def Cookie.sweet? true end class << self def savory? false end end end puts Cookie.sweet? puts Cookie.savory?
  • 7. extend object with Module c1 Class Instance methods of the module are available as instance methods of that specific object. Like singleton methods, except loosely coupled. Anon class points to the Module’s method table instead of having the methods itself. Done by “including” the module in a newly created singleton class. Anon Cookie Snack module Recipe def slice :: end end class Cookie < Snack # same as before End c1 = Cookie.new c1.extend Recipe c1.slice Recipe -slice methods
  • 8. extend class with Module c1 Instance methods of the module are available as class methods of the class. Like class methods, except loosely coupled. Cookie Snack module Recipe def slice :: end end class Cookie extend Recipe end Cookie.slice Anon Recipe -slice methods Class
  • 9. include Module in class c1 Class Instance methods of the module are available as instance methods of the class. Like OO inheritance, except loosely coupled. Done by “inserting” an anonymous class in the middle of the object’s class hierarchy. Cookie Snack Anon Recipe -slice methods module Recipe def slice :: end end class Cookie < Snack include Recipe # same as before End c1 = Cookie.new c1.slice c1.flavor