diff --git a/README.md b/README.md index ea7bec0..d165230 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ dados de relatório - Exportar em PDF - Enviar por e-mail **Tarefa:** Refatore a classe para que siga o princípio da responsabilidade única (SRP). + ------------------------------------------------------------------------ ## Exercício 2 - SRP em um Sistema de Biblioteca @@ -58,3 +59,42 @@ promocional) - Diferentes métodos de pagamento (ex: cartão, PIX, PayPal) **Entrega esperada:**\ - Diagrama de classes UML mostrando a separação de responsabilidades.\ - Implementação em Java seguindo os princípios **SRP** e **OCP**. + +------------------------------------------------------------------------ + + +# Lista de Exercícios - Princípios SOLID em Java + +## Exercício 1 - SRP (Single Responsibility Principle) +Implemente uma classe `Relatorio` que atualmente gera relatórios e também envia emails. Reestruture essa classe aplicando o princípio da responsabilidade única. + +--- + +## Exercício 2 - OCP (Open/Closed Principle) +Implemente um sistema de cálculo de desconto para uma loja, inicialmente com desconto fixo. Em seguida, adapte o sistema para que possa receber novos tipos de desconto sem modificar a lógica já existente. + +--- + +## Exercício 3 - LSP (Liskov Substitution Principle) +Implemente uma classe `Quadrado` que herda de `Retangulo`. Mostre problemas que podem surgir e reestruture o código para estar em conformidade com o LSP. + +--- + +## Exercício 4 - ISP (Interface Segregation Principle) +Implemente uma interface `Trabalhador` com métodos `trabalhar()` e `estudar()`. Mostre como aplicar o ISP criando interfaces mais coesas. + +--- + +## Exercício 5 - DIP (Dependency Inversion Principle) +Implemente um sistema de notificação que envia mensagens via `EmailService`. Refatore o código para que a classe `Notificador` dependa de abstrações e não de implementações concretas. + +--- + +## Exercício 6 - Desafio Final +Implemente um sistema de **Gerenciamento de Pedidos de uma Loja Online**, aplicando todos os princípios do SOLID: + +- SRP: separar responsabilidades de classes de pedido, pagamento e envio. +- OCP: permitir a adição de novos métodos de pagamento sem alterar código existente. +- LSP: garantir que substituições de classes funcionem sem quebrar o sistema. +- ISP: dividir interfaces em contratos menores e específicos. +- DIP: depender de abstrações em vez de implementações concretas. diff --git a/src/Desafio/EnvioCorreios.class b/src/Desafio/EnvioCorreios.class new file mode 100644 index 0000000..0946548 Binary files /dev/null and b/src/Desafio/EnvioCorreios.class differ diff --git a/src/Desafio/EnvioCorreios.java b/src/Desafio/EnvioCorreios.java new file mode 100644 index 0000000..2ae148f --- /dev/null +++ b/src/Desafio/EnvioCorreios.java @@ -0,0 +1,8 @@ + + +public class EnvioCorreios implements MetodoEnvio { + @Override + public void enviar(Pedido pedido) { + System.out.println("Pedido " + pedido.getId() + " enviado pelos Correios."); + } +} diff --git a/src/Desafio/EnvioTransportadora.class b/src/Desafio/EnvioTransportadora.class new file mode 100644 index 0000000..b59d799 Binary files /dev/null and b/src/Desafio/EnvioTransportadora.class differ diff --git a/src/Desafio/EnvioTransportadora.java b/src/Desafio/EnvioTransportadora.java new file mode 100644 index 0000000..bba0db6 --- /dev/null +++ b/src/Desafio/EnvioTransportadora.java @@ -0,0 +1,8 @@ + + +public class EnvioTransportadora implements MetodoEnvio { + @Override + public void enviar(Pedido pedido) { + System.out.println("Pedido " + pedido.getId() + " enviado por Transportadora."); + } +} diff --git a/src/Desafio/LojaOnline.class b/src/Desafio/LojaOnline.class new file mode 100644 index 0000000..a8b2347 Binary files /dev/null and b/src/Desafio/LojaOnline.class differ diff --git a/src/Desafio/LojaOnline.java b/src/Desafio/LojaOnline.java new file mode 100644 index 0000000..47b1fe1 --- /dev/null +++ b/src/Desafio/LojaOnline.java @@ -0,0 +1,20 @@ + + +public class LojaOnline { + public static void main(String[] args) { + Pedido pedido1 = new Pedido("001"); + pedido1.adicionarItem("PC Gamer", 5500.00); + pedido1.adicionarItem("Cadeira Gamer", 2500.00); + + PedidoService service1 = new PedidoService(new PagamentoCartao(), new EnvioCorreios()); + service1.processarPedido(pedido1); + + System.out.println("--------------"); + + Pedido pedido2 = new Pedido("002"); + pedido2.adicionarItem("Playstation 5", 6500.00); + + PedidoService service2 = new PedidoService(new PagamentoPix(), new EnvioTransportadora()); + service2.processarPedido(pedido2); + } +} diff --git a/src/Desafio/MetodoEnvio.class b/src/Desafio/MetodoEnvio.class new file mode 100644 index 0000000..f4ad8e7 Binary files /dev/null and b/src/Desafio/MetodoEnvio.class differ diff --git a/src/Desafio/MetodoEnvio.java b/src/Desafio/MetodoEnvio.java new file mode 100644 index 0000000..88ba478 --- /dev/null +++ b/src/Desafio/MetodoEnvio.java @@ -0,0 +1,5 @@ + + +public interface MetodoEnvio { + void enviar(Pedido pedido); +} diff --git a/src/Desafio/MetodoPagamento.class b/src/Desafio/MetodoPagamento.class new file mode 100644 index 0000000..e934dfb Binary files /dev/null and b/src/Desafio/MetodoPagamento.class differ diff --git a/src/Desafio/MetodoPagamento.java b/src/Desafio/MetodoPagamento.java new file mode 100644 index 0000000..452cbca --- /dev/null +++ b/src/Desafio/MetodoPagamento.java @@ -0,0 +1,5 @@ + + +public interface MetodoPagamento { + void pagar(double valor); +} diff --git a/src/Desafio/PagamentoCartao.class b/src/Desafio/PagamentoCartao.class new file mode 100644 index 0000000..533e270 Binary files /dev/null and b/src/Desafio/PagamentoCartao.class differ diff --git a/src/Desafio/PagamentoCartao.java b/src/Desafio/PagamentoCartao.java new file mode 100644 index 0000000..8aba124 --- /dev/null +++ b/src/Desafio/PagamentoCartao.java @@ -0,0 +1,8 @@ + + +public class PagamentoCartao implements MetodoPagamento { + @Override + public void pagar(double valor) { + System.out.println("Pagamento de R$" + valor + " realizado com Cartão de Crédito."); + } +} diff --git a/src/Desafio/PagamentoPayPal.java b/src/Desafio/PagamentoPayPal.java new file mode 100644 index 0000000..32a8a69 --- /dev/null +++ b/src/Desafio/PagamentoPayPal.java @@ -0,0 +1,8 @@ + + +public class PagamentoPayPal implements MetodoPagamento { + @Override + public void pagar(double valor) { + System.out.println("Pagamento de R$" + valor + " realizado via PayPal."); + } +} diff --git a/src/Desafio/PagamentoPix.class b/src/Desafio/PagamentoPix.class new file mode 100644 index 0000000..735be43 Binary files /dev/null and b/src/Desafio/PagamentoPix.class differ diff --git a/src/Desafio/PagamentoPix.java b/src/Desafio/PagamentoPix.java new file mode 100644 index 0000000..6efa5ac --- /dev/null +++ b/src/Desafio/PagamentoPix.java @@ -0,0 +1,8 @@ + + +public class PagamentoPix implements MetodoPagamento{ + @Override + public void pagar(double valor) { + System.out.println("Pagamento de R$" + valor + " realizado via PIX."); + } +} diff --git a/src/Desafio/Pedido.class b/src/Desafio/Pedido.class new file mode 100644 index 0000000..6a02c49 Binary files /dev/null and b/src/Desafio/Pedido.class differ diff --git a/src/Desafio/Pedido.java b/src/Desafio/Pedido.java new file mode 100644 index 0000000..0a57a07 --- /dev/null +++ b/src/Desafio/Pedido.java @@ -0,0 +1,36 @@ + + +import java.util.ArrayList; +import java.util.List; + +public class Pedido { + private String id; + private List itens = new ArrayList<>(); + private double valorTotal; + + public Pedido(String id) { + this.id = id; + } + + public void adicionarItem(String item, double preco) { + itens.add(item); + valorTotal += preco; + } + + public String getId() { + return id; + } + + public double getValorTotal() { + return valorTotal; + } + + @Override + public String toString() { + return "Pedido{" + + "id: '" + id + '\'' + + ", itens: " + itens + + ", valorTotal: " + valorTotal + + '}'; + } +} diff --git a/src/Desafio/PedidoService.class b/src/Desafio/PedidoService.class new file mode 100644 index 0000000..81e8b17 Binary files /dev/null and b/src/Desafio/PedidoService.class differ diff --git a/src/Desafio/PedidoService.java b/src/Desafio/PedidoService.java new file mode 100644 index 0000000..984d375 --- /dev/null +++ b/src/Desafio/PedidoService.java @@ -0,0 +1,17 @@ + + +public class PedidoService { + private MetodoPagamento metodoPagamento; + private MetodoEnvio metodoEnvio; + + public PedidoService(MetodoPagamento metodoPagamento, MetodoEnvio metodoEnvio) { + this.metodoPagamento = metodoPagamento; + this.metodoEnvio = metodoEnvio; + } + + public void processarPedido(Pedido pedido) { + System.out.println("Processando " + pedido); + metodoPagamento.pagar(pedido.getValorTotal()); + metodoEnvio.enviar(pedido); + } +} diff --git a/src/exemplo/imposto/Dedutivel.java b/src/exemplo/imposto/Dedutivel.java index b797665..294b8eb 100644 --- a/src/exemplo/imposto/Dedutivel.java +++ b/src/exemplo/imposto/Dedutivel.java @@ -1,4 +1,6 @@ package exemplo.imposto; public interface Dedutivel { + + }