Me ajudem por favor! Polimorfismo

27 respostas
lucas0985

Olá a todos. Estou no 5° periodo de Sistemas de Informaçao, e me foi passado o seguinte exercicio que deve ser feito usando Polimorfismo e Herança:

Neste trabalho deve-se implementar um pequeno sistema no qual iremos gerenciar diversos tipos de contas bancárias. São elas: Conta Corrente, Conta Poupança e Conta investimento. Cada conta, apesar de ser diferente apresenta características em comum como: saldo, proprietário e tipo. Além disso, devem possuir os métodos sacar, que debita o valor sacado do saldo; depositar, que acrescenta o valor depositado ao saldo; e o método atualizar que atualiza o saldo a partir de uma taxa de juros fixa, sendo 0% para a conta corrente, 0,5% para a poupança e 1% para a conta investimento. O atributo proprietário deve conter os atributos nome e cpf, sendo aconselhável que seja criado uma nova classe para representá-lo. Deve-se criar uma classe Main com os métodos responsáveis por demonstrar o funcionamento do sistema. Abaixo segue uma sugestão para a classe Main:

public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Cliente filipe = new Cliente("Filipe", "[telefone removido]");
System.out.println("Vou testar a conta corrente");
Conta corrente = new ContaCorrente(filipe);
testaConta(corrente);
System.out.println("Vou testar a conta poupanca");
Conta poupanca = new Poupanca(filipe);
testaConta(poupanca);
System.out.println("Vou testar a conta investimento");
Conta investimento = new ContaInvestimento(filipe);
testaConta(investimento);
}
public static void testaConta(Conta conta){
//Deve ser implementado
}
}

Como saída espera-se o seguinte:

Vou testar a conta corrente
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 0.0
Vou depositar 100,00...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0
Vou atualizar...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0
Vou testar a conta poupanca
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Poupanca
Saldo: 0.0
Vou depositar 100,00...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Poupanca
Saldo: 100.0
Vou atualizar...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Poupanca
Saldo: 100.5
Vou testar a conta investimento
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Investimento
Saldo: 0.0
Vou depositar 100,00...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Investimento
Saldo: 100.0
Vou atualizar...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Investimento
Saldo: 101.0

O professor tinha nos passado varios exemplos, e eu os copiei para o pendrive, mas quando cheguei em casa, o fdp estava queimado, e eu perdi todos os codigo de exemplos sobre polimorfismo que ele passou, e tenho que entregar o trabalho na segunda. Gostaria que alguem resolvesse pra mim só a conta corrente para eu saber como é base para a solução. Obrigado a todos.

27 Respostas

sowyer

Uma coisa eu digo… se você não sabe resolver para a conta corrente, não saberá resolver os demais …

Então, nem adianta … :cry:

Mas eu posso fazer… por 50 Reais! E olha que está barato … :wink:

T

Nossa primeiro tira essas letras emo-core e organiza seu código

R

Não podia colocar a cor da fonte com menos contraste e mais legível?

\o/

Acho que difícil encontrar alguém que faça pra você…(pelo menos de graça)…mas pagando bem, que mal tem…haha…com um incentivo financeiro com certeza aparece um disposto.

edimarakika
public class Conta {
//atributos privados 
getter e setter
metodos



class ContaCorrente extends Conta {
/*	
métodos sacar 
depositar 
e atualizar

*/

....

class ContaPoupanca extends Conta {

//metodos depositar e atualizar


obs: Nessas classe conta corrente e c poupança vc tem que usar polimorfismo que é usar o mesmo metodo de Conta  que de forma diferente (Ah..num sei eplicar direito, to tentando)
class Cliente{

e a classe principal

Bom..espero que eu tenha te ajudado mais do que te confundido..

lucas0985

[b]Consegui fazer todos os métodos.

Porém, estou com um problema, quero que imprima:

Vou depositar (valor)

Vou sacar (valor)

Vou atualizar (valor)

como faço para sair o valor sempre atualizado quando mudá-lo?[/b]

edimarakika

Seria mais fácil te ajudar se você postasse o código aki entre as tags
colchetes code, fecha colchetes
colchetes / code fecha colchetes

lucas0985

ah sim xD valeu!

lucas0985
package contabancaria;

public class Conta extends Cliente{

public String tipo;
protected double saldo;
protected double juros;
private Cliente cliente;


public Conta(){
    cliente = new Cliente();
}

