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
SOLID
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Gabriel Sobrinho
July 28, 2012
Programming
810
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SOLID
Princípios para um melhor design de código
Gabriel Sobrinho
July 28, 2012
More Decks by Gabriel Sobrinho
See All by Gabriel Sobrinho
Arquiteturas Multi-Tenant RubyConf 2022
sobrinho
0
240
Introduction to Go
sobrinho
1
130
Casos de otimização em aplicações Ruby on Rails
sobrinho
0
320
Introduction to automated tests (Goiania)
sobrinho
0
170
Introduction to automated tests
sobrinho
3
250
Otimização de Aplicações RoR
sobrinho
1
290
Introdução ao React (Simplificado)
sobrinho
0
160
Algoritmos de pesquisa
sobrinho
0
690
Introdução ao Docker
sobrinho
1
130
Other Decks in Programming
See All in Programming
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
700
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.5k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
180
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
170
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
250
JavaDoc 再入門
nagise
1
360
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
さぁV100、メモリをお食べ・・・
nilpe
0
140
Lessons from Spec-Driven Development
simas
PRO
0
210
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
250
CSC307 Lecture 17
javiergs
PRO
0
320
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leo the Paperboy
mayatellez
7
1.8k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
We Have a Design System, Now What?
morganepeng
55
8.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
RailsConf 2023
tenderlove
30
1.5k
Why Our Code Smells
bkeepers
PRO
340
58k
Transcript
SOLID princípios para um melhor design de código 1
WHO ARE WE? • @Sobrinho • Co-founder at Code5 •
Co-founder at Nohup • Co-founder at Hite • Software Architect • @MarceloCajueiro • Co-founder at Code5 • Project Leader at Nohup • Software Engineer 2
O QUE É SOLID? 3
POO 4
ORIENTAÇÃO A OBJETO Quais suas vantagens? 5
POO MAL FEITA É O MESMO QUE PROCEDURAL 6
HISTÓRIA • Introduzida pelo Uncle Bob (Robert Martin) em 2000
• Inspirado no subaproveitamento da POO • Com foco principal no acoplamento 7
SOLID • SRP - Single Responsibility Principle • OCP -
Open/Closed Principle • LSP - Liskov Substitution Principle • ISP - Interface Segregation Principle • DIP - Dependency Inversion Principle 8
SINGLE RESPONSIBILITY PRINCIPLE • Uma entidade (classe, método, módulo) deve
ter uma única responsabilidade • Responsabilidade pode ser definida como “razão para mudar” 9
Código ruim SRP 10
Aplicando o SRP SRP 11
OPEN-CLOSED PRINCIPLE (INICIALMENTE) • Uma classe deve estar aberta para
extensão mas fechada para modificação • Alterar a classe apenas para arrumar bugs • Novas funcionalidades são adicionadas em heranças 12
OPEN-CLOSED PRINCIPLE (ATUALMENTE) • Uma classe deve manter a sua
interface (API pública) • A implementação pode ser alterada livremente 13
Implementação mudou mas a interface (API pública) permeneceu OCP 14
LISKOV SUBSTITUTION PRINCIPLE • Deve ser possível substituir uma classe
por suas classes derivadas em qualquer ponto do código • As propriedades do programa não devem ser alteradas para isso acontecer 15
Pode-se usar qualquer uma das heranças e não irá quebrar
a classe que depende da interface (API pública) LSP 16
INTERFACE SEGREGATION PRINCIPLE • Classes não devem ser obrigadas a
depender de interfaces que elas não utilizam • Deve-se usar interfaces concisas, com apenas o que é realmente é usado • O SRP resolve este problema 17
Classe bala de prata ISP 18
Aplicando o SRP, se aplica o ISP ISP 19
DEPENDENCY INVERSION PRINCIPLE • Módulos de alto nível não devem
depender de módulos de baixo nível, ambos devem depender de abstrações (interface) • Abstrações não devem depender de detalhes, detalhes devem depender de abstrações 20
Código sem DIP (fortemente acoplado) DIP 21
E se eu quiser fazer cache ao invés de salvar
no banco de dados? DIP 22
Isso parece bom? DIP 23
Bye bye acoplamento DIP 24
SOLID • SRP - Single Responsibility Principle • OCP -
Open/Closed Principle • LSP - Liskov Substitution Principle • ISP - Interface Segregation Principle • DIP - Dependency Inversion Principle 25
DÚVIDAS? 26
REFERÊNCIAS • Edmilson Filho: http://www.slideshare.net/EdmilsonFilho2/princpios-solid-12117410 • Lucas Hungaro: http://www.slideshare.net/lucashungaro/solid-atravs-de-bdd-um-guia-prtico-para-rubistas •
Uncle Bob: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod • Vinicius Quaiato: http://viniciusquaiato.com/blog/palestra-orientacao-a-objetos-e-principios-solid-slides-e-demos/ • Wikipedia: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) 27