diff --git a/Album/src/Colecionavel.java b/Album/src/Colecionavel.java new file mode 100644 index 0000000..3047e7d --- /dev/null +++ b/Album/src/Colecionavel.java @@ -0,0 +1,8 @@ +import java.awt.*; + +public interface Colecionavel { + + Image getImagem(); + + int getPosicao(); +} diff --git a/Album/src/ColecionavelFactory.java b/Album/src/ColecionavelFactory.java new file mode 100644 index 0000000..6bf9211 --- /dev/null +++ b/Album/src/ColecionavelFactory.java @@ -0,0 +1,14 @@ +public class ColecionavelFactory { + + public static Colecionavel create(String tipo, int posicao, String urlDaImagem) { + + switch (tipo.toLowerCase()) { + case "figurinha": + return new Figurinha(posicao, urlDaImagem); + case "selo": + return new Selo(posicao, urlDaImagem, 0); + default: + return null; + } + } +} diff --git a/Album/src/Figurinha.java b/Album/src/Figurinha.java index a97ca20..9ed4ff1 100644 --- a/Album/src/Figurinha.java +++ b/Album/src/Figurinha.java @@ -1,6 +1,6 @@ import java.awt.*; -public class Figurinha { +public class Figurinha implements Colecionavel { private final Image imagem; private final int posicao; diff --git a/Album/src/Repositorio.java b/Album/src/Repositorio.java index f1a4a4e..eef8f09 100644 --- a/Album/src/Repositorio.java +++ b/Album/src/Repositorio.java @@ -1,16 +1,18 @@ import java.util.ArrayList; import java.util.List; -public class Repositorio { +public class Repositorio { private static final String PREFIXO_URL_IMAGENS = "http://www.nossoalbum.com.br/imagens/"; - private List todasAsFigurinhas; + private List todasAsFigurinhas; - public Repositorio(String sufixoUrlImagens, int quantFigurinhas) { + @SuppressWarnings("unchecked") + public Repositorio(String sufixoUrlImagens, int quantFigurinhas, T objetoReferencia) { todasAsFigurinhas = new ArrayList<>(quantFigurinhas); for (int i = 1; i <= quantFigurinhas; i++) { - Figurinha fig = new Figurinha(i, PREFIXO_URL_IMAGENS + sufixoUrlImagens); + T fig = (T) ColecionavelFactory.create( + objetoReferencia.getClass().getName(), i, PREFIXO_URL_IMAGENS + sufixoUrlImagens); todasAsFigurinhas.add(fig); } } diff --git a/Album/src/Selo.java b/Album/src/Selo.java new file mode 100644 index 0000000..a4a25fd --- /dev/null +++ b/Album/src/Selo.java @@ -0,0 +1,18 @@ +import java.awt.*; + +public class Selo implements Colecionavel { + + public Selo(int posicao, String urlDaImagem, float valorMonetario) { + + } + + @Override + public Image getImagem() { + return null; + } + + @Override + public int getPosicao() { + return 0; + } +} diff --git a/LojaVirtual/.idea/uiDesigner.xml b/LojaVirtual/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/LojaVirtual/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LojaVirtual/LAB3.txt b/LojaVirtual/LAB3.txt index fb29385..c95041c 100644 --- a/LojaVirtual/LAB3.txt +++ b/LojaVirtual/LAB3.txt @@ -1,6 +1,6 @@ LAB 3: -Faça os unit testes em LojaTest passarem, +Faça os unit testes em test.LojaTest passarem, segundo o espírito do Test-Driven Development. PS.: Tente não modificar os testes! diff --git a/LojaVirtual/src/Loja.java b/LojaVirtual/src/controle/Loja.java similarity index 93% rename from LojaVirtual/src/Loja.java rename to LojaVirtual/src/controle/Loja.java index ca6e534..ebac573 100644 --- a/LojaVirtual/src/Loja.java +++ b/LojaVirtual/src/controle/Loja.java @@ -1,10 +1,17 @@ +package controle; + +import modelo.Usuario; +import modelo.produto.Produto; +import util.Transportador; +import util.Vendavel; + import java.awt.*; import java.util.HashMap; import java.util.Map; import java.util.Set; /** - * Implementa uma loja virtual para qualquer tipo de Vendavel, + * Implementa uma loja virtual para qualquer tipo de util.Vendavel, * desde que tenham descrição, preço e dimensões. * * Essa classe será um singleton, isto é, permitiremos apenas @@ -12,7 +19,7 @@ */ public class Loja { // SEMPRE extends - static final float PRECO_DEFAULT = 1.99f; + public static final float PRECO_DEFAULT = 1.99f; private Map infoByVendavel; @@ -24,7 +31,7 @@ public class Loja { // SEMPRE extends static { - System.out.println("Estou subindo a classe Loja..."); + System.out.println("Estou subindo a classe controle.Loja..."); } public Loja(Transportador entregador) { @@ -95,7 +102,7 @@ private Usuario obterUsuario(long cpf) { * @param vendavel o vendavel * @param quantidadeDesejada a quantidade * - * @return um Recibo indicando a venda feita, se o vendavel existia (em quantidade suficiente) + * @return um controle.Recibo indicando a venda feita, se o vendavel existia (em quantidade suficiente) * no vendavels da loja; null, caso o usuário ou o vendavel sejam desconhecidos, * ou não haja quantidade suficiente do vendavel desejado */ diff --git a/LojaVirtual/src/Recibo.java b/LojaVirtual/src/controle/Recibo.java similarity index 84% rename from LojaVirtual/src/Recibo.java rename to LojaVirtual/src/controle/Recibo.java index 3a36068..37c46de 100644 --- a/LojaVirtual/src/Recibo.java +++ b/LojaVirtual/src/controle/Recibo.java @@ -1,3 +1,8 @@ +package controle; + +import modelo.Usuario; +import util.Vendavel; + public class Recibo { private float valorTotal; @@ -22,7 +27,7 @@ public Usuario getUsuario() { @Override public String toString() { - return String.format("Recibo no valor de R$%.2f para %s " + + return String.format("controle.Recibo no valor de R$%.2f para %s " + "referente à compra de %d unidades de %s", this.valorTotal, usuario.getNome(), this.quantidade, this.vendavel.getDescricao()); diff --git a/LojaVirtual/src/exception/ItemEsgotadoException.java b/LojaVirtual/src/exception/ItemEsgotadoException.java new file mode 100644 index 0000000..652c8cc --- /dev/null +++ b/LojaVirtual/src/exception/ItemEsgotadoException.java @@ -0,0 +1,4 @@ +package exception; + +public class ItemEsgotadoException extends Exception { +} diff --git a/LojaVirtual/src/Usuario.java b/LojaVirtual/src/modelo/Usuario.java similarity index 98% rename from LojaVirtual/src/Usuario.java rename to LojaVirtual/src/modelo/Usuario.java index f1518db..c9c22f0 100644 --- a/LojaVirtual/src/Usuario.java +++ b/LojaVirtual/src/modelo/Usuario.java @@ -1,3 +1,5 @@ +package modelo; + import java.util.Objects; public class Usuario { diff --git a/LojaVirtual/src/Brinquedo.java b/LojaVirtual/src/modelo/produto/Brinquedo.java similarity index 92% rename from LojaVirtual/src/Brinquedo.java rename to LojaVirtual/src/modelo/produto/Brinquedo.java index 7f2161f..cc9679e 100644 --- a/LojaVirtual/src/Brinquedo.java +++ b/LojaVirtual/src/modelo/produto/Brinquedo.java @@ -1,3 +1,5 @@ +package modelo.produto; + public class Brinquedo extends Produto implements LivroOuBrinquedo { public Brinquedo(String descricao) { diff --git a/LojaVirtual/src/Livro.java b/LojaVirtual/src/modelo/produto/Livro.java similarity index 79% rename from LojaVirtual/src/Livro.java rename to LojaVirtual/src/modelo/produto/Livro.java index 4856273..1dc9816 100644 --- a/LojaVirtual/src/Livro.java +++ b/LojaVirtual/src/modelo/produto/Livro.java @@ -1,7 +1,10 @@ +package modelo.produto; + public class Livro extends Produto implements LivroOuBrinquedo { private String nome; private String editora; + private int anoPublicacao; public Livro(String nome, String editora) { super(formatarDescricaoLivro(nome, editora)); @@ -22,7 +25,11 @@ public String getAutor() { } public int getAnoDePublicacao() { - return 0; // ToDo IMPLEMENT ME!!!! + return anoPublicacao; + } + + public void setAnoPublicacao(int anoPublicacao) { + this.anoPublicacao = anoPublicacao; } public String getNome() { @@ -41,7 +48,7 @@ public void setEditora(String editora) { this.editora = editora; } - private static String formatarDescricaoLivro(String nome, String editora) { + public static String formatarDescricaoLivro(String nome, String editora) { return String.format("Livro: %s (editora: %s)", nome, editora); } diff --git a/LojaVirtual/src/LivroOuBrinquedo.java b/LojaVirtual/src/modelo/produto/LivroOuBrinquedo.java similarity index 53% rename from LojaVirtual/src/LivroOuBrinquedo.java rename to LojaVirtual/src/modelo/produto/LivroOuBrinquedo.java index 8a1ffe5..bfc50dc 100644 --- a/LojaVirtual/src/LivroOuBrinquedo.java +++ b/LojaVirtual/src/modelo/produto/LivroOuBrinquedo.java @@ -1,3 +1,7 @@ +package modelo.produto; + +import util.Vendavel; + public interface LivroOuBrinquedo extends Vendavel { } diff --git a/LojaVirtual/src/Produto.java b/LojaVirtual/src/modelo/produto/Produto.java similarity index 92% rename from LojaVirtual/src/Produto.java rename to LojaVirtual/src/modelo/produto/Produto.java index 582e284..1cb4e72 100644 --- a/LojaVirtual/src/Produto.java +++ b/LojaVirtual/src/modelo/produto/Produto.java @@ -1,3 +1,9 @@ +package modelo.produto; + +import util.Transportavel; +import util.Dimensoes; +import util.Vendavel; + import java.awt.*; import java.util.Objects; diff --git a/LojaVirtual/src/Servico.java b/LojaVirtual/src/modelo/servico/Servico.java similarity index 90% rename from LojaVirtual/src/Servico.java rename to LojaVirtual/src/modelo/servico/Servico.java index 70bc415..2403dd5 100644 --- a/LojaVirtual/src/Servico.java +++ b/LojaVirtual/src/modelo/servico/Servico.java @@ -1,3 +1,5 @@ +package modelo.servico; + import java.util.Date; public class Servico { diff --git a/LojaVirtual/src/ServicoEntregas.java b/LojaVirtual/src/modelo/servico/ServicoEntregas.java similarity index 79% rename from LojaVirtual/src/ServicoEntregas.java rename to LojaVirtual/src/modelo/servico/ServicoEntregas.java index 0ad802c..a70ac27 100644 --- a/LojaVirtual/src/ServicoEntregas.java +++ b/LojaVirtual/src/modelo/servico/ServicoEntregas.java @@ -1,3 +1,8 @@ +package modelo.servico; + +import util.Transportador; +import util.Transportavel; + public class ServicoEntregas extends Servico implements Transportador { @Override diff --git a/LojaVirtual/src/ServicoImpressao.java b/LojaVirtual/src/modelo/servico/ServicoImpressao.java similarity index 84% rename from LojaVirtual/src/ServicoImpressao.java rename to LojaVirtual/src/modelo/servico/ServicoImpressao.java index 921fb4d..51581e6 100644 --- a/LojaVirtual/src/ServicoImpressao.java +++ b/LojaVirtual/src/modelo/servico/ServicoImpressao.java @@ -1,3 +1,7 @@ +package modelo.servico; + +import util.Vendavel; + public class ServicoImpressao extends Servico implements Vendavel { @Override diff --git a/LojaVirtual/src/LojaTest.java b/LojaVirtual/src/test/LojaTest.java similarity index 87% rename from LojaVirtual/src/LojaTest.java rename to LojaVirtual/src/test/LojaTest.java index c046c2a..56d587c 100644 --- a/LojaVirtual/src/LojaTest.java +++ b/LojaVirtual/src/test/LojaTest.java @@ -1,5 +1,19 @@ +package test; + +import controle.Loja; +import controle.Recibo; +import modelo.Usuario; +import modelo.produto.Brinquedo; +import modelo.produto.Livro; +import modelo.produto.LivroOuBrinquedo; +import modelo.produto.Produto; +import modelo.servico.Servico; +import modelo.servico.ServicoEntregas; +import modelo.servico.ServicoImpressao; import org.junit.Before; import org.junit.Test; +import util.Caminhao; +import util.Vendavel; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -108,7 +122,7 @@ private void verificarVendaBemSucedida(Loja loja, Vendavel vendavel, int quantid assertNotNull(recibo); assertEquals(comprador, recibo.getUsuario()); assertEquals(valorEsperadoDaCompra, recibo.getValorTotalDaCompra(), FLOAT_DELTA); - assertEquals(String.format("Recibo no valor de R$%.2f para Fulano " + + assertEquals(String.format("controle.Recibo no valor de R$%.2f para Fulano " + "referente à compra de %d unidades de %s", valorEsperadoDaCompra, quantidadeComprada, vendavel.getDescricao()), recibo.toString()); @@ -153,7 +167,7 @@ public void testarPerformance() { System.out.println("Incluindo " + QUANT_VENDAVELS + " vendavels..."); long inicio = System.currentTimeMillis(); for (int i = 1; i <= QUANT_VENDAVELS; i++) { - Produto novoVendavel = new Produto("Produto " + i); + Produto novoVendavel = new Produto("modelo.produto.Produto " + i); loja1.incluirVendavel(novoVendavel, 2); } long duracao = System.currentTimeMillis() - inicio; @@ -163,7 +177,7 @@ public void testarPerformance() { inicio = System.currentTimeMillis(); int contTotalEstoque = 0; for (int i = 1; i <= QUANT_VENDAVELS; i++) { - Produto produtoASerConsultado = new Produto("Produto " + i); + Produto produtoASerConsultado = new Produto("modelo.produto.Produto " + i); contTotalEstoque += loja1.informarQuantidadeEmEstoque( produtoASerConsultado); @@ -181,12 +195,17 @@ public void testartLojaQueVendoAlgoEspecifico() { // livraria.incluirVendavel(cuboMagico, 50); // livraria.incluirVendavel(caminhao, 2); - // eu gostaria que a linha abaixo COMPILASSE direitinho, sem necessidade de typecast - Livro livroDaLoja = livraria.obterItem("O Pequeno Príncipe"); - assertEquals(1882, livroDaLoja.getAnoDePublicacao()); - + String nome = "O Pequeno Príncipe"; + String editora = "Editora Blah"; + Livro livro = new Livro(nome, editora); + livro.setAnoPublicacao(1882); + livraria.incluirVendavel(livro, 10); + final String descricao = Livro.formatarDescricaoLivro(nome, editora); + // eu quero que a linha abaixo COMPILE direitinho, sem necessidade de typecast + Livro livroDaLoja = livraria.obterItem(descricao); + assertEquals(1882, livroDaLoja.getAnoDePublicacao()); Loja lojaDeBrinquedos = new Loja<>(caminhao); @@ -194,12 +213,8 @@ public void testartLojaQueVendoAlgoEspecifico() { // lojaDeBrinquedos.incluirVendavel(guinessBook, 2); // lojaDeBrinquedos.incluirVendavel(caminhao, 50); - // eu gostaria que a linha abaixo COMPILASSE direitinho, sem necessidade de typecast + // eu gostaria que a linha abaixo COMPILASSE direitinho, sem necessidade de typecast Brinquedo brinquedoDaLoja = lojaDeBrinquedos.obterItem("Cubo Mágico"); - assertEquals(6, brinquedoDaLoja.getIdadeMinimaRecomendada()); - - - Loja lojaDeLivroOuBrinquedo = new Loja<>(caminhao); lojaDeLivroOuBrinquedo.incluirVendavel(guinessBook, 30); diff --git a/LojaVirtual/src/Caminhao.java b/LojaVirtual/src/util/Caminhao.java similarity index 84% rename from LojaVirtual/src/Caminhao.java rename to LojaVirtual/src/util/Caminhao.java index 12a6d84..54a9a4a 100644 --- a/LojaVirtual/src/Caminhao.java +++ b/LojaVirtual/src/util/Caminhao.java @@ -1,3 +1,9 @@ +package util; + +import modelo.produto.Produto; +import util.Transportador; +import util.Transportavel; + public class Caminhao extends Produto implements Transportador { private String marca; diff --git a/LojaVirtual/src/Dimensoes.java b/LojaVirtual/src/util/Dimensoes.java similarity index 96% rename from LojaVirtual/src/Dimensoes.java rename to LojaVirtual/src/util/Dimensoes.java index b3ccf44..5869faa 100644 --- a/LojaVirtual/src/Dimensoes.java +++ b/LojaVirtual/src/util/Dimensoes.java @@ -1,3 +1,5 @@ +package util; + public class Dimensoes { public int getComprimentoEmCentimetros() { diff --git a/LojaVirtual/src/Transportador.java b/LojaVirtual/src/util/Transportador.java similarity index 86% rename from LojaVirtual/src/Transportador.java rename to LojaVirtual/src/util/Transportador.java index ffd1fee..a0f0b44 100644 --- a/LojaVirtual/src/Transportador.java +++ b/LojaVirtual/src/util/Transportador.java @@ -1,3 +1,5 @@ +package util; + public interface Transportador { void transportar(Transportavel transportavel, String endereco); diff --git a/LojaVirtual/src/Transportavel.java b/LojaVirtual/src/util/Transportavel.java similarity index 89% rename from LojaVirtual/src/Transportavel.java rename to LojaVirtual/src/util/Transportavel.java index 2641a27..d26b344 100644 --- a/LojaVirtual/src/Transportavel.java +++ b/LojaVirtual/src/util/Transportavel.java @@ -1,3 +1,5 @@ +package util; + public interface Transportavel { int getPesoEmGramas(); diff --git a/LojaVirtual/src/Vendavel.java b/LojaVirtual/src/util/Vendavel.java similarity index 85% rename from LojaVirtual/src/Vendavel.java rename to LojaVirtual/src/util/Vendavel.java index 1008c20..33c55d2 100644 --- a/LojaVirtual/src/Vendavel.java +++ b/LojaVirtual/src/util/Vendavel.java @@ -1,3 +1,5 @@ +package util; + public interface Vendavel { String getDescricao(); diff --git a/ReinoAnimal/src/Principal.java b/ReinoAnimal/src/Principal.java index aa3e6fe..dce9983 100644 --- a/ReinoAnimal/src/Principal.java +++ b/ReinoAnimal/src/Principal.java @@ -7,11 +7,14 @@ public static void main(String[] args) { PastorAlemao caozinho1 = (PastorAlemao) zoo.escolherCachorro("pastor"); // Cachorro caozinho1 = new PastorAlemao(); Cachorro caozinho2 = zoo.escolherCachorro(null); + Mamifero mamiferoSorteado = zoo.sortearBicho(); // vou pedir coisas que qualquer cahorro saberia fazer... caozinho1.pular(); caozinho1.roerOsso(); + mamiferoSorteado.emitirSom(); + // agora algo específico de pastor alemão... caozinho1.morderOInvasor(); diff --git a/ReinoAnimal/src/ZoologicoDeMamiferos.java b/ReinoAnimal/src/ZoologicoDeMamiferos.java index b30b10c..4d0c1c7 100644 --- a/ReinoAnimal/src/ZoologicoDeMamiferos.java +++ b/ReinoAnimal/src/ZoologicoDeMamiferos.java @@ -21,9 +21,10 @@ public void incluirAnimal(Mamifero bicho) { this.bichos.add(bicho); } - public Cachorro escolherCachorro(String tipo) { - switch (tipo) { + public Cachorro escolherCachorro(String raca) { + switch (raca.toLowerCase()) { case "pastor": + case "pastor alemao": return new PastorAlemao(); case "poodle": return new Poodle(); @@ -32,4 +33,6 @@ public Cachorro escolherCachorro(String tipo) { // return new ViraLata(); } } + + }