Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ bin/
.vscode/

### Mac OS ###
.DS_Store
.DS_Store
.idea/
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
22 changes: 21 additions & 1 deletion src/Main.java
Original file line number Diff line number Diff line change
@@ -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) {
Expand All @@ -25,6 +27,24 @@ public static void main(String[] args) {
ImpostoRecord iva = new ImpostoRecord("2", "IVA");
//iva.taxa();

Comparator<Produto> 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<Produto> 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()));


}

Expand Down
8 changes: 8 additions & 0 deletions src/desafioV/EmailNotificacao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package desafioV;

public class EmailNotificacao {
@Override
public void enviar(String mensagem) {
System.out.println("Enviando Email" + mensagem);
}
}
15 changes: 15 additions & 0 deletions src/desafioV/GerenciadorDeNotificadores.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package desafioV;

public class GerenciadorDeNotificadores {
private List<Notificacao> notificadores;

public GerenciadorDeNotificacoes(List<Notificacao> notificadores) {
this.notificadores = notificadores;
}

public void notificarTodos(String mensagem) {
for (Notificacao notificacao : notificadores) {
notificacao.enviar(mensagem);
}
}
}
26 changes: 26 additions & 0 deletions src/desafioV/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package desafioV;

public class Main {
Scanner scanner = new Scanner(System.in);
List<Notificacao> 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);
}
5 changes: 5 additions & 0 deletions src/desafioV/Notificacao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package desafioV;

public interface Notificacao {
void enviar(String mensagem);
}
8 changes: 8 additions & 0 deletions src/desafioV/SmsNotificacao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package desafioV;

public class SmsNotificacao {
@Override
public void enviar(String mensagem) {
System.out.println("Enviando SMS: " + mensagem);
}
}
10 changes: 10 additions & 0 deletions src/desafioV/pushNotificacao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package desafioV;

public class pushNotificacao {
@Override
public void enviar(String mensagem) {
System.out.println("Enviando Push Notification: " + mensagem);
}
}


21 changes: 21 additions & 0 deletions src/desafioVIII/Cliente.java
Original file line number Diff line number Diff line change
@@ -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 + "'}";
}
}
5 changes: 5 additions & 0 deletions src/desafioVIII/Identificavel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package desafioVIII;

public interface Identificavel {
int getId();
}
35 changes: 35 additions & 0 deletions src/desafioVIII/Main.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}

21 changes: 21 additions & 0 deletions src/desafioVIII/Produto.java
Original file line number Diff line number Diff line change
@@ -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 + "'}";
}
}
9 changes: 9 additions & 0 deletions src/desafioVIII/Repositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package desafioVIII;
import java.util.List;


public interface Repositorio<T> {
void salvar(T obj);
T buscarPorId(int id);
List<T> listarTodos();
}
3 changes: 3 additions & 0 deletions src/desafioVIII/RepositorioCliente.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package desafioVIII;

public class RepositorioCliente extends RepositorioMemoria<Cliente> { }
28 changes: 28 additions & 0 deletions src/desafioVIII/RepositorioMemoria.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package desafioVIII;
import java.util.ArrayList;
import java.util.List;

// Classe abstrata que implementa a interface
public abstract class RepositorioMemoria<T extends Identificavel> implements Repositorio<T> {
protected List<T> 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<T> listarTodos() {
return lista;
}
}
4 changes: 4 additions & 0 deletions src/desafioVIII/RepositorioProduto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package desafioVIII;

public class RepositorioProduto extends RepositorioMemoria<Produto> { }

4 changes: 4 additions & 0 deletions src/desafioVIII/Teste.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package desafioVIII;

public enum Teste {
}
Empty file added src/desafioVIII/readme
Empty file.
Empty file added src/desafioVIII/readme.txt
Empty file.
54 changes: 54 additions & 0 deletions src/exemplo/ecommerce/Produto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package exemplo.ecommerce;

import java.math.BigDecimal;
import java.util.Comparator;

public class Produto implements Comparable<Produto> {


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