SlideShare uma empresa Scribd logo
1 de 36
Refatoração
1/3
Fred Policarpo
Melhorando o código legado
Agenda
● Apresentação
● Ferramentas
● O que é Refatoração?
● Pré-Requisitos
● Por que? ( Motivação )
● Um processo contínuo…
● O medo da refatoração
● Técnicas de refatoração
● Hands On!
Fred Policarpo
Fibonacci / ZGSoluções desde 2007
Ciência da Computação - UFG
fredpolicarpo.github.io
linkedin.com/in/fredpolicarpo
github.com/fredpolicarpo
Me adiciona lá!
Ferramentas
Linguagem: Groovy 2.4.9 (JVM 1.7.0_80)
IDE: IntelliJ IDEA 2017.1
Introdução - O que é
Refatoração?
Refatoração (do inglês Refactoring) é o
processo de modificar um sistema de software
para melhorar a estrutura interna do código sem
alterar seu comportamento externo. - Wikipédia
Introdução - O que é
Refatoração?
Uma alteração feita na estrutura interna do software
para torná-lo mais fácil de entender e mais barato para
modificar sem alterar seu comportamento observável…
É uma forma disciplinada de limpar código que minimiza
as chances de introduzir bugs - Kent Beck/Martin
Fowler
Introdução - Pré-Requisitos
POO (Programação Orientada a Objetos)
Testes automatizados (Testes de unidade)
Introdução - Por que?
Os programadores passam muito mais tempo alterando e mantendo um código
do que criando uma nova funcionalidade do zero (Bye bye Facul);
À medida que o software vai evoluindo, o código vai deteriorando e se tornando
mais suscetível a bugs e de difícil manutenção;
A refatoração deve ser um processo contínuo.
Lei do programador escoteiro
Teoria das Janelas Quebradas
Introdução - Por que?
Introdução - Por que POO/Padrões de
Projeto?
É interessante ter um alvo, uma métrica de qualidade de
software a ser atingida;
Refatoração não é necessariamente POO...
Introdução - Um processo
contínuo...
Um bom design inicial de código não garante a
qualidade do código ao longo do seu tempo de vida;
A evolução do código tende a deteriorá-lo caso os
devidos cuidados não sejam tomados
Introdução - Um processo
contínuo...
Pressão dos prazos :/
Registre como débito técnico
Introdução - Um processo
contínuo...
O medo da refatoração
A experiência te mostra que deixar pra depois pode
doer...
O medo da refatoração
Martin Fowler deu a dica pra te aliviar:
Uma lista de técnicas de refatoração;
Pequenos passos;
Técnicas de
Refatoração
Essa apresentação é baseada nas
técnicas deste livro.
martinfowler.com/books/refactoring.html
Técnicas de Refatoração:
Pequenos Passos
Os passos devem ser pequenos e simples:
Mover uma variável de método/classe;
Extrair novos métodos de trechos de código;
Mover código entre classes colaborativas;
Mover código para cima ou para baixo na hierarquia de classe
Técnicas de Refatoração:
Pequenos Passos
● Faça um passo desse de cada vez!
● Execute os testes e só se estiverem passando siga para a
próxima etapa =)
● Não saia refatorando tudo, se um teste falhar, vai ser cara
identificar o erro!
Hands On!
Falar o que é refatoração é fácil, refatorar é que são elas.
Let’s Code!
Dinâmica da nossa prática
1. Vou apresentar um requisito para construção de um programa;
2. Vou apresentar uma solução para esse problema;
3. Vamos identificar os “maus cheiros de código”;
4. Vamos seguir refatorando, passo a passo até chegar em uma
solução mais elegante, mais legível e o principal: mais manutenível!
Qual o problema que
queremos resolver?
Você deve imprimir o valor da conta de um
prontuário de um paciente de uma clínica de
saúde.
Qual o problema que
queremos resolver?
As diárias tem três padrões de valor:
Internação Básica: Até 3 Dias
Internação Média: De 4 a 8 dias
Internação Avançada: De 9 dias em diante
Qual o problema que
queremos resolver?
Regras para o cálculo das diárias
Enfermaria:
➢ Valor Básico: R$ 40,00
➢ Valor Internação média: R$ 35,00
➢ Valor Internação grave: R$ 30,00
Apartamento:
➢ Valor Básico: R$ 100,00
➢ Valor Internação média: R$ 90,00
➢ Valor Internação grave: R$ 80,00
Qual o problema que
queremos resolver?
Os procedimentos são classificados como Básicos, Comuns e
Avançados.
➢ Procedimentos básicos custam R$ 50,00;
➢ Procedimentos comuns custam R$ 150,00;
➢ Procedimentos avançados custam R$ 500,00;
Saída esperada: Uma String formatada pronta
para ser impressa
----------------------------------------------------------------------------------------------
A conta do(a) paciente Nando Reis tem valor total de __ R$ 1.210,00 __
Conforme os detalhes abaixo:
Valor Total Diárias: R$ 360,00
4 diárias em apartamento
Valor Total Procedimentos: R$ 850,00
1 procedimento avançado
2 procedimentos comuns
1 procedimento básico
Volte sempre, a casa é sua!
----------------------------------------------------------------------------------------------
Ponto de Partida
Baixe o Código Inicial: https://goo.gl/gQYRwz
Passo 1: Testes
Certificar-se que exista um conjunto de testes que garanta a
funcionalidade do software que será alterado
Passo 2: Decompor o
método imprimaConta
Separar trechos do método imprimaConta em métodos
menores e mais coesos
Passo 3: Mover a
contabilização de diárias
para a classe Internação
As operações sobre os dados de um objeto, devem ser
realizadas pelo próprio objeto
Passo 4: Mover a
contabilização de
procedimientos para a
classe apropiada
As operações sobre os dados de um objeto, devem ser
realizadas pelo próprio objeto
Passo 5:
Criar especialização de
classes para cada tipo de
Procedimento
Passo 6:
Criar especialização de
classes para cada tipo de
Internação
Passo 7:
Isolar lógica de construção
de relatório em classe
apropriada
Obrigado!
Dúvidas?
Sugestões?
zgsolucoes.com.br
fredpolicarpo@zgsolucoes.com.br
Baixe o código final: https://goo.gl/cp8U9g

