REFINANDO	CÓDIGO	LEGADO	
COM	DESIGN	PATTERN	E	JAVA	8	
	
JUNHO/2017
QUEM SOU EU ??
•  Mestre	em	Engenharia	Elétrica	e	Computação,	Pós-Graduado	em	
Liderança	e	Coaching	e	Graduado	em	Ciências	da	Computação	
•  Leciono	em	cursos	de	pós-graduação,	MBAs	e	Graduação.	
•  Diretor	de	Projetos	da	empresa	INLOC	SISTEMAS	-	Goiânia-GO	
•  Professor	e	Coordenador	do	Curso	de	Sistemas	de	Informação	da	
Faculdade	Delta	-	Goiânia-GO	
•  +	16	anos	com	projetos	de	soOware	
•  JUG-Leader	GOJAVA	
•  Entusiasta	na	área	de	Machine	Learning
AGENDA
1.  Cenário	em	que	vivemos	
2.  Código	Autosustentável	
3.  O	que	é	refatoração	
4.  O	que	nos	moZva	retaforar?	
5.  Padrões	de	projeto	
6. “Hands	on”	
1.  BUILDER	
2.  ABSTRACT	FACTORY	
3.  STATE	
7.  JAVA	8	
8.  7	Dicas	Finais
1)	CENÁRIO	EM	QUE	
VIVEMOS
É só criar um botão na tela L
A Demanda > Capacidade L
Tudo é para ONTEM L
2)	CÓDIGO	
AUTOSUSTENTÁVEL
“Que	pode	se	sustentar	sozinho”	
	
Fonte:	hcps://pt.wikZonary.org/wiki/
autosustentável	
CÓDIGO AUTOSUSTENTÁVEL
“Criar	uma	estrutura	de	códigos,	que	
impacte	o	menos	possível	em	cada	
alteração	realizada”	
“Reinaldo	Jr	J”	
CÓDIGO AUTOSUSTENTÁVEL
3)	O	QUE	É	
REFATORAÇÃO?
“Uma	alteração	feita	na	estrutura	interna	do	
soAware	para	torná-lo	mais	fácil	de	ser	
entendido	e	menos	custoso	de	ser	modificado	
sem	alterar	seu	comportamento	
observável”	(MarZn	Fowler).	
REFATORAÇÃO
O	processo	de	refatoração,	envolve	a	
remoção	de	duplicação,	a	simplificação	
de	lógica	condicional	e	a	clarificação	de	
código.		
	
REFATORAÇÃO
“Qualquer	tolo	consegue	escrever	
código	que	um	computador	
entenda.	Bons	programadores	
escrevem	código	que	humanos	
possam	entender”	(MarZn	Fowler)
4)	O	QUE	NOS	MOTIVA	
A	REFATORAR?
1.  Tornar	mais	fácil	a	adição	de	código	novo	
2.  Melhorar	o	projeto	de	código	existente	
3.  Obter	um	melhor	entendimento	do	código	
4.  Tornar	a	programação	menos	irritante	
	
O QUE NOS MOTIVA REFATORAR?
Os	problemas	de	projeto	mais	comuns,	
resultam	de	código	que:	
1.  Duplicado	
2.  Dificuldade	em	encontrar	funcionalidades	
3.  É	complicado	
PROBLEMAS DE CÓDIGO
BAIXA COESÃO
•  Várias	funcionalidades	em	um	mesmo	objeto	
•  Diocil	reaproveitamento	
•  Diocil	manutenção	
•  Alta	complexidade
ALTO ACOPLAMENTO
•  Forte	dependência	entre	componentes	
•  É	dificil	trocar	dependências	de	um	objeto	sem	
quebrar	o	seu	funcionamento	interno	
•  É	dificil	adicionar	mais	funcionalidades	ao	
componente	sem	ter	que	alterar	o	seu	código
ALTA	coesão	e	BAIXO	
acoplamento	
	
	
MANTRA
5)	PADRÕES	DE	
PROJETO
PADRÕES DE PROJETO
“Cada	padrão	escreve	um	problema	que	ocorre	
repeJdamente	em	nosso	ambiente,	e	então	
descreve	o	núcleo	da	solução	para	esse	problema,	
de	uma	forma	que	você	possa	uJlizar	essa	solução	
um	milhão	de	vezes,	sem	nunca	fazê-lo	da	mesma	
forma	duas	vezes.”	(Alexander)
6)	HANDS	ON
h`ps://github.com/Reinaldo-Jr/join-062017
#BUILDER
Separar	o	processo	de	construção	de	
um	objeto	de	sua	representação	e	
permiZr	a	sua	criação	passo-a-passo.	
Diferentes	Zpos	de	objetos	podem	
ser	criados	com	implementações	
disZntas	de	cada	passo.	
DEFINIÇÃO
Simplificar	códigos	que	criam	objetos	
complexos,	com	caracterísZcas	diferentes.	
MOTIVAÇÃO
CENÁRIO
BUILDER
BUILDER
#STATE
Alterar	o	comportamento	de	um	
determinado	objeto	de	acordo	com	o	
estado	no	qual	ele	se	encontra.	
DEFINIÇÃO
Tratar	lógica	condicional	de	mudança	
de	estados	demasiadamente	
complexa.	
MOTIVAÇÃO
CENÁRIO
STATE
STATE
#ABSTRACT
FACTORY
Mover	o	conhecimento	de	criação	de	
diversas	classes,	para	uma	única	
classe.	
DEFINIÇÃO
Facilitação	de	lógica	complexa	para	
criação	de	objetos.	
MOTIVAÇÃO
CENÁRIO
ABSTRACT FACTORY
ABSTRACT FACTORY
7) JAVA 8
#LAMBDA
#STREAM
STREAM
Avanços significa[vos na API de Collec[ons

STREAMS para filtragem e ordenação
COLLECTORS para resgatar a lista
8)	7	DICAS	
IMPORTANTES
Comece	a	dedicar	tempo	para	melhoria	
interna	do	seu	código	ou	“remoção	dos	
débitos	técnicos”.	
	
DICA (1)
ALTA	coesão	e	BAIXO	
acoplamento	
	
	
DICA	(1)	DICA	(1)	
DICA (2)
“Programe	orientado	a	
classe	pai”	
	
	
DICA (3)
“Elimine	as	duplicidades	de	
código”	
	
	
DICA (4)
“UZlize	padrões	de	projeto”	
	
	
DICA (5)
DICA (6)
DICA (7)
DICAS DE LIVRO
DICAS DE LIVRO
rsjrnet@gmail.com

www.reinaldojr.com

hhps://github.com/Reinaldo-Jr

hhps://www.slideshare.net/ReinaldoJr5

APOIADOR

Refinando Código Legado