Buscar

Lab01v2 - Ativ 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

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;
 }
}

Outros materiais