Mais conteúdo relacionado

Mais procurados

Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passosHélio Medeiros
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador PragmáticoTadeu Marinho
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamentothiagodp
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Joao Galdino Mello de Souza
 
Coding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programandoCoding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programandoMauricio Matsuda
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheirasLuiz Borba
 
Test Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concretoTest Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concretoHélio Medeiros
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizadosMarcelo Andrade
 
Snapshot Tests: estratégia de agile testing para antecipação de falhas
Snapshot Tests: estratégia de agile testing para antecipação de falhasSnapshot Tests: estratégia de agile testing para antecipação de falhas
Snapshot Tests: estratégia de agile testing para antecipação de falhasCarla Oran
 
Multidisciplinaridade - Desconstruindo especialistas e construindo times
Multidisciplinaridade - Desconstruindo especialistas e construindo timesMultidisciplinaridade - Desconstruindo especialistas e construindo times
Multidisciplinaridade - Desconstruindo especialistas e construindo timesHélio Medeiros
 

Mais procurados (20)

Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passos
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador Pragmático
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
Qualidade no desenvolvimento de Sistemas por Anderson Augustinho (Celepar)
 
Coding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programandoCoding Dojo - Aprendendo a programar programando
Coding Dojo - Aprendendo a programar programando
 
TDD do seu jeito
TDD do seu jeitoTDD do seu jeito
TDD do seu jeito
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
Coding Dojo e TDD
Coding Dojo e TDDCoding Dojo e TDD
Coding Dojo e TDD
 
Test Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concretoTest Driven Development - Em busca de feedback util e concreto
Test Driven Development - Em busca de feedback util e concreto
 
Metodos ageis thinkingdifferent
Metodos ageis thinkingdifferentMetodos ageis thinkingdifferent
Metodos ageis thinkingdifferent
 
