Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio boas praticas #19

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/.metadata/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pode adicionar os arquivos .class ao .gitignore também

Binary file added bin/br/com/codar/maquinacafe/AguaQuente.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Bebida.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Cafe.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/CafeComLeite.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Cafeteira.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Capuccino.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/ChaDeLimao.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Credito.class
Binary file not shown.
Binary file added bin/br/com/codar/maquinacafe/Pedido.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
30 changes: 30 additions & 0 deletions src/br/com/codar/maquinacafe/AguaQuente.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class AguaQuente implements Bebida {

private double preco;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Você não precisa desses atributos aqui, já que não está utilizando eles e sim os getters definidos na interface. O mesmo vale para as classes que representam outras bebidas.

private int aguaConsumida;

public AguaQuente(int pedidoBebidaUsuario) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O mesmo vale pra esse int no construtor (acredito ser o id da bebida selecionada), como você não está utilizando ele não precisa ter.

}

public void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
System.out.println("�gua Quente � gratuito, obrigado pelo pedido.");
}

public int solicitaNivelAcucar() {
return 0;
}

@Override
public double getPreco() {
return 0;
}

@Override
public int getAguaConsumida() {
return 50;
}
}
28 changes: 28 additions & 0 deletions src/br/com/codar/maquinacafe/Bebida.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public interface Bebida {

public default void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
if (credito.getValorCredito() < this.getPreco()) {
System.out.println("Valor de cr�dito insuficiente. Voc� pode inserir mais cr�ditos agora");
credito.adicionaCredito(credito);
}
reservatorio.conferindoReservatorio();
reservatorio.utilizandoAgua(getAguaConsumida());
}

public default int solicitaNivelAcucar() {
Scanner nivelAcucar = new Scanner(System.in);
System.out.println("Como padr�o, o n�vel de a��car ser� 3, qual n�vel gostaria?\n " + "0, 1, 2, 3, 4, 5");

int opcaoAcucar = nivelAcucar.nextInt();

return opcaoAcucar;
}

double getPreco();

int getAguaConsumida();
}
30 changes: 30 additions & 0 deletions src/br/com/codar/maquinacafe/Cafe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class Cafe implements Bebida {

private double preco;
private int aguaConsumida;

public Cafe(int pedidoBebidaUsuario) {
}

public void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
}

public int solicitaNivelAcucar() {
return solicitaNivelAcucar();
}

@Override
public double getPreco() {
return 0.50;
}

@Override
public int getAguaConsumida() {
return 50;
}

}
29 changes: 29 additions & 0 deletions src/br/com/codar/maquinacafe/CafeComLeite.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class CafeComLeite implements Bebida {

private double preco;
private int aguaConsumida;

public CafeComLeite(int pedidoBebidaUsuario) {
}

public void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
}

public int solicitaNivelAcucar() {
return solicitaNivelAcucar();
}

@Override
public double getPreco() {
return 1.00;
}

@Override
public int getAguaConsumida() {
return 50;
}
}
45 changes: 45 additions & 0 deletions src/br/com/codar/maquinacafe/Cafeteira.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class Cafeteira {

public static void main(String[] args) {

Pedido pedido = new Pedido();
Credito credito = new Credito();
int iniciarEscolha;

Scanner pedidoInicial = new Scanner(System.in);
System.out.println("Ol�, escolha uma das op��es abaixo\n" + "1 - Adicionar cr�ditos\n" + "2 - Realizar pedido");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Encapsular essas chamadas de System.out pode ser uma boa ideia. Se em algum momento for necessário refatorar o sistema para alterar a forma como as mensagens são imprimidas, já estaria tudo centralizado em um lugar.


iniciarEscolha = pedidoInicial.nextInt();
System.out.println("Voc� escolheu: " + iniciarEscolha);

switch (iniciarEscolha) {
case 1:
credito.adicionaCredito(credito);
case 2:
pedido.realizarPedido(credito, null);
break;
}

Scanner outroPedido = new Scanner(System.in);
System.out.println("Gostaria de fazer mais um pedido?\n" + "1 - Sim\n" + "2 - N�o");

iniciarEscolha = outroPedido.nextInt();
System.out.println("Voc� escolheu: " + iniciarEscolha);

switch (iniciarEscolha) {
case 1:
credito.adicionaCredito(credito);
pedido.realizarPedido(credito, null);
break;
case 2:
System.out.println("Obrigado e at� mais.");
break;
}
}
}

//Desenvolvido por Gabriel Trudes Melo
29 changes: 29 additions & 0 deletions src/br/com/codar/maquinacafe/Capuccino.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class Capuccino implements Bebida {

private double preco;
private int aguaConsumida;

public Capuccino(int pedidoBebidaUsuario) {
}

public void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
}

public int solicitaNivelAcucar() {
return solicitaNivelAcucar();
}

@Override
public double getPreco() {
return 1.50;
}

