I did this program, simple and nothing complicated. My problem is that even though I'm doing exactly what I want, it does not follow correct patterns of object-oriented design. What should I do to, for example, wipe out static variables, extends, gets and sets ...?
This is the code I have.
package com.mycompany.exerciciocontadores;
public abstract class Contador {
private String cliente;
private String id;
private double consumo;
private static String CLIENTE_POR_OMISSAO = "sem cliente";
private static String ID_POR_OMISSAO = "sem ID";
private static double CONSUMO_POR_OMISSAO = 0;
public Contador(String cliente, String id, double consumo) {
this.cliente = cliente;
this.id = id;
this.consumo = consumo;
}
public Contador() {
cliente = CLIENTE_POR_OMISSAO;
id = ID_POR_OMISSAO;
consumo = CONSUMO_POR_OMISSAO;
}
public String getCliente() {
return cliente;
}
public String getId() {
return id;
}
public double getConsumo() {
return consumo;
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
public void setId(String id) {
this.id = id;
}
public void setConsumo(double consumo) {
this.consumo = consumo;
}
@Override
public String toString() {
return "Contador{" + "cliente=" + cliente + ", id=" + id + ", consumo=" + consumo + '}';
}
public abstract double calcularCusto();
}
The subclass:
package com.mycompany.exerciciocontadores;
public class ContadorGas extends Contador {
private static final String PREFIXO = "GAS-";
private static int contador = 0;
private double custoUnitario = 0.8;
public ContadorGas(String cliente, double consumo) {
super(cliente, PREFIXO + (++contador), consumo);
}
public static int getContador() {
return contador;
}
public double getCustoUnitario() {
return custoUnitario;
}
public static void setContador(int contador) {
ContadorGas.contador = contador;
}
public void setCustoUnitario(double custoUnitario) {
this.custoUnitario = custoUnitario;
}
@Override
public double calcularCusto() {
return getConsumo() * custoUnitario;
}
}