Pular para o conteúdo

Atividade 00 - Anti Patterns

Você encontrará tarefas para implementações com base em pequenos trechos de código. Cada trecho apresenta um problema que precisa ser resolvido.


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.


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).


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.


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.


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).


// 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()).


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.


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 =)


// Itens de pedido podem servir como um produto unitário ou um pacote com vários itens
double 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().