Skip to content

Commit

Permalink
interface
Browse files Browse the repository at this point in the history
  • Loading branch information
vinicius committed Jan 6, 2021
1 parent 7362305 commit 26a843a
Show file tree
Hide file tree
Showing 11 changed files with 130 additions and 39 deletions.
@@ -1,4 +1,4 @@
public class Produto {
public class ArtigoCultural implements Vendavel, Transportavel {

private final long id; // código único de identificação do produto

Expand All @@ -10,7 +10,7 @@ public class Produto {

private int pesoEmGramas;

public Produto(long id, String descricao) {
public ArtigoCultural(long id, String descricao) {
this.id = id;
this.descricao = descricao;
}
Expand Down Expand Up @@ -51,6 +51,10 @@ public void setPesoEmGramas(int pesoEmGramas) {
this.pesoEmGramas = pesoEmGramas;
}

public int getVolumeEmCm3() {
return 0; // ToDo IMPLEMENT ME!
}

@Override
public String toString() {
return descricao;
Expand Down
47 changes: 46 additions & 1 deletion LojaVirtual/src/Bicicleta.java
@@ -1,2 +1,47 @@
public class Bicicleta extends Veiculo {
public class Bicicleta extends Veiculo implements Vendavel {

private static float PRECO_DEFAULT = 500;

private long codigoModelo;

private int aro;

private String marca;

private float precoEmReais;

public int getAro() {
return aro;
}

public Bicicleta(long codigoModelo, int aro, String marca) {
this.codigoModelo = codigoModelo;
this.aro = aro;
this.marca = marca;
this.precoEmReais = PRECO_DEFAULT;
}

@Override
public long getId() {
return codigoModelo;
}

@Override
public String getDescricao() {
return String.format("Bicicleta %s aro %d", marca, aro);
}

@Override
public float getPrecoEmReais() {
return precoEmReais;
}

public void setPrecoEmReais(float precoEmReais) {
this.precoEmReais = precoEmReais;
}

@Override
public String toString() {
return getDescricao();
}
}
2 changes: 1 addition & 1 deletion LojaVirtual/src/CD.java
@@ -1,4 +1,4 @@
public class CD extends Produto {
public class CD extends ArtigoCultural {

private String nomeDoDisco;

Expand Down
4 changes: 4 additions & 0 deletions LojaVirtual/src/Caminhao.java
@@ -1,2 +1,6 @@
public class Caminhao extends Veiculo {

private int numeroDeEixos;


}
2 changes: 1 addition & 1 deletion LojaVirtual/src/Livro.java
@@ -1,4 +1,4 @@
public class Livro extends Produto {
public class Livro extends ArtigoCultural {

private final int codigoISBN;

Expand Down
54 changes: 27 additions & 27 deletions LojaVirtual/src/Loja.java
Expand Up @@ -7,7 +7,7 @@ public class Loja {

private String nomeDaLoja;

private ArrayList<Produto> catalogo;
private ArrayList<Vendavel> catalogo;

private Transportadora frete;

Expand All @@ -20,10 +20,10 @@ public void setFrete(Transportadora transportadora) {
frete = transportadora;
}

public String receberPedido(Produto produto, int quantidade, Usuario usuario) {
public String receberPedido(ArtigoCultural item, int quantidade, Usuario usuario) {

// verifica se existe no catálogo da loja
if (buscarProduto(produto.getId()) == null) {
if (buscarItem(item.getId()) == null) {
// ToDo lançar uma exceção específica
return null;
}
Expand All @@ -34,64 +34,64 @@ public String receberPedido(Produto produto, int quantidade, Usuario usuario) {
return null;
}

float precoTotal = quantidade * produto.getPrecoEmReais();
float precoTotal = quantidade * item.getPrecoEmReais();

if (!processarPagamento(precoTotal)) {
// ToDo lançar uma exceção específica
return null;
}

// cria um array com todos os livros que precisarão ser entregues
// (possivelmente várias unidades do mesmo produto)
ArrayList<Produto> pedido = new ArrayList<>();
// cria um array com todos os itens que precisarão ser entregues
// (possivelmente várias unidades do mesmo item)
ArrayList<Transportavel> pedido = new ArrayList<>();
for (int i = 0; i < quantidade; i++) {
pedido.add(produto);
pedido.add(item);
}

frete.transportar(pedido, usuario.getEndereco());

String recibo = String.format("Recibo no valor de R$%.2f referente à " +
"compra de %d unidades do produto: %s",
precoTotal, quantidade, produto);
"compra de %d unidades do item: %s",
precoTotal, quantidade, item);

return recibo;
}

public void incluirProduto(Produto produto) {
if (buscarProduto(produto.getId()) != null) {
public void incluirItem(Vendavel vendavel) {
if (buscarItem(vendavel.getId()) != null) {
// produto já existe no catálogo -- nada a fazer
return;
}
catalogo.add(produto);
catalogo.add(vendavel);
}

/**
* Busca um produto no catálogo da loja a partir de sua descrição.
* Busca um ítem no catálogo da loja a partir de sua descrição.
*
* @param descricao a descrição do produto desejado (ou parte dela)
* @return o primeiro Produto que case com a descrição fornecida, caso encontre;
* @param descricao a descrição do ítem desejado (ou parte dela)
* @return o primeiro Vendavel que case com a descrição fornecida, caso encontre;
* ou null, caso contrário
*/
public Produto buscarProduto(String descricao) {
for (Produto produto : catalogo) {
if (produto.getDescricao().contains(descricao)) {
return produto;
public Vendavel buscarItem(String descricao) {
for (Vendavel item : catalogo) {
if (item.getDescricao().contains(descricao)) {
return item;
}
}
return null;
}

/**
* Busca um produto no catálogo da loja a partir de seu código.
* Busca um ítem no catálogo da loja a partir de seu código.
*
* @param id o código de identificação do produto desejado
* @return o Produto cujo código seja igual ao código fornecido, caso encontre;
* @param id o código de identificação do ítem desejado
* @return o Vendavel cujo código seja igual ao código fornecido, caso encontre;
* ou null, caso contrário
*/
public Produto buscarProduto(long id) {
for (Produto produto : catalogo) {
if (produto.getId() == id) {
return produto;
public Vendavel buscarItem(long id) {
for (Vendavel item : catalogo) {
if (item.getId() == id) {
return item;
}
}
return null;
Expand Down
15 changes: 12 additions & 3 deletions LojaVirtual/src/LojaTest.java
Expand Up @@ -9,6 +9,7 @@ public class LojaTest {
Livro livro1;
Livro livro2;
CD cd1;
Bicicleta bicicleta1;
Usuario comprador;
Transportadora gatoPreto;

Expand All @@ -28,9 +29,13 @@ public void setUp() {
cd1 = new CD(121223, "Ride The Lightning", "Metallica", 1985);
cd1.setPrecoEmReais(18.50f);

loja.incluirProduto(livro1);
loja.incluirProduto(livro2);
loja.incluirProduto(cd1);
bicicleta1 = new Bicicleta(9999, 700, "Pinarello");
bicicleta1.setPrecoEmReais(580);

loja.incluirItem(livro1);
loja.incluirItem(livro2);
loja.incluirItem(cd1);
loja.incluirItem(bicicleta1);

comprador = new Usuario(111111, "Maria");
comprador.setEndereco("Rua Tal, Numero Tal");
Expand All @@ -45,6 +50,10 @@ public void testarVendaParaProdutoExistente() {
recibo = loja.receberPedido(cd1, 1, comprador);
assertNotNull(recibo);
System.out.println(recibo);

recibo = loja.receberPedido(bicicleta1, 3, comprador);
assertNotNull(recibo);
System.out.println(recibo);
}

@Test
Expand Down
6 changes: 3 additions & 3 deletions LojaVirtual/src/Transportadora.java
Expand Up @@ -4,10 +4,10 @@ public class Transportadora {

private String nome;

public void transportar(ArrayList<Produto> produtos, String endereco) {
public void transportar(ArrayList<Transportavel> itens, String endereco) {
System.out.println(
String.format("Transportando %d produtos para o endereço: %s",
produtos.size(), endereco));
String.format("Transportando %d itens para o endereço: %s",
itens.size(), endereco));
// ToDo chamar de fato o serviço da transportadora física, emitindo OS
}
}
8 changes: 8 additions & 0 deletions LojaVirtual/src/Transportavel.java
@@ -0,0 +1,8 @@
public interface Transportavel {

String getDescricao();

int getPesoEmGramas();

int getVolumeEmCm3();
}
6 changes: 5 additions & 1 deletion LojaVirtual/src/Veiculo.java
Expand Up @@ -5,6 +5,10 @@ public class Veiculo {
private int cargaMaximaEmKg;

public void mover(float velocidadeEmKmh) {
// Too IMPLEMENT ME!...
// ToDo IMPLEMENT ME!
}

public void parar() {
// ToDo IMPLEMENT ME!
}
}
17 changes: 17 additions & 0 deletions LojaVirtual/src/Vendavel.java
@@ -0,0 +1,17 @@
public interface Vendavel {

/**
* @return um identificador único para este Vendável.
*/
long getId();

/**
* @return a descrição textual deste Vendável.
*/
String getDescricao();

/**
* @return o preço unitário, em reais, do Vendável.
*/
float getPrecoEmReais();
}

0 comments on commit 26a843a

Please sign in to comment.