Aprensentacao oo-trincheiras
-
Upload
higor-cesar -
Category
Technology
-
view
465 -
download
0
Transcript of Aprensentacao oo-trincheiras
![Page 1: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/1.jpg)
Orientação a objetos
nas trincheiras.Higor Ramos
![Page 2: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/2.jpg)
About(me)• Desenvolvedor na Lambda3• 7 anos de programação• Final de semana é tempo de camping e trekking!• 48GBs de música e contando..
![Page 3: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/3.jpg)
Lambda Lambda Lambda!“Não existe outro lugar onde eu tenha vontade de trabalhar que não seja a Lambda3.”
![Page 4: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/4.jpg)
Orientação a objetos
![Page 5: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/5.jpg)
Contextualizando..• Experiência em desenvolvimento de aplicações LoB• Conhecimento adquirido através dos muitos livros• Etapas do aprendizado de orientação a objetos
![Page 6: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/6.jpg)
E você, como se preparou ?
![Page 7: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/7.jpg)
![Page 8: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/8.jpg)
![Page 9: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/9.jpg)
Baby steps
![Page 10: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/10.jpg)
Aprendendo sobre objetos• Você aprende sobre classes, objetos, métodos,
interfaces...• Domínio sobre keywords que promovem um júnior a
pleno• Da noite pro dia tudo virou um objeto!
![Page 11: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/11.jpg)
![Page 12: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/12.jpg)
Quem disse que seria fácil ?• Classes gigantes!• Métodos com várias responsabilidades• Efeitos colaterais por todos os lados!• Separação de responsabilidades ? Onde ? O que ?
![Page 13: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/13.jpg)
Herança
![Page 14: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/14.jpg)
Codigo! Codigo! Codigo!
![Page 15: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/15.jpg)
![Page 16: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/16.jpg)
…E ai você decide mostrar seus códigos para um
programador mais experiente!
![Page 17: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/17.jpg)
![Page 18: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/18.jpg)
Princípios
DRY
Injeção de dependência
Inversão de controle
Aberto-fechado
Keep it simple stupidResponsabilidade única
Substituição de liskovYAGNI
One reason to change
Composição sobre herança
Programar para interfaces
Low coupling
![Page 19: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/19.jpg)
Princípios• 143 princípios OO• identificar problemas de design• Não é difícil relacionar um ao outro
![Page 20: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/20.jpg)
Febre de princípiosDesign de um método para realizar pagamento com cartão de crédito demora no mínimo duas horas!
![Page 21: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/21.jpg)
![Page 23: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/23.jpg)
Status• Os membros não são mais todos públicos• Métodos não possuem mais que 40 linhas.
![Page 24: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/24.jpg)
![Page 25: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/25.jpg)
Supletivo, supletivo, supletivo...• Experiência com diferentes problemas• Discussões técnicas para elaboração de design• Designs propostos são bem aceitos pelo time• Aventuras pelos padrões de projetos
![Page 26: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/26.jpg)
![Page 27: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/27.jpg)
Padrões de projeto
![Page 28: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/28.jpg)
Uma lista grande de padrões masnem todos são realmente usados..
![Page 29: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/29.jpg)
Sem violar o encapsulamento, capturar e externalizarum estado interno de um objeto, de maneira que o objetopossa ser restaurado para esse estado mais tarde
![Page 30: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/30.jpg)
![Page 31: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/31.jpg)
Padrões de projeto• Aprenda diversos cenários de utilização• Resolva problemas aplicando parte do padrão• Implemente padrões em linguagens diferentes• Prototype,decorator,facade,iterator,observer,template
method, factory method
![Page 32: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/32.jpg)
Padrões de Arquitetura de Aplicações Corporativas
Sim, ainda vale a pena conhecer alguns desses padrões!
![Page 33: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/33.jpg)
Padrões de Arquitetura de Aplicações Corporativas
• Capacidade de entender um pouco mais de frameworks e APIs famosas(Active Record,NET).
• Técnicas explicadas de forma simples• Exercício de entendimento OO
![Page 34: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/34.jpg)
Software Legado
![Page 35: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/35.jpg)
Código legado
“To me, legacy code is simply code without tests.”Michael C Feathers
“Any code that has been delivered”Autor desconhecido
![Page 36: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/36.jpg)
Código legado• Se o código legado não é OO o meu código também
não pode ser OO.• O banco de dados é relacional então não posso
construir software OO• O código legado não possui testes unitários, por isso eu
não consigo escrever
![Page 37: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/37.jpg)
Modelo anêmico
![Page 38: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/38.jpg)
Modelo anêmico
“The fundamental horror of this anti-pattern is that it's so contrary to the basic idea of object-oriented design; which is to combine data and process together.
Martin fowler
![Page 39: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/39.jpg)
Codigo! Codigo! Codigo!
![Page 40: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/40.jpg)
Origem do modelo anêmico• Falha na separação de responsabilidades• Granularidade exagerada• Falha no encapsulamento de comportamento• Falha no entendimento do domínio
![Page 41: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/41.jpg)
![Page 42: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/42.jpg)
![Page 43: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/43.jpg)
Camada anticorrupção“É uma forma de isolar a comunicação entre o sistema sendo construído com sistemas legados através da criação de uma fachada interna.”
a.k.a encapsular gambiarra
![Page 44: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/44.jpg)
Camada anticorrupção
“The public interface of the ANTICORRUPTION LAYER usually appears as a set of SERVICES, although occasionally it can take the form of an ENTITY.”
Eric Evans
![Page 45: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/45.jpg)
Tecnicamente falando..• Facades e Adapters(Gama, 1995)• Tradutores• Mecanismo de comunicação
![Page 46: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/46.jpg)
Codigo! Codigo! Codigo!
![Page 47: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/47.jpg)
Outros exemplos..• Ferramenta ORM(hibernate, entity framework)• Exposição de API Rest
![Page 48: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/48.jpg)
Refatoração
![Page 49: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/49.jpg)
RefatoraçãoSabe aquela história que você passa a maior parte do tempo lendo código ?
É verdade!
![Page 50: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/50.jpg)
Testes!Teste seu código!
![Page 51: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/51.jpg)
Testes unitários• Planejamento antes de código• Desacoplamento• Separação de responsabilidades• Encapsulamento adequado
![Page 52: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/52.jpg)
Testes• Testes unitários• Testes integrados• Testes, testes e testes!
![Page 53: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/53.jpg)
Cheiro ruim em código
![Page 54: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/54.jpg)
Exemplos..• Método longo demais• Classe longa demais• Parâmetros demais• Intimidade indevida• Classe preguiçosa
![Page 55: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/55.jpg)
Anti-padrões
São soluções reutilizáveis para problemas recorrentes em determinados contextos de desenvolvimento de software.
#SóQueNão
![Page 56: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/56.jpg)
Anti-padrões• Modelo anêmico• Objeto deus• Poltergeists• Problema do yo-yo• Programação orientada a exceções
![Page 57: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/57.jpg)
Linguagem ubíqua“Uma linguagem única entre todos os envolvidos no projeto baseada no domínio.”
Eric Evans
![Page 58: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/58.jpg)
Ao infinito e além..
![Page 59: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/59.jpg)
YAGNI“Somente implemente funcionalidades quando você realmente precisar delas, nunca quando você achar que vai precisar.”
Ron jeffries
![Page 60: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/60.jpg)
![Page 61: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/61.jpg)
Aplicando o princípio de pareto..
• Princípios OO• Camada anticorrupção• Testes unitários• Linguagem ubíqua• Software em produção!
![Page 62: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/62.jpg)
Quais passos eu estou seguindo..• Trabalhe com uma boa equipe!• Leia os clássicos!• Proponha soluções, compartilhe código• Aprenda a resolver problemas de formas diferentes• Participe de dojos, trabalhe em par
![Page 63: Aprensentacao oo-trincheiras](https://reader036.fdocument.pub/reader036/viewer/2022062300/55864092d8b42a4a348b4dc7/html5/thumbnails/63.jpg)