Atividade 00 - Anti Patterns
Como fazer
Seção intitulada “Como fazer”Você encontrará tarefas para implementações com base em pequenos trechos de código. Cada trecho apresenta um problema que precisa ser resolvido.
Código 01
Seção intitulada “Código 01”public Cliente(String nome, String sobrenome, String email) { this.nome = nome; this.sobrenome = sobrenome; this.email = email;}Tarefa: Adicionar os parâmetros telefone, endereco, cpf, nascimento, cidade, estado, cep e pais ao construtor da classe Cliente.
Código 02
Seção intitulada “Código 02”public class PagamentoService { public void pagar(String tipo, double valor) { switch (tipo) { case "pix": new Pix().pagar(valor); break; case "boleto": new Boleto().pagar(valor); break; case "cartao": new Cartao().pagar(valor); break; } }}Tarefa: Criar uma nova classe FaturaService e um método historico que use o mesmo switch para gerar o histórico de pagamentos (chamando historico() de cada meio de pagamento).
Código 03
Seção intitulada “Código 03”public class Config { public static String urlBanco = "jdbc:mysql://localhost:3306/loja"; public static String usuarioBanco = "admin"; public static String ambiente = "producao"; public static int tentativasLogin = 3;}Tarefa: Crie um método chamado autenticar numa classe chamada LoginService que altera o valor de tentativasLogin para 5.
Código 04
Seção intitulada “Código 04”Pedido original = new Pedido();original.cliente = "Fulano de Tal";original.itens = ["Mochila", "Caderno"];original.valorTotal = 150.0;original.desconto = 10.0;original.endereco = "Rua das Flores, 100";Tarefa: Duplicar um objeto Pedido para gerar um rascunho, copiando todos os campos do pedido original.
Código 05
Seção intitulada “Código 05”public class CalculoFrete { public double calcular(double peso, String modalidade) { if (modalidade.equals("normal")) return peso * 1.0; if (modalidade.equals("sedex")) return peso * 2.0; if (modalidade.equals("express")) return peso * 4.0; return 0; }}Tarefa: Adicionar uma nova modalidade de frete jato (peso * 5.0). Depois uma fragil (peso * 8.0).
Código 06
Seção intitulada “Código 06”// API de terceiros (não pode ser alterada):public class StripeApi { public double cobrar(String cartao, String email, double valor) { ... }}
public class CompraService { public void finalizar(Pedido pedido) { new PixApi().processar(pedido.getEmail(), pedido.getValor()); }}Tarefa: substitua a cobrança via Pix por uma cobrança via Stripe, usando a API de terceiros StripeApi. Assuma que o pedido contém o cartão de crédito do cliente (pedido.getCartao()).
Código 07
Seção intitulada “Código 07”public class Rastreador { void monitorar() { ... }}
public class Repositorio { public boolean houveNovoPedido() { // faz uma consulta no objeto e retorna true se houver um novo pedido }}Tarefa: Usando Thread.sleep() e um loop infinito, implemente o método monitorar() para verificar a cada 5 segundos se houve um novo pedido.
Código 08
Seção intitulada “Código 08”public class Cafe { public double preco() { return 2.0; }}
public class CafeComLeite extends Cafe { public double preco() { return super.preco() + 0.5; }}
public class CafeComChantilly extends Cafe { public double preco() { return super.preco() + 0.7; }}Tarefa: Adicionar café com leite e chantilly, café com leite e chocolate, café com chocolate e chantilly. Escolha seu preco =)
Código 09
Seção intitulada “Código 09”// Itens de pedido podem servir como um produto unitário ou um pacote com vários itensdouble total = 0;for (Item item : itens) { ...}Tarefa: usando instanceof dentro do for, calcule o peso total de um pedido, somando o peso de cada item. Se o item for um Pacote, utilize outro for para somar o peso de seus filhos usando percorrendo item.getItens().