Bad smells no código
Bad smells no códigoBad smells no código
Bad smells no código
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Testes de software automatizados
Testes de software automatizadosTestes de software automatizados
Testes de software automatizados
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Snapshot Tests: estratégia de agile testing para antecipação de falhas
Snapshot Tests: estratégia de agile testing para antecipação de falhasSnapshot Tests: estratégia de agile testing para antecipação de falhas
Snapshot Tests: estratégia de agile testing para antecipação de falhas
 
Multidisciplinaridade - Desconstruindo especialistas e construindo times
Multidisciplinaridade - Desconstruindo especialistas e construindo timesMultidisciplinaridade - Desconstruindo especialistas e construindo times
Multidisciplinaridade - Desconstruindo especialistas e construindo times
 

Semelhante a Refatoração 1/3 webinar

Clean Code - Conceitos e filosofia
Clean Code - Conceitos e filosofiaClean Code - Conceitos e filosofia
Clean Code - Conceitos e filosofiaAugusto Rosa
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Marcio Miyamoto
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
Engenharia de Software - Unimep/Pronatec - Aula 4
Engenharia de Software - Unimep/Pronatec - Aula 4Engenharia de Software - Unimep/Pronatec - Aula 4
Engenharia de Software - Unimep/Pronatec - Aula 4André Phillip Bertoletti
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPaulino Michelazzo
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Daniel Carvalhinho
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorAndré Phillip Bertoletti
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003Edgar Silva
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPRodrigo Dos Santos
 

Semelhante a Refatoração 1/3 webinar (20)

Clean Code - Conceitos e filosofia
Clean Code - Conceitos e filosofiaClean Code - Conceitos e filosofia
Clean Code - Conceitos e filosofia
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Cultura de testes
Cultura de testesCultura de testes
Cultura de testes
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Engenharia de Software - Unimep/Pronatec - Aula 4
Engenharia de Software - Unimep/Pronatec - Aula 4Engenharia de Software - Unimep/Pronatec - Aula 4
Engenharia de Software - Unimep/Pronatec - Aula 4
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
 
Teste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedorTeste de software, na visão de um desenvolvedor
Teste de software, na visão de um desenvolvedor
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 

