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
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
380
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
200
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
540
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
Package Management Learnings from Homebrew
mikemcquaid
0
200
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
930
Basic Architectures
denyspoltorak
0
660
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
590
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.3k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2k
Building Applications with DynamoDB
mza
96
6.9k
Automating Front-end Workflow
addyosmani
1371
200k
Everyday Curiosity
cassininazir
0
130
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
62
Building Adaptive Systems
keathley
44
2.9k
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