SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Orientação a objetos
     nas trincheiras.
               Higor Ramos
About(me)
•   Desenvolvedor na Lambda3
•   7 anos de programação
•   Final de semana é tempo de camping e trekking!
•   48GBs de música e contando..
Lambda Lambda Lambda!
“Não existe outro lugar onde eu tenha vontade de
trabalhar que não seja a Lambda3.”
Orientação a objetos
Contextualizando..
• Experiência em desenvolvimento de aplicações LoB
• Conhecimento adquirido através dos muitos livros
• Etapas do aprendizado de orientação a objetos
E você, como se preparou ?
Baby steps
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!
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 ?
Herança
Codigo! Codigo! Codigo!
Princípios
                                  One reason to change
      Responsabilidade única           Keep it simple stupid
Programar para interfaces
                               YAGNI
 Injeção de dependência                Substituição de liskov

      DRY       Inversão de controle
                                       Low coupling
       Aberto-fechado
                          Composição sobre herança
Princípios
• 143 princípios OO
• identificar problemas de design
• Não é difícil relacionar um ao outro
Febre de princípios
Design de um método para realizar pagamento com
cartão de crédito demora no mínimo duas horas!
Como ficou o design...


     http://bit.ly/YPq7Ft
Status
• Os membros não são mais todos públicos
• Métodos não possuem mais que 40 linhas.
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
Padrões de projeto
Uma lista grande de padrões mas
nem todos são realmente usados..
Sem violar o encapsulamento, capturar e externalizar
um estado interno de um objeto, de maneira que o objeto
possa ser restaurado para esse estado mais tarde
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
Padrões de Arquitetura de Aplicações Corporativas




Sim, ainda vale a pena conhecer alguns desses padrões!
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
Software Legado
Código legado

“To me, legacy code is simply code without tests.”
                                     Michael C Feathers



“Any code that has been delivered”
                                     Autor desconhecido
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
Modelo anêmico
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
Codigo! Codigo! Codigo!
Origem do modelo anêmico
•   Falha na separação de responsabilidades
•   Granularidade exagerada
•   Falha no encapsulamento de comportamento
•   Falha no entendimento do domínio
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
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
Tecnicamente falando..
• Facades e Adapters(Gama, 1995)
• Tradutores
• Mecanismo de comunicação
Codigo! Codigo! Codigo!
Outros exemplos..
• Ferramenta ORM(hibernate, entity framework)
• Exposição de API Rest
Refatoração
Refatoração
Sabe aquela história que você passa a maior parte do
tempo lendo código ?
Teste Testes!
      seu código!
Testes unitários
•   Planejamento antes de código
•   Desacoplamento
•   Separação de responsabilidades
•   Encapsulamento adequado
Testes
• Testes unitários
• Testes integrados
• Testes, testes e testes!
Cheiro ruim em código
Exemplos..
•   Método longo demais
•   Classe longa demais
•   Parâmetros demais
•   Intimidade indevida
•   Classe preguiçosa
Anti-padrões
São soluções reutilizáveis para problemas recorrentes em
determinados contextos de desenvolvimento de software.
Anti-padrões
•   Modelo anêmico
•   Objeto deus
•   Poltergeists
•   Problema do yo-yo
•   Programação orientada a exceções
Linguagem ubíqua
“Uma linguagem única entre todos os envolvidos no
projeto baseada no domínio.”
                                           Eric Evans
Ao infinito e além..
YAGNI
“Somente implemente funcionalidades quando você
realmente precisar delas, nunca quando você achar que
vai precisar.”
                                             Ron jeffries
Aplicando o princípio de pareto..
•   Princípios OO
•   Camada anticorrupção
•   Testes unitários
•   Linguagem ubíqua
•   Software em produção!
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
www.lambda3.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Rodrigo Vieira
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...tdc-globalcode
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de ProgramaçãoNatanael Simões
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Raphael Paiva
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- EntitiesMarcius Brandão
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - IntroduçãoHélio Costa e Silva
 
Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfAntonio Maniero
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 

Was ist angesagt? (13)

PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
Dark Java (2009)
Dark Java (2009)Dark Java (2009)
Dark Java (2009)
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
DDD - Step by Step
DDD - Step by StepDDD - Step by Step
DDD - Step by Step
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- Entities
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - Introdução
 
Escrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConfEscrevendo C# moderno 2019 - MVPConf
Escrevendo C# moderno 2019 - MVPConf
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 

