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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Gabriel Sobrinho
July 28, 2012
Programming
4
800
SOLID
Princípios para um melhor design de código
Gabriel Sobrinho
July 28, 2012
Tweet
Share
More Decks by Gabriel Sobrinho
See All by Gabriel Sobrinho
Arquiteturas Multi-Tenant RubyConf 2022
sobrinho
0
230
Introduction to Go
sobrinho
1
120
Casos de otimização em aplicações Ruby on Rails
sobrinho
0
310
Introduction to automated tests (Goiania)
sobrinho
0
150
Introduction to automated tests
sobrinho
3
240
Otimização de Aplicações RoR
sobrinho
1
280
Introdução ao React (Simplificado)
sobrinho
0
150
Algoritmos de pesquisa
sobrinho
0
680
Introdução ao Docker
sobrinho
1
120
Other Decks in Programming
See All in Programming
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.3k
Vibe codingでおすすめの言語と開発手法
uyuki234
0
220
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
610
高速開発のためのコード整理術
sutetotanuki
1
380
Package Management Learnings from Homebrew
mikemcquaid
0
200
CSC307 Lecture 04
javiergs
PRO
0
650
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
420
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
190
AgentCoreとHuman in the Loop
har1101
5
220
CSC307 Lecture 06
javiergs
PRO
0
680
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
240
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Visualization
eitanlees
150
17k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.5k
30 Presentation Tips
portentint
PRO
1
210
Why Our Code Smells
bkeepers
PRO
340
58k
Faster Mobile Websites
deanohume
310
31k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
170
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