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
Elegant Objects and Cactoos
Search
Filipe Freire
December 21, 2017
Programming
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Elegant Objects and Cactoos
Overview of the EO paradigm and small overview of the Cactoos library for Porto Codes Meetup
Filipe Freire
December 21, 2017
More Decks by Filipe Freire
See All by Filipe Freire
Deep Testing
filipe
0
180
Finding Tranquility
filipe
0
150
Quality Foundations
filipe
0
180
Tacit CSS Framework
filipe
0
470
Quality from the start
filipe
0
200
Tacit
filipe
0
220
Waiting is boring
filipe
0
770
You don't need a DevOps to "be DevOps"
filipe
0
400
Other Decks in Programming
See All in Programming
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.9k
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
210
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.7k
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
7
2.9k
継続モナドとリアクティブプログラミング
yukikurage
3
620
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
120
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
200
自作OSでスライド発表する
uyuki234
1
3.9k
どこまでゆるくて許されるのか
tk3fftk
0
520
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
160
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
Abbi's Birthday
coloredviolet
3
8.7k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
380
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Transcript
Elegant objects & Cactoos Filipe Freire 21 December 2017
Quick intro Learner, tester, developer, husband OSS contributor 2y work
as a “coding” tester 1y work as a developer Currently @ filfreire.com 2
Elegant Objects 3
It’s an OOP paradigm 4
Book Yegor Bugayenko @yegor256 www.yegor256.com 5
Book Yegor Bugayenko @yegor256 www.yegor256.com Set of recommendations: - Cleaner
code - Better classes - Visible architecture 6
Disclaimer: You can find out more at yegor256.com Youtube @yegor256
and on the EO books. 7
So, what are the recommendations? 8
Getters Setters Mutable objects Static methods Annotations Data Objects Type
Casting Etc. 9
Getters Setters Mutable objects Static methods Annotations Data Objects Type
Casting Etc. 10
Don’t treat objects as data structures bags of data.
Ever. 11
Maintainability > everything else 12
“Objects as living beings” Birth Working life Retirement 13
Some examples… 14
Birth 15
Code Free Constructors 16
17
“Object’s name != job title” 18
Object’s name != job title Meaning: Avoid the use of
“-ER” 19
Helper, Handler, Writer, Reader, Converter, Observer, Listener, Sorter, Encoder, Decoder,
… 20
Helper, Handler, Writer, Reader, Converter, Observer, Listener, Sorter, Encoder, Decoder,
… 21
An object isn’t: 1) A link between worlds 2) A
collection of procedures plus data 22
An object is: 1) Self-sufficient 2) Representative of encapsulated
data 23
A Finder of Prime Numbers vs A List of numbers
that returns only primes 24
Education & Work life 25
No Getters and Setters. Not even once. 26
No Getters and Setters ?! ?! 27
Again, don’t treat objects as bags of data. Ever.
28
Computer-style: 29
Human-style: 30
“An object works by contracts” 31
“An object works by contracts” Always use interfaces 32
Example “I want results for a Tennis match” Tennis_31Feb.xlsx TENNIS.txt
tennis_res.json Sources: … 33
Example “I want results for a Tennis match” Tennis_31Feb.xlsx TENNIS.txt
tennis_res.json Sources: … ExcelTennisMatch TextTennisMatch JsonTennisMatch 34
Example “I want results for a Tennis match” ExcelTennisMatch TextTennisMatch
JsonTennisMatch TennisMatch GameMatch implement extends 35
Excel, Text, Json, etc. Contract stays the same More Decoupling
and more Maintainability 36
“A good object should never change his encapsulated state.” 37
“A good object should never change his encapsulated state.” 38
Be immutable
This can change State is the same 39
Some benefits Thread Safety Avoiding Temporal Coupling Avoiding side effects
Avoiding identity mutability (more at http://yegor256.com/2014/06/09/objects-should-be-immutable.html) 40
Retirement 41
Don’t accept null arguments Don’t return null 42
- Hello, is it a software department? - Yes. -
Let me talk to your employee "Jeffrey" please. - Hold the line please... - Hello. - … 43
- Hello, is it a software department? - Yes. -
Let me talk to your employee "Jeffrey" please. - Hold the line please... - Hello. - Are you NULL? (more at http://www.yegor256.com/2014/05/13/why-null-is-bad.html) 44
There’s more to it, Let’s save it for another talk
45
https://github.com/yegor256/cactoos 46
Useful building blocks from Guava, Apache Commons, JDK + EO
paradigm 47
Meaning… No null No code in constructors No getters and
setters No mutable objects No static methods, not even private ones (among other stuff) 48
Example 1 49
Example 2 50
Example 3 51
Summing up 52
Maintainability 53
–W. Edwards Deming "Build quality into the product rather than
trying to test it in later." 54
Quality from the start Force strict control of code quality.
Ex: Static Analysis -> mandatory 55
Thank you. Questions? filfreire filrfreire filfreire.com 56