From ebcc179a5c6a48c0df6c34637acc71dc3275548d Mon Sep 17 00:00:00 2001 From: lougans meneses Date: Mon, 25 Aug 2025 21:56:09 -0300 Subject: [PATCH 1/5] nova branch da aula --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ea7bec0..4a87739 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 From 174423f5a3a97c7bcb28cb673fde3a6711747040 Mon Sep 17 00:00:00 2001 From: Lougans Meneses <140202725+Lougans-meneses@users.noreply.github.com> Date: Thu, 28 Aug 2025 22:21:55 -0300 Subject: [PATCH 2/5] Update README.md add mais exercicios --- README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/README.md b/README.md index 4a87739..d165230 100644 --- a/README.md +++ b/README.md @@ -59,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. From cc0830398bc3c911d2e73fa88ed60643deb48d64 Mon Sep 17 00:00:00 2001 From: lougans meneses Date: Mon, 1 Sep 2025 22:35:18 -0300 Subject: [PATCH 3/5] salvando --- src/exemplo/imposto/Dedutivel.java | 2 ++ 1 file changed, 2 insertions(+) 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 { + + } From 741be383cdf39b26f6a5359ae85dca8b541898cd Mon Sep 17 00:00:00 2001 From: lougans meneses Date: Mon, 1 Sep 2025 22:53:18 -0300 Subject: [PATCH 4/5] desafio resolvido --- src/Desafio/EnvioCorreios.java | 8 +++++++ src/Desafio/EnvioTransportadora.java | 8 +++++++ src/Desafio/LojaOnline.java | 20 ++++++++++++++++ src/Desafio/MetodoEnvio.java | 5 ++++ src/Desafio/MetodoPagamento.java | 5 ++++ src/Desafio/PagamentoCartao.java | 8 +++++++ src/Desafio/PagamentoPayPal.java | 8 +++++++ src/Desafio/PagamentoPix.java | 8 +++++++ src/Desafio/Pedido.java | 36 ++++++++++++++++++++++++++++ src/Desafio/PedidoService.java | 17 +++++++++++++ 10 files changed, 123 insertions(+) create mode 100644 src/Desafio/EnvioCorreios.java create mode 100644 src/Desafio/EnvioTransportadora.java create mode 100644 src/Desafio/LojaOnline.java create mode 100644 src/Desafio/MetodoEnvio.java create mode 100644 src/Desafio/MetodoPagamento.java create mode 100644 src/Desafio/PagamentoCartao.java create mode 100644 src/Desafio/PagamentoPayPal.java create mode 100644 src/Desafio/PagamentoPix.java create mode 100644 src/Desafio/Pedido.java create mode 100644 src/Desafio/PedidoService.java diff --git a/src/Desafio/EnvioCorreios.java b/src/Desafio/EnvioCorreios.java new file mode 100644 index 0000000..19ae8ba --- /dev/null +++ b/src/Desafio/EnvioCorreios.java @@ -0,0 +1,8 @@ +package Desafio; + +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.java b/src/Desafio/EnvioTransportadora.java new file mode 100644 index 0000000..ef20f2b --- /dev/null +++ b/src/Desafio/EnvioTransportadora.java @@ -0,0 +1,8 @@ +package Desafio; + +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.java b/src/Desafio/LojaOnline.java new file mode 100644 index 0000000..07ed511 --- /dev/null +++ b/src/Desafio/LojaOnline.java @@ -0,0 +1,20 @@ +package Desafio; + +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.java b/src/Desafio/MetodoEnvio.java new file mode 100644 index 0000000..d87a34f --- /dev/null +++ b/src/Desafio/MetodoEnvio.java @@ -0,0 +1,5 @@ +package Desafio; + +public interface MetodoEnvio { + void enviar(Pedido pedido); +} diff --git a/src/Desafio/MetodoPagamento.java b/src/Desafio/MetodoPagamento.java new file mode 100644 index 0000000..ddda14d --- /dev/null +++ b/src/Desafio/MetodoPagamento.java @@ -0,0 +1,5 @@ +package Desafio; + +public interface MetodoPagamento { + void pagar(double valor); +} diff --git a/src/Desafio/PagamentoCartao.java b/src/Desafio/PagamentoCartao.java new file mode 100644 index 0000000..79f9170 --- /dev/null +++ b/src/Desafio/PagamentoCartao.java @@ -0,0 +1,8 @@ +package Desafio; + +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..389300c --- /dev/null +++ b/src/Desafio/PagamentoPayPal.java @@ -0,0 +1,8 @@ +package Desafio; + +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.java b/src/Desafio/PagamentoPix.java new file mode 100644 index 0000000..198de0d --- /dev/null +++ b/src/Desafio/PagamentoPix.java @@ -0,0 +1,8 @@ +package Desafio; + +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.java b/src/Desafio/Pedido.java new file mode 100644 index 0000000..c587e82 --- /dev/null +++ b/src/Desafio/Pedido.java @@ -0,0 +1,36 @@ +package Desafio; + +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.java b/src/Desafio/PedidoService.java new file mode 100644 index 0000000..a379300 --- /dev/null +++ b/src/Desafio/PedidoService.java @@ -0,0 +1,17 @@ +package Desafio; + +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); + } +} From bc74a7e0aed776b6de7d636315b392857c1e9f19 Mon Sep 17 00:00:00 2001 From: lougans meneses Date: Mon, 1 Sep 2025 23:01:30 -0300 Subject: [PATCH 5/5] resolvendo desafio 6 --- src/Desafio/EnvioCorreios.class | Bin 0 -> 962 bytes src/Desafio/EnvioCorreios.java | 2 +- src/Desafio/EnvioTransportadora.class | Bin 0 -> 978 bytes src/Desafio/EnvioTransportadora.java | 2 +- src/Desafio/LojaOnline.class | Bin 0 -> 947 bytes src/Desafio/LojaOnline.java | 2 +- src/Desafio/MetodoEnvio.class | Bin 0 -> 134 bytes src/Desafio/MetodoEnvio.java | 2 +- src/Desafio/MetodoPagamento.class | Bin 0 -> 134 bytes src/Desafio/MetodoPagamento.java | 2 +- src/Desafio/PagamentoCartao.class | Bin 0 -> 908 bytes src/Desafio/PagamentoCartao.java | 2 +- src/Desafio/PagamentoPayPal.java | 2 +- src/Desafio/PagamentoPix.class | Bin 0 -> 886 bytes src/Desafio/PagamentoPix.java | 2 +- src/Desafio/Pedido.class | Bin 0 -> 1417 bytes src/Desafio/Pedido.java | 2 +- src/Desafio/PedidoService.class | Bin 0 -> 1282 bytes src/Desafio/PedidoService.java | 2 +- 19 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 src/Desafio/EnvioCorreios.class create mode 100644 src/Desafio/EnvioTransportadora.class create mode 100644 src/Desafio/LojaOnline.class create mode 100644 src/Desafio/MetodoEnvio.class create mode 100644 src/Desafio/MetodoPagamento.class create mode 100644 src/Desafio/PagamentoCartao.class create mode 100644 src/Desafio/PagamentoPix.class create mode 100644 src/Desafio/Pedido.class create mode 100644 src/Desafio/PedidoService.class diff --git a/src/Desafio/EnvioCorreios.class b/src/Desafio/EnvioCorreios.class new file mode 100644 index 0000000000000000000000000000000000000000..09465489b68e8105144e22115614fd965713617f GIT binary patch literal 962 zcmaJ=T~8B16g`(h7na4=0wOB7C}0an{eD?vqK!n7sw5@&;M24_DMPn2&F++hf8yWJ z2TXYI2l%6mce@x$+W0W{-kCY)%)NJJe*d}n1>h}SxtKuC!K8;N7@>tPn&HF)DJv9il3(`V9ReITSv^&nQ-Hf$_KH*j$S z1qVeBH&J5c0~xB&5T@GF?uUehawX#p5@3?j?V!YoE_hhPEy7Y)bY#uwmat!xJ?1E} zLfeF}SsrDM5p!`H%MR{%xQly)`7v1%oL-u9q`8c7sz(l133KoDsWLSa$5NTZflrwI zD6I+2V1qDOGod6D>PpK`{ccmnhoTwrN?tNk#EdW3vknB6BZAv7{kSFfREjBGQ{PR~ zunDb_;oIyV${F2fJw>tAzEdYgYQy zbYwMacGlWG(Xu8!BYYb!{}PxT{Xyt3lF54Am`=YJjP`zLiLhb zUE|pbdtyJe^%L}+1HuEg={AsK`w;7FQ|Jy;C)gK%z}Y^>+y&-=b1Yr4(odLj3vigb b!SMt(@reC2Yi#i-;|b4Pj-KK5H>#Sy?18MIdkUD%%8tkzX80*8w(3aaV*+MBg2rt5F=6bh3Zzn zv@c}GFl63($}{g6Ql)Zh30W+0ST>en&%hhw(8xZa^pHsF^@)(Dt7n0yOv40H^c@Sg zk>kkQxPui^K9jEJYKC-Inp2lytyGSA69Yu@RM%M{qiZ(SahGAEFM6`3RY#bwo;jx~ zG(wq>VZSubOc1lMi7k$MHtypA!)k&{20n;9`---aq}t-xA?imp@^mv0Djev*2v-M! zqrkBINgD0y$!~_mnsy~auI?%MdDw5upefou&159;ML_scJ??{3ZZTL5Jq$YX*o!cm z32Rg$%hdS~TAR=WVnEBCYd6fI%utM#3al_ucXffh6=qFVav2<2IKoqoO4QdX@otXY zQzPAz)wua_tB*y;=wQt7eYzdjza9zVsku@3Gi=I`1m3^ z)2DeYQ4_x3@QidA>{F#=Q1e9?%8=s)!`|GUlB{yPV%YgVlnyK27k05t?}gzZ-N`7^ zo1wT%qixEJa{AyG*bgcg9#M>b11XA+QKT3_kBGWJIsX&<@DjJKunJsaCukRk0(GhK)#K7jAx z3#f@S+QbL&p^SI72q9s9%$<*O&YgSa{`vdsH-J^VbV)j>Z~G@zzC`AQWTD`-MH|x$J-I8x!7QFwck=$FvJVWr;sYrZs(+SDD)mbteT4&mx1}(_t!NEsg%`;u80k3z^O~gDN`E8 z@S2*{j1DloI%wi<3nLW9nz*+;nLWe9?-=*;XPAlT&xpR0^PZ=%aKTz4 z_^TF{DXbD}A$~iaBi`k!rqD(C6V&=i^ilf{(fej;HxHN0?7HZd?T S0*z&5U<0uj*nuPy0|x+=5FV`n literal 0 HcmV?d00001 diff --git a/src/Desafio/MetodoEnvio.java b/src/Desafio/MetodoEnvio.java index d87a34f..88ba478 100644 --- a/src/Desafio/MetodoEnvio.java +++ b/src/Desafio/MetodoEnvio.java @@ -1,4 +1,4 @@ -package Desafio; + public interface MetodoEnvio { void enviar(Pedido pedido); diff --git a/src/Desafio/MetodoPagamento.class b/src/Desafio/MetodoPagamento.class new file mode 100644 index 0000000000000000000000000000000000000000..e934dfb10779792b8e5431b2daa1a33a564b0246 GIT binary patch literal 134 zcmX^0Z`VEs1_nn4PId++Mh1T0)RO#^{D8#t#N5=pl6-as7Dfhvti-ZJ{hY+SbbbG% ztkmQZMh4abpo$_!1{Mt$%`ip=uHgLAqU2P!%$!t41`#wf^g!C#7#SEDn1MDiFfam* QWMyCju^8BaBohM%0H$gl(EtDd literal 0 HcmV?d00001 diff --git a/src/Desafio/MetodoPagamento.java b/src/Desafio/MetodoPagamento.java index ddda14d..452cbca 100644 --- a/src/Desafio/MetodoPagamento.java +++ b/src/Desafio/MetodoPagamento.java @@ -1,4 +1,4 @@ -package Desafio; + public interface MetodoPagamento { void pagar(double valor); diff --git a/src/Desafio/PagamentoCartao.class b/src/Desafio/PagamentoCartao.class new file mode 100644 index 0000000000000000000000000000000000000000..533e270964e6f6a179595fbe71141254e8968ab8 GIT binary patch literal 908 zcmaJ=O>fgc5PjP;acf*s`avnsV%n4@1rj8VK}cX!ffS%3RXA|k#H(~0dpEK-mBKIK z&WR%&KwU;LTxbL`*0>Aku2%TuAELK_ZoDnndup zzC<~%dnjU&VJ+r85op!n=A$%6maUF-MWhQRVcHqfD&~e zo#gw(PY6JDwiw)|9wZ&HFKujPB#>!WZJE@kms*?DB)m^)j&zvLVVmLU2<(T#|4?E+ zbt#gcd8qx4j(sa}_Ep6E`j?_BmOi2Zvzy$e)2vnL+P{Zi>Dw O?9t98?;#$ehV_5@XYGyv literal 0 HcmV?d00001 diff --git a/src/Desafio/PagamentoCartao.java b/src/Desafio/PagamentoCartao.java index 79f9170..8aba124 100644 --- a/src/Desafio/PagamentoCartao.java +++ b/src/Desafio/PagamentoCartao.java @@ -1,4 +1,4 @@ -package Desafio; + public class PagamentoCartao implements MetodoPagamento { @Override diff --git a/src/Desafio/PagamentoPayPal.java b/src/Desafio/PagamentoPayPal.java index 389300c..32a8a69 100644 --- a/src/Desafio/PagamentoPayPal.java +++ b/src/Desafio/PagamentoPayPal.java @@ -1,4 +1,4 @@ -package Desafio; + public class PagamentoPayPal implements MetodoPagamento { @Override diff --git a/src/Desafio/PagamentoPix.class b/src/Desafio/PagamentoPix.class new file mode 100644 index 0000000000000000000000000000000000000000..735be43e7968eb70e06840bbe9832d68cdc12ea9 GIT binary patch literal 886 zcmaJ=T~8B16g@*}2iC>%AtEZcLXj4=^}WVKYltLO8%nAPPt)$C4Bee+cBhT?m-sjI zK@%SQ0sbiCU6z!RHa_gVcV^Bx_s*TWfBs(l2Jjj$9LyoZG4CRa9K-Ut7>Y_Dbhq-c zeJ(qeA@@>gWnVF5ilx>f7O=?SxVQ!P2D~|ntqcie21Ht~UkWKxX+%ofrj4WstE-gr zwu?NL88$-ElQp9|!hTZrjH1{IZDZmV-*RbON8wOLg+;t|V$A2%5^uD)s(IYZ=u75yvv-c*d|d zb*EXSa+Ddi{|}{6P49)r*r2gy*ra(&JdHNl2ejHE&&X#Fet~_bfZ-w8=DIt@F+9r522T$ZwCjoawvL==cr)wAI`ty A-v9sr literal 0 HcmV?d00001 diff --git a/src/Desafio/PagamentoPix.java b/src/Desafio/PagamentoPix.java index 198de0d..6efa5ac 100644 --- a/src/Desafio/PagamentoPix.java +++ b/src/Desafio/PagamentoPix.java @@ -1,4 +1,4 @@ -package Desafio; + public class PagamentoPix implements MetodoPagamento{ @Override diff --git a/src/Desafio/Pedido.class b/src/Desafio/Pedido.class new file mode 100644 index 0000000000000000000000000000000000000000..6a02c496a85e83f0a309ac89d8cba45dc3852159 GIT binary patch literal 1417 zcmaJ>>rN9v6#k}Awrsah3k9iyMY*))Qm-f!FVIRPK`|+TpudLh2n)+D*`1OQ<9qlP zY63wq@d11&ejBPNrsMj!!qPEhPGUOT|tbY#|PD=VHOu0haasNu2i9*trKx*3KAN+&`r#@LN|1q zA!r%#{fguWeEz4>qJcF zLd+oaQvRK%e?!Af3^J&P+_arFTXK_uRaD$UR>81_+qiS-;(=cVg$Q-A`hj7rm3YWs zBhnP5bX3C_#u@te`JO1-R*lOIL+;SbmE4k)gxRoIgW0TA$v5vYbXJXRi_5wr7)Ans zUj{Fk^UZ{3r7MYPxXZ6Iw3lt2RJvCTOT4M?ZwY6OZ<(}{;JQ&WY>PX~QtUJIwTQRk zDMYu0T&C3b=32&@pyTyW%Bg)S3^8e+=U1)Tb*Cnl49{yk=#^=&x>Sut+m^0$_`z!- zcWm8_;R!=7z6#Q=2Vn0ui&Xy4{F{Kzis@!GOR;; zPZWbNf)Xw9nzWrGhR@;4Hh@70ueha~!W~($?Y;UzsX5u9olC^EqXW?b{yv01@7K^) zL!!)0vr5;bLTbyFC7iO!U01jY78pjG?$jz&1!abz|3m4m2KT}+y_g8~aT{5BmNbia zj~SGGf1al`Jtvw+X)lTb*$Gx&J(DGi4!Eh5rAQmYzpmU<78tb zs-YJNI+?>r&G|7(LsT2HKQD5fMcM<*OF)+xT>d^2WKX7?P^ zRt4n2s!Kq1z=j4YdyY!C60wHQGX zDGg~I8O)JVz8X}>icm#vNoQXwZZ(x#jba{I4Ucp@#uHNNiYyF0HB!xC2qjlj#VDTQ znTF>&USN@Q^3g4w!h-bjpwVRBcWI=G43o)gT6YNQVL~}s_WC4m+G3|(JrK@5Kd`)= znj=fXb-8nyM5G|=PD!kr-tR<5qs@EOB2ibQRIYM(jlw&WWw#g0UQf1|?6RC-@i1}` ztYS^Wx~JWHhN*u&ZrTlbEV6z2Di(WaHsN89@lHe^-gKq z=`h?ssfjM|Pi=Vr)OEC9iz3G@t6(Z&FzB1MEu5UiU01joJ}^vQ%c)za8uAR||A$f= z`FUZI4r+jUK0pth_U0Fz+U88{f|p=;MXLqx3ZXfk{sETGoI*>_og(&?wipZ=69~~r zmyCCL(9@3y{aM0di(re)Jx8gM$f)=sNITixAN*trR kq#t86&QNqgye6su-rz0Gz2str-gnrbmFIR7TiC|vU#GT5cK`qY literal 0 HcmV?d00001 diff --git a/src/Desafio/PedidoService.java b/src/Desafio/PedidoService.java index a379300..984d375 100644 --- a/src/Desafio/PedidoService.java +++ b/src/Desafio/PedidoService.java @@ -1,4 +1,4 @@ -package Desafio; + public class PedidoService { private MetodoPagamento metodoPagamento;