Baixe o app para aproveitar ainda mais
Prévia do material em texto
Considere o código a seguir que é um programa para calcular e imprimir o valor devido por um cliente em uma vídeo locadora (Você lembra da Blockbuster - http://www.blockbuster.com.br). O programa recebe como entrada quais filmes o cliente alugou e por quanto tempo. Ele então calcula o valor devido, que depende de quanto tempo o filme foi alugado, e identifica o tipo do filme. Há três tipos de filmes: normal, lançamento e infantil. Além de calcular os custos, o programa também calcula os pontos do locador frequente (ou seja, aquele que usa os serviços de locação de filmes muitas vezes), que variam se o filme é um lançamento. Esse projeto está disponível em https://github.com/anarossi/LocadoraDVD Abstração com atributos e métodos de objetos public class DVD { public enum Tipo { normal, lancamento, infantil }; private String título; private Tipo códigoDePreço; public DVD(String título, Tipo códigoDePreço) { this.título = título; this.códigoDePreço = códigoDePreço; } public String getTítulo() { return título; } public Tipo getCódigoDePreço() { return códigoDePreço; } public void setCódigoDePreço(Tipo códigoDePreço) { this.códigoDePreço = códigoDePreço; } } ------------------------------------------------------------------------------------------------------------------------------------- public class Aluguel { private DVD dvd; private int diasAlugada; public Aluguel(DVD dvd, int diasAlugada) { Comment by Perfil: Mostra que é uma composição, pois no construtor da classe instancia o da outra. this.dvd = dvd; this.diasAlugada = diasAlugada; } public DVD getDVD() { return dvd; } public int getDiasAlugada() { return diasAlugada; } } ANÁLISE, PROJETO E DESENVOLVIMENTO II PRÁTICA DE LABORATÓRIO – Refatoração ------------------------------------------------------------------------------------------------------------------------------------- import java.util.ArrayList; import java.util.Collection; public class Cliente { private String nome; private Collection<Aluguel> DVDsAlugados = new ArrayList<Aluguel>(); public Cliente(String nome) { this.nome = nome; } public String getNome() { return nome; } public void adicionaAluguel(Aluguel aluguel) { DVDsAlugados.add(aluguel); } public String extrato() { final String fimDeLinha = System.getProperty("line.separator"); double valorTotal = 0.0; int pontosDeAlugadorFrequente = 0; String resultado = "Registro de Alugueis de " + getNome() + fimDeLinha; for (Aluguel d : DVDsAlugados) { double valorCorrente = 0.0; Aluguel cada = d; // determina valores para cada linha // switch com enum switch (cada.getDVD().getCódigoDePreço()) { case normal: valorCorrente += 2; if (cada.getDiasAlugada() > 2) { valorCorrente += (cada.getDiasAlugada() - 2) * 1.5; } break; case lancamento: valorCorrente += cada.getDiasAlugada() * 3; break; case infantil: valorCorrente += 1.5; if (cada.getDiasAlugada() > 3) { valorCorrente += (cada.getDiasAlugada() - 3) * 1.5; } break; } // switch // trata de pontos de alugador frequente pontosDeAlugadorFrequente++; // adiciona bonus para aluguel de um lançamento por pelo menos 2 // dias if (cada.getDVD().getCódigoDePreço() == DVD.Tipo.lancamento && cada.getDiasAlugada() > 1) { pontosDeAlugadorFrequente++; } // mostra valores para este aluguel resultado += "\t" + cada.getDVD().getTítulo() + "\t" + valorCorrente + fimDeLinha; valorTotal += valorCorrente; } // while // adiciona rodapé resultado += "Valor total devido: " + valorTotal + fimDeLinha; resultado += "Voce acumulou " + pontosDeAlugadorFrequente + " pontos de alugador frequente"; return resultado; } }
Compartilhar