Andere mochten auch

Andere mochten auch (7)

Every fifteen minutes
Every fifteen minutesEvery fifteen minutes
Every fifteen minutes
 
Twitter
TwitterTwitter
Twitter
 
Evolucao stc
Evolucao stcEvolucao stc
Evolucao stc
 
Planetario
PlanetarioPlanetario
Planetario
 
FUTURE
FUTUREFUTURE
FUTURE
 
Oxfam
OxfamOxfam
Oxfam
 
San Juan Magazine Edición 2
San Juan Magazine Edición 2San Juan Magazine Edición 2
San Juan Magazine Edición 2
 

Ähnlich wie Orientação a objetos nas trincheiras

Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoSamuel David
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Community webcast
Community webcastCommunity webcast
Community webcastYan Justino
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passosGabrielly Gomes
 
Palestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkPalestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkJosemar Davi Luedke
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 

Ähnlich wie Orientação a objetos nas trincheiras (20)

Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Clean code
Clean codeClean code
Clean code
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
8 d iniciando_iphone_ios4
8 d iniciando_iphone_ios48 d iniciando_iphone_ios4
8 d iniciando_iphone_ios4
 
Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementado
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Community webcast
Community webcastCommunity webcast
Community webcast
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Beleza
BelezaBeleza
Beleza
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Anti-patterns
Anti-patternsAnti-patterns
Anti-patterns
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
 
Palestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o ZeanworkPalestra na Faccat sobre o Zeanwork
Palestra na Faccat sobre o Zeanwork
 
Python para devs
Python para devsPython para devs
Python para devs
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 

Orientação a objetos nas trincheiras

Hinweis der Redaktion

  1. Experiência em desenvolvimento de aplicações LoBO que deu certo, o que deu errado. Liberdade para experimentarLivros -Até onde os livros podem te levar
  2. Estudo ? Pragmatismo ?
  3. É daqueles que nasceu pra guerra ?
  4. Você aprende sobre classes, objetos, métodos,interfaces e etc - Você cursa aquela turma de OO ou ainda compra um livro sobre objetos..Ou ando lendo o macorati falando de OO com VB.NET e logo você percebeQue todos ao seu redor ou em fóruns falam em objetos e que só com eles você será um profissional.KeywordsClasse,interface, acoplamento,reuso,accessors,encapsulamento e etc... Tudo deixa a coisa bem mais profissional não é ?Tudo vira um objetoE você contrai a febre de objetos, você não consegue mais olhar para o mundo e não enxergar objetos e mais objetos
  5. Você larga aquela coisa estranha que você fazia, estruturada.. Arquivos gigantes e etc e começa a trilhar um caminho mais simples.
  6. Herança define um relacionamento é um! Você acabou de criar uma forma de acoplamento muito forte, muito mesmo! E provavelmente quebrou parte do encapsulamento. Porque ? Exemplo de código!Herança! Nesse momento você deve estar usando composição na maioria dos cenários, até porque você nem pensa em herança se o princípio de substituição de liskov não for respeitado. Não é claro ?
  7. https://gist.github.com/HigorCesar/5113912
  8. Estou fazendo tudo certo! Muito esperto.. Toma-lhe herança
  9. Imagem de alguém infartando ou desmaiando..Então se você der sorte você escuta sobre dezenas de princípios e até mesmo sobre os tais padrões de projetosCuidado com o que vcs exibem por ai pessoal..rs
  10. Agora já conseguimos identificar problemas, relacionar princípios e estamos evoluindo..
  11. Pensa.. medita.. Consulta aos búzios... E assim vai
  12. http://bit.ly/YPq7Ft
  13. Vamos falar de coisas importantes..
  14. Proximo: Então você está me dizendo que...Depois exibir os padrões mais usadoshttp://brizeno.wordpress.com/category/padroes-de-projeto/memento/
  15. Capacidade de entender um pouco mais de frameworks e APIs famosas.-Entender como funciona o activerecord/parte do ADO.NETTécnicas explicadas de forma simplesLazyloading, desenvolvimento em camadas..
  16. Em algum momento todo mundo trabalha com software legadoÉ ai que o bicho pega, afinal de conta agora que os conhecimentos de design São colocados a prova..Quem ai trabalha em algum momento com alguma coisa legada ? Sistemas, banco de dados ou API cliente ?
  17. Fique atento aos sinais..
  18. Adicionar exemplos de código
  19. Foto de vitória só se entregar software...