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
40 changes: 40 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Binary file added src/Desafio/EnvioCorreios.class
Binary file not shown.
8 changes: 8 additions & 0 deletions src/Desafio/EnvioCorreios.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@


public class EnvioCorreios implements MetodoEnvio {
@Override
public void enviar(Pedido pedido) {
System.out.println("Pedido " + pedido.getId() + " enviado pelos Correios.");
}
}
Binary file added src/Desafio/EnvioTransportadora.class
Binary file not shown.
8 changes: 8 additions & 0 deletions src/Desafio/EnvioTransportadora.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@


public class EnvioTransportadora implements MetodoEnvio {
@Override
public void enviar(Pedido pedido) {
System.out.println("Pedido " + pedido.getId() + " enviado por Transportadora.");
}
}
Binary file added src/Desafio/LojaOnline.class
Binary file not shown.
20 changes: 20 additions & 0 deletions src/Desafio/LojaOnline.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Binary file added src/Desafio/MetodoEnvio.class
Binary file not shown.
5 changes: 5 additions & 0 deletions src/Desafio/MetodoEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@


public interface MetodoEnvio {
void enviar(Pedido pedido);
}
Binary file added src/Desafio/MetodoPagamento.class
Binary file not shown.
5 changes: 5 additions & 0 deletions src/Desafio/MetodoPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@


public interface MetodoPagamento {
void pagar(double valor);
}
Binary file added src/Desafio/PagamentoCartao.class
Binary file not shown.
8 changes: 8 additions & 0 deletions src/Desafio/PagamentoCartao.java
Original file line number Diff line number Diff line change
@@ -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.");
}
}
8 changes: 8 additions & 0 deletions src/Desafio/PagamentoPayPal.java
Original file line number Diff line number Diff line change
@@ -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.");
}
}
Binary file added src/Desafio/PagamentoPix.class
Binary file not shown.
8 changes: 8 additions & 0 deletions src/Desafio/PagamentoPix.java
Original file line number Diff line number Diff line change
@@ -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.");
}
}
Binary file added src/Desafio/Pedido.class
Binary file not shown.
36 changes: 36 additions & 0 deletions src/Desafio/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@


import java.util.ArrayList;
import java.util.List;

public class Pedido {
private String id;
private List<String> 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 +
'}';
}
}
Binary file added src/Desafio/PedidoService.class
Binary file not shown.
17 changes: 17 additions & 0 deletions src/Desafio/PedidoService.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
2 changes: 2 additions & 0 deletions src/exemplo/imposto/Dedutivel.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package exemplo.imposto;

public interface Dedutivel {


}