diff --git a/.gitignore b/.gitignore index f68d109..d4dbff9 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store +.idea/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..54c8d80 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# 📘 Lista de Exercícios Desafios – Interfaces em Java + +Este material contém apenas os **enunciados dos exercícios** para prática. + +--- + +### **1. Criando uma Interface Simples** +Crie uma interface `Animal` com os métodos `emitirSom()` e `mover()`. +Depois, implemente-a nas classes `Cachorro` e `Gato`. +No programa principal, crie objetos das duas classes e invoque seus métodos. + +--- + +### **2. Interface com Constantes** +Crie uma interface `OperacoesMatematicas` que define constantes para `PI` e `E`, +além dos métodos `somar`, `subtrair`, `multiplicar` e `dividir`. +Implemente essa interface na classe `Calculadora`. + +--- + +### **3. Interface com `default` e `static`** +Crie uma interface `Pagamento` com o método `processarPagamento(double valor)`. +- Adicione um método `default gerarRecibo(double valor)` que imprime um recibo. +- Adicione um método `static validarValor(double valor)` que verifica se o valor é positivo. +Implemente em `CartaoCredito` e `Pix`. + +--- + +### **4. Polimorfismo com Interfaces** +Implemente um sistema de gerenciamento de arquivos com uma interface `Armazenamento` que define os métodos `salvar(String dado)` e `ler()`. +Crie implementações para: +- `BancoDeDados` (simula armazenamento em BD) +- `ArquivoTexto` (simula gravação em arquivo de texto) + +No programa principal, crie uma lista de `Armazenamento` e demonstre polimorfismo. + +--- + +### **5. Sistema de Notificações** +Desenvolva um sistema de notificações com os seguintes requisitos: +1. Crie uma interface `Notificacao` com o método `enviar(String mensagem)`. +2. Implemente pelo menos três classes que representem canais de notificação: + - `EmailNotificacao` + - `SmsNotificacao` + - `PushNotificacao` +3. Crie uma classe `GerenciadorDeNotificacoes` que receba uma lista de notificadores (injeção de dependência) e tenha um método `notificarTodos(String mensagem)`. +4. No programa principal (`main`), permita que o usuário escolha quais canais de notificação deseja utilizar. +5. O sistema deve permitir expansão futura (exemplo: adicionar `WhatsAppNotificacao` sem modificar o código existente). + +--- + +✍️ Resolva os desafios implementando as classes e interfaces solicitadas. diff --git a/src/Main.java b/src/Main.java index b0687c5..fb31f50 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,9 +1,11 @@ +import exemplo.ecommerce.Produto; import exemplo.imposto.ICMS; import exemplo.imposto.IOF; import exemplo.imposto.Imposto; import exemplo.imposto.ImpostoRecord; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; public class Main { public static void main(String[] args) { @@ -25,6 +27,24 @@ public static void main(String[] args) { ImpostoRecord iva = new ImpostoRecord("2", "IVA"); //iva.taxa(); + Comparator compImposto = Comparator.comparing(Produto::getId) + .thenComparing(Produto::getValor); + //compImposto.compare(new Produto(), new Produto()); + + Integer numero = Integer.valueOf(10); + System.out.printf("O numeros sao iguais %d", numero.compareTo(Integer.valueOf(15))); + + + + + + List produtos = new ArrayList<>(); + produtos.add(new Produto(2, "TV 55", new BigDecimal(4500))); + produtos.add(new Produto(1, "PS 5", new BigDecimal(3800))); + Collections.sort(produtos); + Collections.sort(produtos, Comparator.comparing(Produto::getValor)); + produtos.sort((p1, p2) -> p1.getId().compareTo(p2.getId())); + } diff --git a/src/desafioV/EmailNotificacao.java b/src/desafioV/EmailNotificacao.java new file mode 100644 index 0000000..4cebfb0 --- /dev/null +++ b/src/desafioV/EmailNotificacao.java @@ -0,0 +1,8 @@ +package desafioV; + +public class EmailNotificacao { + @Override + public void enviar(String mensagem) { + System.out.println("Enviando Email" + mensagem); + } +} diff --git a/src/desafioV/GerenciadorDeNotificadores.java b/src/desafioV/GerenciadorDeNotificadores.java new file mode 100644 index 0000000..be3a08f --- /dev/null +++ b/src/desafioV/GerenciadorDeNotificadores.java @@ -0,0 +1,15 @@ +package desafioV; + +public class GerenciadorDeNotificadores { + private List notificadores; + + public GerenciadorDeNotificacoes(List notificadores) { + this.notificadores = notificadores; + } + + public void notificarTodos(String mensagem) { + for (Notificacao notificacao : notificadores) { + notificacao.enviar(mensagem); + } + } +} diff --git a/src/desafioV/Main.java b/src/desafioV/Main.java new file mode 100644 index 0000000..4b533fc --- /dev/null +++ b/src/desafioV/Main.java @@ -0,0 +1,26 @@ +package desafioV; + +public class Main { + Scanner scanner = new Scanner(System.in); + List canaisSelecionados = new ArrayList(); + + System.out.println("Escolha os canais de notificação (separe por vírgula): \n" + + "1 - Email \n" + + "2- SMS \n" + + "3- Push"); + + String[] opcoes = scanner.nextLine().split(","); + for (String opcao : opcoes) { + switch (opcao.trim()) { + case "1" -> canaisSelecionados.add(new EmailNotificacao()); + case "2" -> canaisSelecionados.add(new SmsNotificacao()); + case "3" -> canaisSelecionados.add(new PushNotificacao()); + default -> System.out.println("Opção inválida: " + opcao); + } + } + + System.out.println("Digite a mensagem que deseja enviar:"); + String mensagem = scanner.nextLine(); + + gerenciador.notificarTodos(mensagem); +} diff --git a/src/desafioV/Notificacao.java b/src/desafioV/Notificacao.java new file mode 100644 index 0000000..e9c89ae --- /dev/null +++ b/src/desafioV/Notificacao.java @@ -0,0 +1,5 @@ +package desafioV; + +public interface Notificacao { + void enviar(String mensagem); +} diff --git a/src/desafioV/SmsNotificacao.java b/src/desafioV/SmsNotificacao.java new file mode 100644 index 0000000..47089c0 --- /dev/null +++ b/src/desafioV/SmsNotificacao.java @@ -0,0 +1,8 @@ +package desafioV; + +public class SmsNotificacao { + @Override + public void enviar(String mensagem) { + System.out.println("Enviando SMS: " + mensagem); + } +} \ No newline at end of file diff --git a/src/desafioV/pushNotificacao.java b/src/desafioV/pushNotificacao.java new file mode 100644 index 0000000..09198ff --- /dev/null +++ b/src/desafioV/pushNotificacao.java @@ -0,0 +1,10 @@ +package desafioV; + +public class pushNotificacao { + @Override + public void enviar(String mensagem) { + System.out.println("Enviando Push Notification: " + mensagem); + } +} + + diff --git a/src/desafioVIII/Cliente.java b/src/desafioVIII/Cliente.java new file mode 100644 index 0000000..3b8d1cc --- /dev/null +++ b/src/desafioVIII/Cliente.java @@ -0,0 +1,21 @@ +package desafioVIII; + +public class Cliente implements Identificavel { + private int id; + private String nome; + + public Cliente(int id, String nome) { + this.id = id; + this.nome = nome; + } + + @Override + public int getId() { + return id; + } + + @Override + public String toString() { + return "Cliente{id=" + id + ", nome='" + nome + "'}"; + } +} \ No newline at end of file diff --git a/src/desafioVIII/Identificavel.java b/src/desafioVIII/Identificavel.java new file mode 100644 index 0000000..b8eb483 --- /dev/null +++ b/src/desafioVIII/Identificavel.java @@ -0,0 +1,5 @@ +package desafioVIII; + +public interface Identificavel { + int getId(); +} \ No newline at end of file diff --git a/src/desafioVIII/Main.java b/src/desafioVIII/Main.java new file mode 100644 index 0000000..741b170 --- /dev/null +++ b/src/desafioVIII/Main.java @@ -0,0 +1,35 @@ +package desafioVIII; + +import java.util.*; + + +public class Main { + public static void main(String[] args) { + RepositorioProduto repoProdutos = new RepositorioProduto(); + RepositorioCliente repoClientes = new RepositorioCliente(); + + // Salvando produtos + repoProdutos.salvar(new Produto(1, "Notebook")); + repoProdutos.salvar(new Produto(2, "Mouse")); + + // Salvando clientes + repoClientes.salvar(new Cliente(1, "Matheus")); + repoClientes.salvar(new Cliente(2, "Ana")); + + // Testando busca + System.out.println("Produto com ID 1: " + repoProdutos.buscarPorId(1)); + System.out.println("Cliente com ID 2: " + repoClientes.buscarPorId(2)); + + // Listando todos + System.out.println("\nLista de Produtos:"); + for (Produto p : repoProdutos.listarTodos()) { + System.out.println(p); + } + + System.out.println("\nLista de Clientes:"); + for (Cliente c : repoClientes.listarTodos()) { + System.out.println(c); + } + } +} + diff --git a/src/desafioVIII/Produto.java b/src/desafioVIII/Produto.java new file mode 100644 index 0000000..1f66ecd --- /dev/null +++ b/src/desafioVIII/Produto.java @@ -0,0 +1,21 @@ +package desafioVIII; + +public class Produto implements Identificavel { + private int id; + private String nome; + + public Produto(int id, String nome) { + this.id = id; + this.nome = nome; + } + + @Override + public int getId() { + return id; + } + + @Override + public String toString() { + return "Produto{id=" + id + ", nome='" + nome + "'}"; + } +} diff --git a/src/desafioVIII/Repositorio.java b/src/desafioVIII/Repositorio.java new file mode 100644 index 0000000..5e7ace4 --- /dev/null +++ b/src/desafioVIII/Repositorio.java @@ -0,0 +1,9 @@ +package desafioVIII; +import java.util.List; + + +public interface Repositorio { + void salvar(T obj); + T buscarPorId(int id); + List listarTodos(); +} diff --git a/src/desafioVIII/RepositorioCliente.java b/src/desafioVIII/RepositorioCliente.java new file mode 100644 index 0000000..fcdf07b --- /dev/null +++ b/src/desafioVIII/RepositorioCliente.java @@ -0,0 +1,3 @@ +package desafioVIII; + +public class RepositorioCliente extends RepositorioMemoria { } \ No newline at end of file diff --git a/src/desafioVIII/RepositorioMemoria.java b/src/desafioVIII/RepositorioMemoria.java new file mode 100644 index 0000000..ad4860d --- /dev/null +++ b/src/desafioVIII/RepositorioMemoria.java @@ -0,0 +1,28 @@ +package desafioVIII; +import java.util.ArrayList; +import java.util.List; + +// Classe abstrata que implementa a interface +public abstract class RepositorioMemoria implements Repositorio { + protected List lista = new ArrayList<>(); + + @Override + public void salvar(T obj) { + lista.add(obj); + } + + @Override + public T buscarPorId(int id) { + for (T obj : lista) { + if (obj.getId() == id) { + return obj; + } + } + return null; + } + + @Override + public List listarTodos() { + return lista; + } +} diff --git a/src/desafioVIII/RepositorioProduto.java b/src/desafioVIII/RepositorioProduto.java new file mode 100644 index 0000000..482a7ea --- /dev/null +++ b/src/desafioVIII/RepositorioProduto.java @@ -0,0 +1,4 @@ +package desafioVIII; + +public class RepositorioProduto extends RepositorioMemoria { } + diff --git a/src/desafioVIII/Teste.java b/src/desafioVIII/Teste.java new file mode 100644 index 0000000..b3af52a --- /dev/null +++ b/src/desafioVIII/Teste.java @@ -0,0 +1,4 @@ +package desafioVIII; + +public enum Teste { +} diff --git a/src/desafioVIII/readme b/src/desafioVIII/readme new file mode 100644 index 0000000..e69de29 diff --git a/src/desafioVIII/readme.txt b/src/desafioVIII/readme.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/exemplo/ecommerce/Produto.java b/src/exemplo/ecommerce/Produto.java new file mode 100644 index 0000000..41b3610 --- /dev/null +++ b/src/exemplo/ecommerce/Produto.java @@ -0,0 +1,54 @@ +package exemplo.ecommerce; + +import java.math.BigDecimal; +import java.util.Comparator; + +public class Produto implements Comparable { + + + private Integer id; + private String descricao; + private BigDecimal valor; + + + public Integer getId() { + return id; + } + + public Produto(Integer id, String descricao, BigDecimal valor) { + this.id = id; + this.descricao = descricao; + this.valor = valor; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDescricao() { + return descricao; + } + + public void setDescricao(String descricao) { + this.descricao = descricao; + } + + public BigDecimal getValor() { + return valor; + } + + public void setValor(BigDecimal valor) { + this.valor = valor; + } + + @Override + public int compareTo(Produto produto) { + if(this.getId() < produto.getId()) { + return -1; + } + if(this.getId() > produto.getId()) { + return 1; + } + return 0; + } +} diff --git a/src/exemplo/imposto/ICMS.java b/src/exemplo/imposto/ICMS.java index 32970e2..bdf25ef 100644 --- a/src/exemplo/imposto/ICMS.java +++ b/src/exemplo/imposto/ICMS.java @@ -1,15 +1,55 @@ package exemplo.imposto; -public class ICMS implements Imposto { +import java.util.Comparator; + +public class ICMS implements Imposto, Comparable { public Double taxa; + public Double percentual; public ICMS(Double taxa){ this.taxa = taxa; } + public Double getTaxa() { + return taxa; + } + + public void setTaxa(Double taxa) { + this.taxa = taxa; + } + + public Double getPercentual() { + return percentual; + } + + public void setPercentual(Double percentual) { + this.percentual = percentual; + } + @Override public void calcular(){ System.out.println("CALCULANDO ICMS"); } + @Override + public int compareTo(ICMS o) { + + /* if(this.taxa < o.taxa + && this.percentual < o.percentual) { + + return -1; + } + + if(this.taxa > o.taxa + && this.percentual > o.percentual) { + + return 1; + + return 0;*/ + Comparator comp = Comparator.comparing(ICMS::getTaxa) + .thenComparing(ICMS::getPercentual); + + return comp.compare(this, o); + + } }