Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Elegant Objects and Cactoos
Filipe Freire
December 21, 2017
Programming
0
130
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
Tweet
Share
More Decks by Filipe Freire
See All by Filipe Freire
Deep Testing
filipe
0
41
Finding Tranquility
filipe
0
41
Quality Foundations
filipe
0
36
Tacit CSS Framework
filipe
0
130
Quality from the start
filipe
0
92
Tacit
filipe
0
100
Waiting is boring
filipe
0
260
You don't need a DevOps to "be DevOps"
filipe
0
160
Other Decks in Programming
See All in Programming
Rに管理されてみる
kazutan
0
250
Computer Vision Seminar 1/コンピュータビジョンセミナーvol.1 OpenCV活用
fixstars
0
150
Atomic Design とテストの○○な話
takfjp
2
800
10歳の minne から、これから長く続くプロダクトを作るすべての人へ
tsumichan
9
3.6k
Now in Android Overview
aosa4054
0
390
リーダブルテストコード / #vstat
jnchito
47
35k
FargateとAthenaで作る、機械学習システム
nayuts
0
170
Edge Side Frontend という新領域
mizchi
22
10k
SwiftUIで「意図」を伝える / swiftui_intention
uhooi
2
140
料理の注文メニューの3D化への挑戦
hideg
0
280
ストア評価「2.4」だったCOCOARアプリを1年で「4.4」になんとかした方法@Cloud CIRCUS Meetup #2
1901drama
0
180
読みやすいコード クラスメソッド 2022 年度新卒研修
januswel
0
2.9k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
324
55k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Done Done
chrislema
174
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
14
3.8k
Optimizing for Happiness
mojombo
365
64k
Rebuilding a faster, lazier Slack
samanthasiow
62
7.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
Building Flexible Design Systems
yeseniaperezcruz
310
34k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Making the Leap to Tech Lead
cromwellryan
113
7.4k
Bash Introduction
62gerente
598
210k
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