Retomando o exemplo do Empréstimo codificado a seguir (classe geral Emprestimo
que abstrai duas subclasses: EmprestimoSimples
e EmprestimoComposto
), escreva um método abstrato em que, dada uma String "simples"
ou "composto"
, retorne o respectivo empréstimo.
Defina interfaces de tal maneira que as o cliente nunca faça referência direta a classes.
In [ ]:
import java.lang.Math;
public abstract class Emprestimo {
protected float s;
protected int n;
protected float j;
protected int corrente;
protected float p,
proxima;
public Emprestimo(float s, int n, float j) {
this.s = s;
this.n = n;
this.j = j;
corrente = 1;
this.p = -1; // antes da primeira parcela
this.proxima = s;
}
float getS() {
return s;
}
int getN() {
return n;
}
float getJ() {
return j;
}
public float parcela() {
return p;
}
public abstract float proximaParcela();
public abstract float parcela(int numero);
}
class EmprestimoSimples extends Emprestimo {
public EmprestimoSimples(float s, int n, float j) {
super(s, n, j);
}
public float proximaParcela() {
if (corrente <= n)
p = s + ((corrente-1) * s * (j/100));
else
p = 0;
corrente++;
return p;
}
public float parcela(int numero) {
float resultado = 0;
if (numero <= n)
resultado = s + ((numero-1) * s * (j/100));
return resultado;
}
}
class EmprestimoComposto extends Emprestimo {
public EmprestimoComposto(float s, int n, float j) {
super(s, n, j);
}
public float proximaParcela() {
p = proxima;
corrente++;
if (corrente <= n)
proxima += (proxima * (j/100));
else
proxima = 0;
return p;
}
public float parcela(int numero) {
float resultado = 0;
if (numero <= n)
resultado = s * (float)Math.pow(1 + j/100, numero-1);
return resultado;
}
}
// codigo principal
Emprestimo emprestimo1 = new EmprestimoSimples(500, 7, 2);
Emprestimo emprestimo2 = new EmprestimoComposto(500, 7, 2);
int i = 1;
emprestimo1.proximaParcela();
emprestimo2.proximaParcela();
while (emprestimo1.parcela() > 0 || emprestimo2.parcela() > 0) {
if (emprestimo1.parcela() > 0) {
System.out.println("Emprestimo 1: parcela " + i + " eh " + emprestimo1.parcela());
System.out.println(" parcela " + i + " eh " + emprestimo1.parcela(i));
}
if (emprestimo2.parcela() > 0) {
System.out.println("Emprestimo 2: parcela " + i + " eh " + emprestimo2.parcela());
System.out.println(" parcela " + i + " eh " + emprestimo2.parcela(i));
}
emprestimo1.proximaParcela();
emprestimo2.proximaParcela();
i++;
}