Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Less Abstract! Surprising effects of expressing...
Search
Ivan Nemytchenko
November 18, 2019
Technology
1
610
Less Abstract! Surprising effects of expressing OOP in pictures
Ivan Nemytchenko
November 18, 2019
Tweet
Share
More Decks by Ivan Nemytchenko
See All by Ivan Nemytchenko
Code Topology Notation
inem
0
110
The Shape of a Service Object
inem
0
1k
The Curse of Service Object
inem
0
310
Modern Make for modern (Rails) programmers
inem
0
84
Откуда берется сложность в Rails-проектах и куда бы её деть?
inem
0
280
Rails без боли и оверинжиниринга
inem
0
480
Painless Rails: наводим порядок в контроллерах
inem
0
270
Pure functions and side effects
inem
0
49
Solving architectural problems with OOP in pictures
inem
1
5.9k
Other Decks in Technology
See All in Technology
C++26アップデート 2025-03
faithandbrave
0
1k
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
130
SDカードフォレンジック
su3158
1
640
AIでめっちゃ便利になったけど、結局みんなで学ぶよねっていう話
kakehashi
PRO
1
360
PostgreSQL Log File Mastery: Optimizing Database Performance Through Advanced Log Analysis
shiviyer007
PRO
0
120
Making a MIDI controller device with PicoRuby/R2P2 (RubyKaigi 2025 LT)
risgk
1
300
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
780
意思決定を支える検索体験を目指してやってきたこと
hinatades
PRO
0
250
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
880
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
13
4.2k
Writing Ruby Scripts with TypeProf
mame
0
300
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
4
460
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Code Reviewing Like a Champion
maltzj
522
40k
Building an army of robots
kneath
304
45k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Transcript
Less Abstract! Effects of expressing OOP in pictures Ivan Nemytchenko
@inemation inem.at
Who is this guy? • Educator • Freelance consultant •
Complexity fighter • GitLab fan • Serbian Siberian • inem.at • @inemation
Serbian Siberian ??
I am Russian
None
None
Omsk is in Siberia
I live in Serbia
Serbia != Siberia
Serbia != Siberia != Syria
What’s the problem? Abstractions on top of abstractions on top
of other abstractions!
What’s the problem? Very hard to see the big picture
in real projects
What’s the problem? Very hard to see the big picture
in real projects CRC Cards
What’s the problem? Very hard to see the big picture
in real projects UML :(
What to expect here? 1. It is gonna be fun!
2. You’ll become better at: • Learning, teaching, explaining complex concepts • Visualizing big picture • Finding architecture flaws •Tracking dynamics
OOP in pictures Foundation Advanced concepts Using in practice
How to illustrate Dependency Injection * with one picture **
so that everyone understands ?
“Smart kettle” task Boil water correctly and safely! 1. No
code 2. Just classes 3. And their methods
Artistic soldiers method
Kettle components (objects) small dudes == objects
Kettle components (objects) small dudes == objects
Kettle components (objects) small dudes == objects
Kettle components (objects) small dudes == objects
Objects with methods! arms == methods
A method number of fingers == number of arguments
Instance variables Stored inside the brain
Instance variables Can be reused later
But how other stuff is going to look like?…
Returning results door on the body
Private methods “internal arms”
Exception puking
Basic anti-patterns
Too many arguments
Too many methods
Too long methods
Too many instance variables
Too much conditional logic in methods Swallen arms
Too much of everything!!!
OOP in pictures Foundation Advanced concepts Using in practice
Polymorphism same number of hands with same number of fingers
None
None
Classes A spawning platforms
Classes A spawning platform
same topology Object & classes have the
Topology Cups and donuts share the same topology
same topology Object & classes have the
Execution flow
Execution flow
Execution flow
Execution flow == Rube Goldberg machine
Execution flow
Execution flow
Execution flow
Dependencies have to remember about classes to use them
Dependencies
Side effects
Dependency Injection Instead of remembering thing we pass them as
arguments
None
OOP in pictures Foundation Advanced concepts Using in practice
Visual language!
None
None
None
None
None
None
None
None
None
None
None
Big picture
Dynamic anti-patterns
Dynamic anti-patterns
Dynamic anti-patterns
Dynamic anti-patterns
Dynamic anti-patterns
None
None
None
None
None
None
None
OOP in pictures Foundation Advanced concepts Using in practice
None
– George Box “All models are wrong but some are
useful.”
• Big picture • Modelling • Documenting • Sharing knowledge
• Explaining What can you use it for
Ivan Nemytchenko, inem.at, @inemation RubyConf 2019 Questions?