    public void setJuros(double juros) {
        this.juros = juros;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public double getJuros() {
        return juros;
    }

    public double getSaldo() {
        return saldo;
    }

    public String getTipo() {
        return tipo;
    }

    public void deposita(double valor) {
         this.setSaldo(this.getSaldo() + valor);
        System.out.println("Vou depositar: "+ valor + "\n"+ imprime()+"\n");
}

      public boolean saque(double valor) {
         if (this.getSaldo() >= valor) {
             System.out.println("Vou sacar" + valor+"\n");
             this.setSaldo(this.getSaldo() - valor);
             System.out.println("Seu saldo restante é: "+ this.saldo);
             return true;
         } else {
             return false;
         }
    }

      public void atualiza (){
          this. saldo = (this.saldo * juros)+(this.saldo);
          System.out.println("Vou atualizar" +"\n" +imprime()+"\n");
      }

      public void testaConta(Conta conta){
          System.out.println(imprime());
 }

      public String imprime(){
          return "Proprietário: " +nome +" - " + cpf + " "+"\n" + "Tipo: " + tipo + "\n"+ "Saldo: " + saldo + "\n";
      }
    }
       //*public static void testaConta(Conta conta){
       // System.out.println("Proprietário:" );
    // }

acho q fiz algo errado ae. pq qdo chamo a classe principal:

Cliente cliente = new Cliente("CArlos", "55.62.5.66"); System.out.println("Vou testar a conta corrente..."); Conta corrente = new ContaCorrente(cliente);

a conta corrente exibe é o meu nome e meu cpf ao invés da variavel cliente q atribuí os valores. o que será q fiz de errado?

edimarakika

Vc crou tudo dentro de uma mesma classe?Oo

lucas0985

Não, criei 6 classes contando com a main: CONTA, CONTA POUPANÇA, CONTA CORRENTE, CONTA INVESTIMENTO, CLIENTE. e coloquei as CC, CP, e CI pra herdar de CONTA.

edimarakika

Posta pra mim a classe main…?

lucas0985
package contabancaria;


public class Main {


    public static void main(String[] args) {
      Cliente lucas = new Cliente("Lucas", "[telefone removido]");
      Cliente cliente = new Cliente("CArlos", "55.62.5.66");
      System.out.println("Vou testar a conta corrente...");
      Conta corrente = new ContaCorrente(cliente);
      corrente.testaConta(corrente);
      corrente.deposita(150);
      corrente.atualiza();
      System.out.println("Vou testar a Conta Poupança...");
      Conta poupanca = new Poupanca(lucas);
      poupanca.testaConta(poupanca);
      poupanca.deposita(150);
      poupanca.atualiza();
      System.out.println("Vou testar a Conta Investimento...");
      Conta investimento = new ContaInvestimento(lucas);
      investimento.testaConta(investimento);
      investimento.deposita(160);
      investimento.deposita(300);
      investimento.atualiza();
      
     

    }

   public static void testaConta( Conta conta){ //este é um metedo q faalta implantar, o certo pra chamar as contas, mas nao tenho nem ideia de como implantálo.
      
   }


}
edimarakika
VC o implementa mais ou menos dessa forma:
public class TestaConta {
public static void main(String args []){
ContaCorrente cc = new ContaCorrente();
ContaPoupança cp = new ContaPoupança();
ContaInvestimento ci = new ContaInvestimento();


cc.setTitular("Carlos");
cc.saldo = 1000;
cc.saca(300);
cc.atualiza();//faz a mesma coisa para poupança e investimento


System.out.println(cc.getTitular()+ cc.atualiza());


}
	
	
	
}
lucas0985

obrigado, vou tentar aki, vou deixar também os códigos da classe poupança, fiz igual pra todas as outras, ae vc avalia se está tudo certo ok.

package contabancaria;

public class Poupanca extends Conta {

    public Poupanca (String nome, String cpf){
        this.nome = nome;
        this.cpf = cpf;
    }
    public Poupanca (Cliente lucas){

            this.juros = 0.005d;
            this.tipo = "Poupança";
            this.saldo = 0;

    }

}

Sabe o que não to entendendo? é que ele quer que em um único método, esse "testaConta(corrente);" imprima isso tudo abaixo, isso para cada conta utilizando o mesmo método:

Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 0.0
Vou depositar 100,00...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0
Vou atualizar...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0

Como faço um único método imprimir isso tudo?

edimarakika

E se vc fizesse uma classe com o método main que testasse todas essas contas?
Acho que seria o ideal

lucas0985
vou tentar implementar ela aqui, pra ver o q vai dar. rs. Só estranhei porque ele usou o static pra declarar e já dentro da main. olha:
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Cliente filipe = new Cliente("Filipe", "[telefone removido]");
System.out.println("Vou testar a conta corrente");
Conta corrente = new ContaCorrente(filipe);
testaConta(corrente);
System.out.println("Vou testar a conta poupanca");
Conta poupanca = new Poupanca(filipe);
testaConta(poupanca);
System.out.println("Vou testar a conta investimento");
Conta investimento = new ContaInvestimento(filipe);
testaConta(investimento);
}
public static void testaConta(Conta conta){
//Deve ser implementado
}
}
edimarakika

Vc viu o código que te mandei?
Tenta fazer daquela forma sem esse método “Testa Conta” e vê se funciona, pq eu tbm não tô entendendo pra que esse método aiii…

lucas0985

o que ta pegando é na hora de chamar o saldo dentro dele, nao da pq é tipo void, nao tem como atulizar o saldo. Como faço?

edimarakika

Dá algum erro??
O que acontece exatamente?

lucas0985

fala que é tipo void e nao pode retornar. aff

lucas0985
outra coisa que ta me matando. quando faço
Cliente novo = new Cliente ("Carlos", "[telefone removido]");
simplesmente nao atualiza o valor em cliente. acho que implementei algo errado na classe cliente que nao ta alterando, olha abaixo: o que devo fazer ae pra atualizar os valores quando eu mudar em Cliente na main?
package contabancaria;