@Override
public int getAguaConsumida() {
return 50;
}
}
29 changes: 29 additions & 0 deletions src/br/com/codar/maquinacafe/ChaDeLimao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class ChaDeLimao implements Bebida {

private double preco;
private int aguaConsumida;

public ChaDeLimao(int pedidoBebidaUsuario) {
}

public void preparaBebida(Credito credito, ReservatorioAgua reservatorio) {
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Os métodos de preparar bebida não deveriam imprimir as mensagens do preparo (os ingredientes sendo utilizados)?


public int solicitaNivelAcucar() {
return solicitaNivelAcucar();
}

@Override
public double getPreco() {
return 1.00;
}

@Override
public int getAguaConsumida() {
return 50;
}
}
52 changes: 52 additions & 0 deletions src/br/com/codar/maquinacafe/Credito.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package br.com.codar.maquinacafe;

import java.io.InputStream;
import java.util.Scanner;

public class Credito {

private double valorCredito;


double getValorCredito() {
return valorCredito;
}

public void setValorCredito(double valorCredito) {
this.valorCredito++;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui você só está incrementando o valor em um. Acho que aqui você queria somar o valor de crédito atual com o valor recebido.

}

public InputStream adicionaCredito(Credito credito) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O método está sempre retornando null, então não tem motivo para o retorno ser InputStream. Se ele não precisa retornar nada ele pode ser void.

Scanner opcaoCredito = new Scanner(System.in);
System.out.println("Entre com o valor do cr�dito dispon�vel:\n"
+ "5 - 5 cr�ditos\n"
+ "10 - 10 cr�ditos\n"
+ "20 - 20 cr�ditos\n"
+ "50 - 50 cr�ditos\n"
+ "100 - 100 cr�ditos\n"
+ "200 - 200 cr�ditos");

int creditoInserido = opcaoCredito.nextInt();
if (creditoInserido <= 0) {
throw new IllegalArgumentException("Insira um valor valido");
}
double valorCredito = credito.getValorCredito();
valorCredito += creditoInserido;
credito.setValorCredito(valorCredito);
return null;

}

public void calculaTroco(double valorBebida, Credito credito) {
double valorCredito = credito.getValorCredito();
valorCredito -= valorBebida;
credito.setValorCredito(valorCredito);

Scanner troco = new Scanner(System.in);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A ideia de centralizar a lógica de ler dados do usuário em uma outra classe também pode ser uma boa ideia, pelo mesmo motivo de isolar o System.out

System.out.println("Troco em cr�ditos: " + valorCredito);

valorCredito = 0;
credito.setValorCredito(valorCredito);
}

}
52 changes: 52 additions & 0 deletions src/br/com/codar/maquinacafe/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package br.com.codar.maquinacafe;

import java.util.Scanner;

public class Pedido {

public void realizarPedido(Credito credito, ReservatorioAgua reservatorio) {
Scanner opcaoBebida = new Scanner(System.in);
System.out.println(
"Fa�a seu pedido entre as op��es:\n" + "1 - Caf� por R$0.50\n" + "2 - Caf� Com Leite por R$1.00\n"
+ "3 - Capuccino por R$1.50\n" + "4 - Ch� De Lim�o por R$1.00\n" + "5 - �gua quente GRATUITO");

int pedidoBebidaUsuario = opcaoBebida.nextInt();
System.out.println("Obrigado, seu pedido ser�: " + pedidoBebidaUsuario);

switch (pedidoBebidaUsuario) {
case 1:
Cafe cafe = new Cafe(pedidoBebidaUsuario);
cafe.preparaBebida(credito, reservatorio);
credito.calculaTroco(cafe.getPreco(), credito);
break;

case 2:
CafeComLeite cafeComLeite = new CafeComLeite(pedidoBebidaUsuario);
cafeComLeite.preparaBebida(credito, reservatorio);
credito.calculaTroco(cafeComLeite.getPreco(), credito);
break;

case 3:
Capuccino capuccino = new Capuccino(pedidoBebidaUsuario);
capuccino.preparaBebida(credito, reservatorio);
credito.calculaTroco(capuccino.getPreco(), credito);
break;

case 4:
ChaDeLimao chaDeLimao = new ChaDeLimao(pedidoBebidaUsuario);
chaDeLimao.preparaBebida(credito, reservatorio);
credito.calculaTroco(chaDeLimao.getPreco(), credito);
break;

case 5:
AguaQuente aguaQuente = new AguaQuente(pedidoBebidaUsuario);
aguaQuente.preparaBebida(credito, reservatorio);
credito.calculaTroco(aguaQuente.getPreco(), credito);
break;

default:
System.out.println("Entre com uma das op��es dispon�veis");
}
}

}
41 changes: 41 additions & 0 deletions src/br/com/codar/maquinacafe/ReservatorioAgua.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package br.com.codar.maquinacafe;

public class ReservatorioAgua {

private int nivelAgua;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pela forma como está sendo utilizado o nivelAgua e reservatorio parecem ser a mesma coisa. Acho que poderia ter só um dos dois.

private int reservatorio;

public int getNivelAgua() {
return nivelAgua;
}

public void setNivelAgua(int nivelAgua) {
this.nivelAgua = nivelAgua;
}

public int getReservatorio() {
return reservatorio;
}

public void conferindoReservatorio() {
int reservatorio = getNivelAgua();

if (reservatorio == 0) {
abastecendoReservatorio();
}
}

public int utilizandoAgua(int aguaConsumida) {
int nivelAgua = getNivelAgua();
nivelAgua -= aguaConsumida;
setNivelAgua(nivelAgua);

return nivelAgua;
}

public void abastecendoReservatorio() {
setNivelAgua(1000);
int reservatorio = getNivelAgua();
}

}
Loading