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
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
700
Introdução ao Docker
sobrinho
1
130
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
510
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.7k
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.3k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
130
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
270
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
950
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
AIエージェントで 変わるAndroid開発環境
takahirom
2
770
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
350
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
210
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
440
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Evolving SEO for Evolving Search Engines
ryanjones
0
250
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
690
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Faster Mobile Websites
deanohume
310
32k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
530
Music & Morning Musume
bryan
47
7.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.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