Juros simples (OOP)
Exercício de lógica de programação (com testes unitários) para calcular o juros simples.
Exercício de lógica de programação
Faça um programa para calcular o juros simples segundo a fórmula abaixo.
J = C.i.n
Onde:
J = juros,
C = capital,
i = taxa de empréstimo
n = períodos
Vamos imaginar o seguinte cenário: um empréstimo de R$ 16.000,00 sobre a taxa de 4% durante 4 meses.
Utilize orientação a objetos para resolver o problema.
Como nós já resolvemos este exercício na versão “estruturada” (não utilizamos nem ao menos as funções) eu resolvi mostrar algumas particularidades das linguagens Python e JavaScript.
Linguagem C++
Em C++ já temos o teste escrito, você deve implementar a classe Juros
.
#include <iostream>
#include <assert.h>
//
// Classe Juros
//
class Juros {
//
// seu código
//
};
//
// Teste Unitário
//
void testJurosSimples() {
Juros juros;
juros.capital = 16000;
juros.taxa = 0.04;
juros.periodo = 4;
assert(2560 == juros.simples());
}
//
// Início do programa
//
int main() {
// Executando o teste unitário
testJurosSimples();
return 0;
}
Solução na linguagem C++
//
// Classe Juros
//
class Juros {
public:
float capital, taxa;
int periodo;
// Função que retorna o juros simples
// J = c . i . n
int simples() {
return capital * taxa * periodo;
}
};
Linguagem JavaScript
Dessa vez vamos fazer algo bem arcaico, diga-se de passagem, vamos criar um variável e instanciar o tipo primitivo Object
.
O exemplo é só para ilustrar como a programação orientada a objeto pode diferenciar e muito de uma linguagem para outra.
var assert = require('assert');
//
// Criamos um objeto vazio a partir do tipo primitivo `Object`
//
var juros = new Object();
//
// Definimos um método para o objeto recém criado
//
juros.simples = function() {
//
// Aqui entra a sua lógica
//
}
try {
//
// Teste
//
// Repare que NÂO instanciamos o objeto
juros.capital = 16000;
juros.taxa = 0.04;
juros.periodo = 4;
assert.equal(2560, juros.simples());
} catch(e) {
console.log(e);
}
Solução na linguagem JavaScript
juros.simples = function() {
return this.capital * this.taxa * this.periodo;
}
Linguagem Python
Eu deixei o Python por último para tentar fazer um paralelo com a linguagem JavaScript e, ao invés do exercício, vou mostrar a resposta.
Para utilizarmos funções anônimas em Python devemos lançar mão da expressão lambda
.
A sintaxe em JavaScript é um pouco mais intuitiva (minha opinião), por isso eu mostrei ela em primeiro lugar.
#
# Definimos uma classe vazia (como em JS)
#
class Juros(object):
pass
#
# Instanciamos a classe
#
juros = Juros()
#
# Definimos um método através do recurso `lambda`
#
juros.simples = lambda obj: obj.capital * obj.taxa * obj.periodo
#
# Teste
#
# Como em JS, também não instanciamos a classe
#
juros.capital = 16000
juros.taxa = 0.04
juros.periodo = 4
assert 2560 == juros.simples(juros)
Se estiver com dificuldade de entender o que o código acima está realmente fazendo, veja o código abaixo, ele é equivalente.
# -*- coding: utf-8 -*-
#
# Definimos uma classe vazia (como em JS)
#
class Juros(object):
pass
#
# Atenção: este método não faz parte da classe acima...
#
def simples(obj):
return obj.capital * obj.taxa * obj.periodo
#
# ... para tal, precisaremos instanciar a classe
# e atribuir a função ao método do objeto `juros`.
juros = Juros()
juros.simples = simples
#
# Teste
#
juros.capital = 16000
juros.taxa = 0.04
juros.periodo = 4
assert 2560 == juros.simples(juros)
A solução apresentada tanto em JavaScript como em Python não são as mais indicadas, eu optei por elas porque o meu objeto era ilustrarmos as particularidades de cada linguagem ao invés de simplesmente resolver o enunciado.