SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
The Ruby Object Model
a presentation for the Nashville Software School
24 June, 2013
WHOAMI?
● Max Beizer => jr. developer @ Centresource
● NSS Cohort One graduate
● maxbeizer on:
○ twitter
○ github
○ irc
Credit Where Credit is Due...
Practical Object-Oriented
Design in Ruby
Metaprogramming Ruby
Paolo PerrottaSandi Metz
Credit Where Credit is Due...
Eliza Brock
elizabrocksoftware.com
Ruby and Objects
In Ruby, everything is an object.*
* except when it isn't
see also: ancestors
Every Object "Returns to the Source"
BasicObject
Why do I care?
Why do I care?
Why does salutations respond to length and reverse, but not foo?
Remember:
ruby-doc.org -- String
ruby-doc.org -- String
no love for foo
:(
salutations
salutations.foo def foo
end
salutations
salutations.foo def foo
end
salutations
salutations.foo def foo
end
String
Object
BasicObject
def foo
end
def foo
end
def foo
end
salutations
salutations.foo def foo
end
String
Object
BasicObject
def foo
end
def foo
end
def foo
end
NoMethodError
Impress Your Friends:
Lookup what method_missing does.
salutations
salutations.foo def foo
end
String
Object
BasicObject
def foo
end
def foo
end
def foo
end
NoMethodError
+
method_missing
This Guy Says:
"Doesn't this make Ruby soooo much slower
than #{my favorite compiled language}?"
My Retort:
Moving on...
salutations
salutations.length def length
end
salutations
salutations.length def foo
end
String
Object
BasicObject
def length
end
salutations.length == 13
Uncle Max's Story Time...
Inheritance
or how I learned to stop worrying and love method lookup
A Simple Ruby Class: You
It's Alive!!!!!1
you == NSS Student
me != NSS Student
eliza != NSS Student
you == NSS Student
me == junior dev
eliza == accomplished professional
You
Me
Eliza
We All Have:
● name
● experience
● job(?)
Naïve Implementation
(A.K.A. my middle names)
D.R.Y. ?
Naïve Implementation
(A.K.A. my middle names)
D.R.Y.
Sopping wet
Naïve Implementation
(A.K.A. my middle names)
What if the requirements
changed and "experience"
were henceforth to be known
as "awesome_points" ...?
What about specialization?
Why have three classes that
do the same thing?
Inheritance Is All About Commonality
● Share common methods, attributes to keep it DRY
● Generalization vs. Specialization
● Abstract vs. Concrete
use the object model/lookup
Specialization
Same Method Name, Different Result
Different Methods
Generalization
NssStudent is a ...?
JrDev is a ...?
AccomplishedProfessional is a ...?
it fits!!!!!!!1
win
shared, generalized code
extracted/abstracted
specialized code
call to super
invokes the method in the super class
overrides the superclass
The Abstract Class in Inheritance
part of the lookup chain
generally never to be instantiated on its own
Inheritance: is it right for you?
Is it right for your problem set?
Ask yourself: is this an isa?
Inheritance: is it right for you?
Is it right for your problem set?
caveat emptor
developer-or
Inheritance: is it right for you?
Is it right for your problem set?
put another way: not everything is a nail
Rails-Colored Glasses
Way back when I was first learning Ruby
(pause for laughter)
Modules
were all like:
Nowadays
Modules
are all like:
SoftWhere Co. App.
SoftWhere Co. App.
SoftWhere Co. App.
SoftWhere Co. App.
Officeable's methods become instance
methods for the Executive,
MiddleManagement, and Developer
models.
win
SoftWhere Co. App.
All three methods have a single,
authoritative place where they live.
That's D.R.Y.
win
SoftWhere Co. App.
not so much
What if I create a
new class that needs
to include Officeable
but I forget about or
don't know about
'amount_of_unease'
???
SoftWhere Co. App.
win
The next developer
receives a helpful
error message.
Novel concept.
SoftWhere Co. App.
Side note: you'll probably want to add a guard to make sure
amount_of_unease is not zero.
A Rails Template Pattern
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
Make sure lib is in the load path
image credits:
● http://www.newgre.org/admissions/applying-doctoral-programs-it%E2%80%99s-match/attachment/square-peg-in-a-round-
hole/
● amazon.com
● elizabrocksoftware.com
● http://www.hsxdude.com/
● http://pragdave.pragprog.com/pragdave/2007/05/rails_is_love.html
● http://creepypasta.wikia.com/wiki/File:Creepy-van.jpg
● http://juliasetssail.blogspot.com/2010_04_01_archive.html
● http://knowyourmeme.com/memes/haters-gonna-hate
● http://blog.ausweb.com.au/system-administrator-appreciation-day/
● http://worldtruth.tv/philosophy-the-matrix-return-to-the-source/
the preceding presentation is intended for educational purposes only and should not be viewed
by anyone anywhere, in perpetuity, throughout the universe

Weitere ähnliche Inhalte

Ähnlich wie Ruby object model

Ruby for PHP developers
Ruby for PHP developersRuby for PHP developers
Ruby for PHP developers
Max Titov
 
OO and Rails...
OO and Rails... OO and Rails...
OO and Rails...
adzdavies
 
Ruby tutorial
Ruby tutorialRuby tutorial
Ruby tutorial
knoppix
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
myuser
 

Ähnlich wie Ruby object model (20)

OOP vs COP
OOP vs COPOOP vs COP
OOP vs COP
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developers
 
Day 1 - Intro to Ruby
Day 1 - Intro to RubyDay 1 - Intro to Ruby
Day 1 - Intro to Ruby
 
Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008
 
Ruby for PHP developers
Ruby for PHP developersRuby for PHP developers
Ruby for PHP developers
 
OO and Rails...
OO and Rails... OO and Rails...
OO and Rails...
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in Ruby
 
Intro to openFrameworks
Intro to openFrameworksIntro to openFrameworks
Intro to openFrameworks
 
Better Swift from the Foundation up #tryswiftnyc17 09-06
Better Swift from the Foundation up #tryswiftnyc17 09-06Better Swift from the Foundation up #tryswiftnyc17 09-06
Better Swift from the Foundation up #tryswiftnyc17 09-06
 
Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!Simple Ruby DSL Techniques: Big Project Impact!
Simple Ruby DSL Techniques: Big Project Impact!
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Code
 
Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010Meta Programming in Ruby - Code Camp 2010
Meta Programming in Ruby - Code Camp 2010
 
Look beyond PHP
Look beyond PHPLook beyond PHP
Look beyond PHP
 
C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem
 
Learning through answering
Learning through answeringLearning through answering
Learning through answering
 
Lambda The Extreme: Test-Driving a Functional Language
Lambda The Extreme: Test-Driving a Functional LanguageLambda The Extreme: Test-Driving a Functional Language
Lambda The Extreme: Test-Driving a Functional Language
 
Ruby tutorial
Ruby tutorialRuby tutorial
Ruby tutorial
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
 
Go for Rubyists. August 2018. RUG-B Meetup
Go for Rubyists. August 2018. RUG-B MeetupGo for Rubyists. August 2018. RUG-B Meetup
Go for Rubyists. August 2018. RUG-B Meetup
 

Kürzlich hochgeladen

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

Ruby object model