aprensentacao oo-trincheiras
TRANSCRIPT
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!
…E ai você decide mostrar seus códigos para um
programador mais experiente!
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
Princípios• 143 princípios OO• identificar problemas de design• Não é difícil relacionar um ao outro
Febre de princípiosDesign de um método para realizar pagamento com cartão de crédito demora no mínimo duas horas!
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 masnem todos são realmente usados..
Sem violar o encapsulamento, capturar e externalizarum estado interno de um objeto, de maneira que o objetopossa 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çãoSabe aquela história que você passa a maior parte do tempo lendo código ?
É verdade!
Testes!Teste 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.
#SóQueNão
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