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

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
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+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@
 

Kürzlich hochgeladen (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
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
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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, ...
 
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
 
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
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
+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...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 

Ruby object model