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

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

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