SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à 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
 

Similaire à 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
 

Dernier

Dernier (20)

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
 
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...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
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...
 
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
 
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
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
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?
 
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...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Ruby object model