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

Aprensentacao oo-trincheiras

Notas do Editor

  • #5 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
  • #6 Estudo ? Pragmatismo ?
  • #7 É daqueles que nasceu pra guerra ?
  • #10 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
  • #11 Você larga aquela coisa estranha que você fazia, estruturada.. Arquivos gigantes e etc e começa a trilhar um caminho mais simples.
  • #12 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 ?
  • #13 https://gist.github.com/HigorCesar/5113912
  • #14 Estou fazendo tudo certo! Muito esperto.. Toma-lhe herança
  • #16 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
  • #17 Agora já conseguimos identificar problemas, relacionar princípios e estamos evoluindo..
  • #18 Pensa.. medita.. Consulta aos búzios... E assim vai
  • #19 http://bit.ly/YPq7Ft
  • #21 Vamos falar de coisas importantes..
  • #23 Proximo: Então você está me dizendo que...Depois exibir os padrões mais usadoshttp://brizeno.wordpress.com/category/padroes-de-projeto/memento/
  • #26 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..
  • #27 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 ?
  • #28 Fique atento aos sinais..
  • #30 Adicionar exemplos de código
  • #31 Foto de vitória só se entregar software...