 class Cliente {
protected String cpf;
protected String nome;

public Cliente(){
    this.cpf = "[telefone removido]";
    this.nome = "Lucas";
}

public Cliente (String cpf, String nome){
    this.cpf = cpf;
    this.nome = nome;
}


    public String getCpf() {
        return cpf;
    }

    public String getNome() {
        return nome;
    }


    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public void setNome(String nome) {
        this.nome = nome; 
    }
}
edu_merckx

não sei qual a sua disposição, mas no site da Caelum tem uma apostila ótima com conceitos e códigos, inclusive com exemplo de contas

http://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf

até mais…

edimarakika

Presta atenção no que vc fez akii

public Cliente(){  
  this.cpf = "[telefone removido]";  
   this.nome = "Lucas";

E no que vc fez akiii…

public class Main {  
 /** 
 * @param args the command line arguments 
 */  
 public static void main(String[] args) {  
 Cliente filipe = new Cliente("Filipe", "[telefone removido]");
L

Cara ta uma bagunça seus codigos ,ate agora não entendi o que esta querendo , vai usar alguma base de banco ?ou vai ter apenas as saida no console?

abrxx

williamdasflores

Bom Dia Galera.

Aproveitando o tópico, eu não entendo muito bem esse conceito Polimorfismo. Tentei fazer aqui o exercicio e veja se eu estou usando o conceito.

public class Conta {
    protected double saldo;
    protected String nomeProrietario;
    protected String tipo;

    public Conta(double saldo, String nomeProprietario, String tipo)
    {
        this.saldo = saldo;
        this.nomeProrietario = nomeProprietario;
        this.tipo = tipo;
    }

    double getSaldo()
    {
        return this.saldo;
    }

    void Sacar(double valor)
    {
        if(this.saldo >= valor )
        {
            this.saldo = (this.saldo - valor);
        }else{
            System.out.println("Saldo Insuficiente");
        }
    }

    void Deposita(double valor)
    {
        this.saldo = (this.saldo + valor);
    }

    void atualizaTaxa()
    {
        this.saldo += this.saldo * 0;
    }
}
public class ContaCorrente extends Conta {

    public ContaCorrente(double saldo, String nomeProprietario, String tipo)
    {
        super(saldo, nomeProprietario, tipo);
    }

    void atualizaTaxa()
    {
        this.saldo += (this.saldo * 0.005);
    }
}
public class ContaPoupanca extends Conta {
    public ContaPoupanca(double saldo, String nomeProprietario, String tipo)
    {
        super(saldo, nomeProprietario, tipo);
    }
    
    void atualizaTaxa()
    {
        this.saldo += (this.saldo * 0.01);
    }
}
public class Main {
    public static void main(String[] args){
        ContaCorrente cc = new ContaCorrente(400.00, "William", "Corrente");
        Conta conta = cc;

        conta.atualizaTaxa();
        System.out.println(conta.getSaldo());
   }
}

Estou no caminho certo??

edimarakika

Está no caminho, sim! =D

lucas0985

o que ta pegando ae é que ele quer que faça a classe main como nesse exemplo que ele deu:

public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Cliente filipe = new Cliente("Filipe", "[telefone removido]");
System.out.println("Vou testar a conta corrente");
Conta corrente = new ContaCorrente(filipe);
testaConta(corrente);
System.out.println("Vou testar a conta poupanca");
Conta poupanca = new Poupanca(filipe);
testaConta(poupanca);
System.out.println("Vou testar a conta investimento");
Conta investimento = new ContaInvestimento(filipe);
testaConta(investimento);
}
public static void testaConta(Conta conta){
//Deve ser implementado
}
}

e esse método

}
public static void testaConta(Conta conta){
//Deve ser implementado
}
}

Deve imprimir e atualizar todos os valores, para qualquer conta, como nesse exemplo que ele deu:

Vou testar a conta corrente
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 0.0
Vou depositar 100,00...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0
Vou atualizar...
Proprietario: Filipe CPF:
[telefone removido]
Tipo: Conta Corrente
Saldo: 100.0
Agora é só seguir os exemplos dele e fazer pra sair igual, com esse único metodo main no final imprimindo esta mensagem, e nesta declaraçao
Cliente filipe = new Cliente("Filipe", "[telefone removido]");
não se pode por o saldo, apenas os dados do cliente.

Lembrando que no trabalho ele diz pra criar uma classe separada para proprietario. :shock:

No total deverão existir 6 classes no projeto, incluindo a Main.

O atributo proprietário deve conter os atributos nome e cpf, sendo
aconselhável que seja criado uma nova classe para representá-lo.

Criado 19 de março de 2011
Ultima resposta 21 de mar. de 2011
Respostas 27
Participantes 8