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
35 changes: 35 additions & 0 deletions README.2.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 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.
54 changes: 0 additions & 54 deletions src/Main.java

This file was deleted.

36 changes: 36 additions & 0 deletions src/com/lojaonline/LojaOnline.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.lojaonline;

import com.lojaonline.envio.GerenciadorEnvio;
import com.lojaonline.pagamento.CartaoCredito;
import com.lojaonline.pagamento.MetodoPagamento;
import com.lojaonline.pagamento.ProcessadorPagamento;
import com.lojaonline.pedido.Pedido;
import com.lojaonline.produtos.Produto;
import com.lojaonline.repositorio.JpaPedidoRepositorio;
import com.lojaonline.repositorio.PedidoRepositorio;
import com.lojaonline.servicos.ServicoPedido;
import java.util.List;

public class LojaOnline {
public static void main(String[] args) {
PedidoRepositorio repositorio = new JpaPedidoRepositorio();
MetodoPagamento cartao = new CartaoCredito();
ProcessadorPagamento processador = new ProcessadorPagamento(cartao);
GerenciadorEnvio gerenciador = new GerenciadorEnvio();

// Injeto as dependências no ServicoPedido

ServicoPedido servicoPedido = new ServicoPedido(repositorio, processador, gerenciador);

Produto motoserra = new Produto("Motoserra", 1500.00);
Produto capacete = new Produto("Capacete", 300.00);
Produto luvas = new Produto("Luvas", 50.00);
List itens = List.of(motoserra, capacete, luvas);

Pedido pedido = new Pedido(itens, "Rua das Flores, 123");
servicoPedido.criarNovoPedido(pedido);
servicoPedido.processarPedido(1L);
servicoPedido.enviarPedido(1l);
}

}
9 changes: 9 additions & 0 deletions src/com/lojaonline/envio/GerenciadorEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.lojaonline.envio;

public class GerenciadorEnvio {
public void enviarPedido(String endereco) {
// Lógica para enviar o pedido para o endereço fornecido
System.out.println("Enviando pedido para: " + endereco);
}

}
6 changes: 6 additions & 0 deletions src/com/lojaonline/notificacao/Notificador.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.lojaonline.notificacao;

public interface Notificador {
void notificar(String mensagem);

}
10 changes: 10 additions & 0 deletions src/com/lojaonline/notificacao/NotificadorEmail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.lojaonline.notificacao;

public class NotificadorEmail implements Notificador{

@Override
public void notificar(String mensagem) {
System.out.println("Enviando notificação por Email: " + mensagem);

}
}
10 changes: 10 additions & 0 deletions src/com/lojaonline/notificacao/NotificadorSMS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.lojaonline.notificacao;

public class NotificadorSMS implements Notificador{
@Override
public void notificar(String mensagem) {
System.out.println("Enviando notificação por SMS: " + mensagem);

}

}
10 changes: 10 additions & 0 deletions src/com/lojaonline/pagamento/Boleto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.lojaonline.pagamento;

public class Boleto implements MetodoPagamento{

@Override
public void processarPagamento(double valor) {
System.out.println("Processando pagamento via Boleto no valor de: R$" + valor);

}
}
10 changes: 10 additions & 0 deletions src/com/lojaonline/pagamento/CartaoCredito.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.lojaonline.pagamento;

public class CartaoCredito implements MetodoPagamento{

@Override
public void processarPagamento(double valor) {
System.out.println("Processando pagamento via Cartão de Crédito no valor de: R$" + valor);

}
}
6 changes: 6 additions & 0 deletions src/com/lojaonline/pagamento/MetodoPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.lojaonline.pagamento;

public interface MetodoPagamento {
void processarPagamento(double valor);

}
9 changes: 9 additions & 0 deletions src/com/lojaonline/pagamento/Pix.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.lojaonline.pagamento;

public class Pix implements MetodoPagamento{

@Override
public void processarPagamento(double valor) {
System.out.println("Processando pagamento via Pix no valor de: R$" + valor);
}
}
16 changes: 16 additions & 0 deletions src/com/lojaonline/pagamento/ProcessadorPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.lojaonline.pagamento;

public class ProcessadorPagamento<T extends MetodoPagamento> {
T metodoPagamento;

public ProcessadorPagamento(T metodoPagamento) {
this.metodoPagamento = metodoPagamento;
}


public void processar(double valor) {
metodoPagamento.processarPagamento(valor);
}


}
45 changes: 45 additions & 0 deletions src/com/lojaonline/pedido/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.lojaonline.pedido;

import com.lojaonline.produtos.Produto;
import java.util.List;

public class Pedido {
List<Produto> itens;
String status;

String enderecoEntrega;

public Pedido(List<Produto> itens, String enderecoEntrega ) {
this.itens = itens;
this.status = "PENDENTE";
this.enderecoEntrega = enderecoEntrega;
}

public List<Produto> getItens() {
return itens;
}

public double calcularTotal() {
return itens.stream().mapToDouble(Produto::getPreco).sum();
}

public void addItem(Produto produto) {
itens.add(produto);
}

public void removerItem(Produto produto) {
itens.remove(produto);
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public String getEnderecoEntrega() {
return enderecoEntrega;
}
}
22 changes: 22 additions & 0 deletions src/com/lojaonline/produtos/Produto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.lojaonline.produtos;

public class Produto {

private String nome;
private double preco;

public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}

public String getNome() {
return nome;
}

public double getPreco() {
return preco;
}


}
47 changes: 47 additions & 0 deletions src/com/lojaonline/repositorio/JpaPedidoRepositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.lojaonline.repositorio;

import com.lojaonline.pedido.Pedido;
import java.util.List;

public class JpaPedidoRepositorio implements PedidoRepositorio {

@Override
public void salvar(Pedido pedido) {

}

@Override
public Pedido buscarPorId(long id) {
return null;
}

@Override
public List<Pedido> buscarPorStatus(String status) {
return null;
}

@Override
public void salvar(Object obj) {

}

@Override
public void atualizar(Object obj) {

}

@Override
public void deletar(Object obj) {

}

@Override
public Object buscarPorId(int id) {
return null;
}

@Override
public List<Object> buscarTodos() {
return null;
}
}
14 changes: 14 additions & 0 deletions src/com/lojaonline/repositorio/PedidoRepositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.lojaonline.repositorio;

import com.lojaonline.pedido.Pedido;
import java.util.List;

public interface PedidoRepositorio extends Repositorio {

void salvar(Pedido pedido);

Pedido buscarPorId(long id);

List<Pedido> buscarPorStatus(String status);

}
17 changes: 17 additions & 0 deletions src/com/lojaonline/repositorio/Repositorio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.lojaonline.repositorio;

import java.util.List;

public interface Repositorio {

public void salvar(Object obj);

public void atualizar(Object obj);

public void deletar(Object obj);

public Object buscarPorId(int id);

public List<Object> buscarTodos();

}
Loading