Seguinte, eu vou colocar a solução aqui desse problema pois já estou refatorando o programa e a solução é o mesmo que o Niko começou a fazer quando mostrou as Interfaces. Wellingon, seu código tem a mesmo sintaxe que o código mostrado com uma pequena diferença, o seu código não compila. Então vamos lá. A proposta é calcular o custo operacional de uma movimentação de contratos e ações na bolsa. Cada mercado tem como custo três partes:
1-Custo da corretora, que é a taxa de corretagem mais o imposto de serviço do mesmo
2- Custo de taxas da Bolsa, que são a taxa de registro da operação mais os emolumentos que são taxas de alienações
3- Impostos, caso haja lucro na operação, é retido 1% do liquido mais 20% que deverá ser pago através de uma Darf.
E os mercados por enquanto são três que são:
1- Ações - lote padrão de 100 papeis e geralmente a corretagem é fixa por ordem executada
2- Índice - é o contrato do valor dos pontos ponderados da Bolsa, sua corretagem é calculada através de números de contratos negociados e não por ordem executada.
3- Dólar - sua corretagem é igual ao do Índice.
Então vamos as códigos:
1-Criei uma interface com as seguintes assinaturas
public interface Movimentos {
double fatorTick(double contratos, double ticks);
double custoB3(double contratos,double entrada);
double corretagem(double contratos,double corretagem);
}
2-Criei a Classe pai mercado
public class Mercado implements Movimentos {
protected final double impostoCorretagem=0.0965;
private final double impostoDarf=0.21;
private final double impostoRetido=0.01;
public double darf(double bruto,double corretagem, double b3){
double total;
total=bruto-corretagem-b3;
if(total<0)
return 0;
total=total*impostoDarf;
return total;
}
public double liquido(double bruto,double corretagem,double b3){
double total;
total=bruto-corretagem-b3;
if(total<0)
return total;
total=total-(total*impostoRetido);
return total;
}
public double tickTotal(double entrada, double saida, boolean comprado) {
double total;
if (comprado)
total = saida - entrada;
else
total = entrada - saida;
return total;
}
@Override
public double fatorTick(double contratos, double ticks) {
return 0;
}
@Override
public double custoB3(double contratos,double entrada) {
return 0;
}
@Override
public double corretagem(double contratos,double corretagem){
double total;
total=(contratos*corretagem)*2;
total=total+(total*impostoCorretagem);
return total;
}
}
3-Quando criei as classes filhas, ao invés de só jogar os valores como estava fazendo, eu re-escrevi as assinaturas dentro das classes como o Niko fez
public class Acoes extends Mercado {
private final double emolumentos=0.0003153;
@Override
public double fatorTick(double contratos, double ticks) {
double dinheiro;
dinheiro=ticks*contratos;
return dinheiro;
}
@Override
public double custoB3(double contratos,double entrada) {
double total;
total= contratos*entrada;
total=total*emolumentos;
return total;
}
@Override
public double corretagem(double contratos,double corretagem){
double total;
total=corretagem*2;
total=total+(total*impostoCorretagem);
return total;
}
}
public class Dolar extends Mercado {
private final double registroEmolumentos=1.06;
@Override
public double fatorTick(double contratos,double ticks) {
double dinheiro;
dinheiro=(contratos*ticks)/0.1;
return dinheiro;
}
@Override
public double custoB3(double contratos,double entrada) {
double total;
total=contratos*2;
total=total*registroEmolumentos;
return total;
}
}
public class Indice extends Mercado {
private final double registroEmolumentos=0.32;
@Override
public double fatorTick(double contratos,double ticks) {
double dinheiro;
dinheiro=(ticks*contratos)/5;
return dinheiro;
}
@Override
public double custoB3(double contratos,double entrada) {
double total;
total=contratos*2;
total=total*registroEmolumentos;
return total;
}
}