aprensentacao oo-trincheiras

64
Orientação a objetos nas trincheiras. Higor Ramos

Upload: higor-cesar

Post on 21-Jun-2015

466 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Aprensentacao oo-trincheiras

Orientação a objetos

nas trincheiras.Higor Ramos

Page 2: Aprensentacao oo-trincheiras

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

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

Orientação a objetos

Page 5: Aprensentacao oo-trincheiras

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

E você, como se preparou ?

Page 7: Aprensentacao oo-trincheiras
Page 8: Aprensentacao oo-trincheiras
Page 9: Aprensentacao oo-trincheiras

Baby steps

Page 10: Aprensentacao oo-trincheiras

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
Page 12: Aprensentacao oo-trincheiras

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

Herança

Page 14: Aprensentacao oo-trincheiras

Codigo! Codigo! Codigo!

Page 15: Aprensentacao oo-trincheiras
Page 16: Aprensentacao oo-trincheiras

…E ai você decide mostrar seus códigos para um

programador mais experiente!

Page 17: Aprensentacao oo-trincheiras
Page 18: Aprensentacao oo-trincheiras

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

Princípios• 143 princípios OO• identificar problemas de design• Não é difícil relacionar um ao outro

Page 20: Aprensentacao oo-trincheiras

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
Page 22: Aprensentacao oo-trincheiras

Como ficou o design...

http://bit.ly/YPq7Ft

Page 23: Aprensentacao oo-trincheiras

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
Page 25: Aprensentacao oo-trincheiras

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
Page 27: Aprensentacao oo-trincheiras

Padrões de projeto

Page 28: Aprensentacao oo-trincheiras

Uma lista grande de padrões masnem todos são realmente usados..

Page 29: Aprensentacao oo-trincheiras

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
Page 31: Aprensentacao oo-trincheiras

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

Padrões de Arquitetura de Aplicações Corporativas

Sim, ainda vale a pena conhecer alguns desses padrões!

Page 33: Aprensentacao oo-trincheiras

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

Software Legado

Page 35: Aprensentacao oo-trincheiras

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

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

Modelo anêmico

Page 38: Aprensentacao oo-trincheiras

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

Codigo! Codigo! Codigo!

Page 40: Aprensentacao oo-trincheiras

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
Page 42: Aprensentacao oo-trincheiras
Page 43: Aprensentacao oo-trincheiras

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

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

Tecnicamente falando..• Facades e Adapters(Gama, 1995)• Tradutores• Mecanismo de comunicação

Page 46: Aprensentacao oo-trincheiras

Codigo! Codigo! Codigo!

Page 47: Aprensentacao oo-trincheiras

Outros exemplos..• Ferramenta ORM(hibernate, entity framework)• Exposição de API Rest

Page 48: Aprensentacao oo-trincheiras

Refatoração

Page 49: Aprensentacao oo-trincheiras

RefatoraçãoSabe aquela história que você passa a maior parte do tempo lendo código ?

É verdade!

Page 50: Aprensentacao oo-trincheiras

Testes!Teste seu código!

Page 51: Aprensentacao oo-trincheiras

Testes unitários• Planejamento antes de código• Desacoplamento• Separação de responsabilidades• Encapsulamento adequado

Page 52: Aprensentacao oo-trincheiras

Testes• Testes unitários• Testes integrados• Testes, testes e testes!

Page 53: Aprensentacao oo-trincheiras

Cheiro ruim em código

Page 54: Aprensentacao oo-trincheiras

Exemplos..• Método longo demais• Classe longa demais• Parâmetros demais• Intimidade indevida• Classe preguiçosa

Page 55: Aprensentacao oo-trincheiras

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

Anti-padrões• Modelo anêmico• Objeto deus• Poltergeists• Problema do yo-yo• Programação orientada a exceções

Page 57: Aprensentacao oo-trincheiras

Linguagem ubíqua“Uma linguagem única entre todos os envolvidos no projeto baseada no domínio.”

Eric Evans

Page 58: Aprensentacao oo-trincheiras

Ao infinito e além..

Page 59: Aprensentacao oo-trincheiras

YAGNI“Somente implemente funcionalidades quando você realmente precisar delas, nunca quando você achar que vai precisar.”

Ron jeffries

Page 60: Aprensentacao oo-trincheiras
Page 61: Aprensentacao oo-trincheiras

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

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
Page 64: Aprensentacao oo-trincheiras

www.lambda3.com.br