Refatoração 1/3 webinar

  • 2. Agenda ● Apresentação ● Ferramentas ● O que é Refatoração? ● Pré-Requisitos ● Por que? ( Motivação ) ● Um processo contínuo… ● O medo da refatoração ● Técnicas de refatoração ● Hands On!
  • 3. Fred Policarpo Fibonacci / ZGSoluções desde 2007 Ciência da Computação - UFG fredpolicarpo.github.io linkedin.com/in/fredpolicarpo github.com/fredpolicarpo Me adiciona lá!
  • 4. Ferramentas Linguagem: Groovy 2.4.9 (JVM 1.7.0_80) IDE: IntelliJ IDEA 2017.1
  • 5.
  • 6. Introdução - O que é Refatoração? Refatoração (do inglês Refactoring) é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo. - Wikipédia
  • 7. Introdução - O que é Refatoração? Uma alteração feita na estrutura interna do software para torná-lo mais fácil de entender e mais barato para modificar sem alterar seu comportamento observável… É uma forma disciplinada de limpar código que minimiza as chances de introduzir bugs - Kent Beck/Martin Fowler
  • 8. Introdução - Pré-Requisitos POO (Programação Orientada a Objetos) Testes automatizados (Testes de unidade)
  • 9. Introdução - Por que? Os programadores passam muito mais tempo alterando e mantendo um código do que criando uma nova funcionalidade do zero (Bye bye Facul); À medida que o software vai evoluindo, o código vai deteriorando e se tornando mais suscetível a bugs e de difícil manutenção; A refatoração deve ser um processo contínuo.
  • 10. Lei do programador escoteiro Teoria das Janelas Quebradas Introdução - Por que?
  • 11. Introdução - Por que POO/Padrões de Projeto? É interessante ter um alvo, uma métrica de qualidade de software a ser atingida; Refatoração não é necessariamente POO...
  • 12. Introdução - Um processo contínuo... Um bom design inicial de código não garante a qualidade do código ao longo do seu tempo de vida; A evolução do código tende a deteriorá-lo caso os devidos cuidados não sejam tomados
  • 13. Introdução - Um processo contínuo... Pressão dos prazos :/ Registre como débito técnico
  • 14. Introdução - Um processo contínuo...
  • 15.
  • 16. O medo da refatoração A experiência te mostra que deixar pra depois pode doer...
  • 17. O medo da refatoração Martin Fowler deu a dica pra te aliviar: Uma lista de técnicas de refatoração; Pequenos passos;
  • 18. Técnicas de Refatoração Essa apresentação é baseada nas técnicas deste livro. martinfowler.com/books/refactoring.html
  • 19. Técnicas de Refatoração: Pequenos Passos Os passos devem ser pequenos e simples: Mover uma variável de método/classe; Extrair novos métodos de trechos de código; Mover código entre classes colaborativas; Mover código para cima ou para baixo na hierarquia de classe
  • 20. Técnicas de Refatoração: Pequenos Passos ● Faça um passo desse de cada vez! ● Execute os testes e só se estiverem passando siga para a próxima etapa =) ● Não saia refatorando tudo, se um teste falhar, vai ser cara identificar o erro!
  • 21. Hands On! Falar o que é refatoração é fácil, refatorar é que são elas. Let’s Code!
  • 22. Dinâmica da nossa prática 1. Vou apresentar um requisito para construção de um programa; 2. Vou apresentar uma solução para esse problema; 3. Vamos identificar os “maus cheiros de código”; 4. Vamos seguir refatorando, passo a passo até chegar em uma solução mais elegante, mais legível e o principal: mais manutenível!
  • 23. Qual o problema que queremos resolver? Você deve imprimir o valor da conta de um prontuário de um paciente de uma clínica de saúde.
  • 24. Qual o problema que queremos resolver? As diárias tem três padrões de valor: Internação Básica: Até 3 Dias Internação Média: De 4 a 8 dias Internação Avançada: De 9 dias em diante
  • 25. Qual o problema que queremos resolver? Regras para o cálculo das diárias Enfermaria: ➢ Valor Básico: R$ 40,00 ➢ Valor Internação média: R$ 35,00 ➢ Valor Internação grave: R$ 30,00 Apartamento: ➢ Valor Básico: R$ 100,00 ➢ Valor Internação média: R$ 90,00 ➢ Valor Internação grave: R$ 80,00
  • 26. Qual o problema que queremos resolver? Os procedimentos são classificados como Básicos, Comuns e Avançados. ➢ Procedimentos básicos custam R$ 50,00; ➢ Procedimentos comuns custam R$ 150,00; ➢ Procedimentos avançados custam R$ 500,00;
  • 27. Saída esperada: Uma String formatada pronta para ser impressa ---------------------------------------------------------------------------------------------- A conta do(a) paciente Nando Reis tem valor total de __ R$ 1.210,00 __ Conforme os detalhes abaixo: Valor Total Diárias: R$ 360,00 4 diárias em apartamento Valor Total Procedimentos: R$ 850,00 1 procedimento avançado 2 procedimentos comuns 1 procedimento básico Volte sempre, a casa é sua! ----------------------------------------------------------------------------------------------
  • 28. Ponto de Partida Baixe o Código Inicial: https://goo.gl/gQYRwz
  • 29. Passo 1: Testes Certificar-se que exista um conjunto de testes que garanta a funcionalidade do software que será alterado
  • 30. Passo 2: Decompor o método imprimaConta Separar trechos do método imprimaConta em métodos menores e mais coesos
  • 31. Passo 3: Mover a contabilização de diárias para a classe Internação As operações sobre os dados de um objeto, devem ser realizadas pelo próprio objeto
  • 32. Passo 4: Mover a contabilização de procedimientos para a classe apropiada As operações sobre os dados de um objeto, devem ser realizadas pelo próprio objeto
  • 33. Passo 5: Criar especialização de classes para cada tipo de Procedimento
  • 34. Passo 6: Criar especialização de classes para cada tipo de Internação
  • 35. Passo 7: Isolar lógica de construção de relatório em classe apropriada