Desenvolvendo exercícios para fixação

Olá colegas desenvolvedores, sou novo na plataforma de desenvolvimento JAVA e estou aqui para aprender junto a vocês.

Vou direto ao assunto! Quero desenvolver um exercício nesta linguagem e gostaria da colaboração de todos para alcançar este objetivo.

Primeiro desenvolvi 4 classes: A classe pai Cliente, outras duas classes filho ClienteRegular e ClienteEventual. E uma outra classe ClienteVIP que herda da classe ClienteRegular.

Dentro da classe Cliente tem um atributo chamado pontos que tem por objetivo acumular pontos de acordo com as compras efetuadas por clientes. Assim sendo, a política adotada para o acúmulo de pontos de acordo com o perfil de cada cliente, como mostra a lista abaixo:

  • ClienteEventual: 1 ponto para cada R$20,00
  • ClienteRegular: 1 ponto para cada R$15,00
  • ClienteVIP: 1 ponto para cada R$10,00

Então, vamos as questões:

a)Considerando que para cada tipo de cliente há uma forma diferenciada para acumular pontos, defina um método abstrato na classe Cliente chamado calcularPontos. Este método deverá ser concretizado em cada uma das subclasses de Cliente de acordo com o perfil descrito.

b)Implemente ainda, um método abstrato na classe Cliente chamado converterPontos, cujo objetivo é converter os pontos do cliente em descontos para uma determinada compra, respeitando os seguintes critérios:

a. ClienteEventual:1 ponto = R$0,05
b. ClienteRegular:1 ponto = R$0,10
c. ClienteVIP: 1 ponto = R$0,15

Assim sendo, escreva métodos concretos para cada uma das classes que permita converter os pontos de acordo com a política adotada.

c)Considerando as implementações realizadas, demonstre em seu programa a implementação de um método subscrito (override).

d)Seguindo o modelo proposto, faça em seu programa a implementação de um método redefinido (static method).

e)Escreva um programa main que permita demonstrar a execução dos métodos implementados a partir de diferentes variáveis de referência (objetos diferentes).

f)Faça adaptações nas classes implementadas que permitam o polimorfismo. Escreva os códigos no programa main que demonstre o polimorfismo.

g)Através do uso de instanceof faça verificações no seu programa de modo a garantir a atribuição de uma variável de referência de um tipo para uma variável de outro tipo.

Estas acredito, são questões bem básicas, mas espero que o pessoal que domina dêem uma atenção.

Obrigado pela atenção.

Marcelo Vargas

Para mim a maior parte está boa, exceto certas partes:

overrride = sobrescrito, não subscrito

“d)Seguindo o modelo proposto, faça em seu programa a implementação de um método redefinido (static method).”

  • Não entendi, tudo bem sobre implementar métodos static, mas redefinidos? Foram definidos onde? O que um método static tem a ver com isso?

Entao, este exercicio ainda nao consegui resolver…toda ajuda será bem vinda! abraço

Você quer desenvolver o exercício ou resolver o exercício?

Tambem não entendi!
Voce está resolvendo ou elaborando o exercício.???

Um método redefinido é um método estático com o mesmo nome que aquele de uma classe pai. Em métodos estáticos não ha sobre-escrita (override) ha redefinição (redefinition). Colcoar final no método estático eveita que ele seja redefinido.
tlv seja isso a que se refere a pergunta.

Não sabia que tinha essa nomenclatura diferente.

Se bem que é logico, aquela discussão sobre ‘contexto estático’ aqui no forum explicou bem.

Ainda estou desenvolvendo este exercício, achei muito interessante pelo fato de abordar tópicos básicos.
Inicialmente implementei as 4 classes, classe pai Cliente, e suas respectivas classes filho.
E nao consegui implementar o resto ( a codificaçao mesmo).
Se puderem, podem me explicar a codificacao como funciona, onde devo implementar os metodos e assim por diante, e ainda como é formada.

Obrigado a todos

voce implementou ? ou vo so criou a classe com o nome ? Oo
implentou = pronto

aqui no guj voce vai conseguir resposta mais rapido se postar o codigo que você ja fez, se voce nao sabe onde por um metodo vai ficar dificil entender o polimorfismo, poste codigo e use as tags :slight_smile:

Primeiro desenvolvi 4 classes: A classe pai Cliente, outras duas classes filho ClienteRegular e ClienteEventual. E uma outra classe ClienteVIP que herda da classe ClienteRegular.


package vo;
import java.util.Date;
import java.lang.String;



public class Cliente{  
    private int id;
    private String nome;
    private int pontos;
    private double valorCompras;
    
    
    /** Creates a new instance of Cliente */
    public Cliente() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

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

    public int getPontos() {
        return pontos;
    }

    public void setPontos(String cidade) {
        this.pontos = pontos;
    }

    public double getvalorCompras() {
        return valorCompras;
    }

    public void setvalorCompras(Double valorCompras) {
        this.valorCompras = valorCompras;
    };
 
};


package vo;
import java.util.Date;


public class ClienteEventual extends Cliente {
    private int cartaoDesconto;
  
     
    
    /** Creates a new instance of Cliente */
    public ClienteEventual() {

    }

    public int getcartaoDesconto() {
        return cartaoDesconto;
    }

    public void setcartaoDesconto(int cartaoDesconto) {
        this.cartaoDesconto = cartaoDesconto;
    }
}
    public abstract class calcularPontos() {
        pontos = 1;
        pontos = valorCompras * pontos / 0.05;
        return pontos;
    }

[code]

package vo;
import java.util.Date;

public class ClienteRegular extends Cliente {
private int numCartaoRelacionamento;
private double taxaDesconto;

/** Creates a new instance of Cliente */
public ClienteRegular () {

}

public int getnumCartaoRelacionamento() {
    return numCartaoRelacionamento;
}

public void setnumCartaoRelacionamento(int numCartaoRelacionamento) {
    this.numCartaoRelacionamento = numCartaoRelacionamento;
}

public double gettaxaDesconto() {
    return taxaDesconto;
}

public void settaxaDesconto(double taxaDesconto) {
    this.taxaDesconto = taxaDesconto;
}
public abstract class calcularPontos(double valorCompras, double pontos) {
    pontos = 1;
    pontos = valorCompras * pontos / 0.10;
    return pontos;

 
 };

}[/code]

[code]
package vo;
import java.util.Date;

public class ClienteVip extends ClienteRegular {
private double credito;

/** Creates a new instance of Cliente */
public ClienteVip() {

}

public double getcredito() {
    return credito;
}

public void setcredito(double credito) {
    this.credito = credito;
}

public abstract class calcularPontos() {
pontos = 1;
pontos = valorCompras * pontos / 0.15;
return pontos;

}[/code]

Dentro da classe Cliente tem um atributo chamado pontos que tem por objetivo acumular pontos de acordo com as compras efetuadas por clientes. Assim sendo, a política adotada para o acúmulo de pontos de acordo com o perfil de cada cliente, como mostra a lista abaixo:

  • ClienteEventual: 1 ponto para cada R$20,00
  • ClienteRegular: 1 ponto para cada R$15,00
  • ClienteVIP: 1 ponto para cada R$10,00

Então, vamos as questões:

depois segue então as questões que eu já havia especificado, no inicio do tópico. Se puderem resolver letra por letra dizendo onde vai o código seria interessante para o entendimento.

Obrigado.

Marcelo Vargas

Se tiver algo errado também…por favor, me digam!! obrigado

Marcelo Vargas

Polimorfismo é bom para podermos fazer isto:

Cliente cliente = getClienteDeAlgumLugar(); cliente.calcularPontos();Calculamos os pontos sem nos preocuparmos com quem é o cliente.

Bem, há vários problemas no seu código:

:arrow: O método abstrato calcularPontos() sem corpo não existe em Cliente.

:arrow: O método calcularPontos() nas subclasses deve ser um método concreto que sobrescreva e implemente o método abstrato em Cliente.

:arrow: O exercício não pede que você implemente atributos e acessores além daqueles especificados. Se você não tem uso para eles, não os implemente ainda. Esqueça de pensar “ah, eu posso precisar disso”. Implemente quando e se for precisar.

:arrow: valorCompras não é um atributo de Cliente.

Estes atributos foram pedidos sim, foi feito um diagrama de classes com esse atributos…dai eu coloquei aki através do código, mas acabei nao comentando isso.

Cliente cliente = getClienteDeAlgumLugar(); cliente.calcularPontos();

implementando este código vou conseguir calcular os pontos de todos as classes?onde eu encaixo esse código??desculpa, mas nao conheço muito a linguagem.

abraço

Marcelo Vargas

Funciona da seguinte forma:

public class Cliente { public abstract int calcularPontos(double valorCompras); }public class ClienteEventual extends Cliente { public int calcularPontos(double valorCompras) { return (int) valorCompras / 20; } }public class ClienteRegular extends Cliente { public int calcularPontos(double valorCompras) { return (int) valorCompras / 15; } }public class ClienteVip extends ClienteRegular { public int calcularPontos(double valorCompras) { return (int) valorCompras / 10; } }

Isso é só um exemplo, p/ melhorar daria p/ declarar uma constante VALOR_POR_PONTO

[code]public class Cliente
{
final int VALOR_POR_PONTO = Integer.MAX_VALUE;

public int calcularPontos(double valorCompras)
{
    return (int) valorCompras / VALOR_POR_PONTO;
}

}[/code]E fazer em cada subclasse somente o valor dessa constante mudar:

public class ClienteVip extends ClienteRegular { final int VALOR_POR_PONTO = 10; }E o código de calcular pontos não mudaria, nem precisaria ser sobrescrito.

Se você nunca for instanciar Cliente, somente suas subclasses, também daria pra colocar

public abstract class Cliente

Vlw Bruno, estou entendendo melhor o funcionamento…no começo não é fácil, mas depois vai clareando…

Agora como faço para :

e)Escreva um programa main que permita demonstrar a execução dos métodos implementados a partir de diferentes variáveis de referência (objetos diferentes).

f)Faça adaptações nas classes implementadas que permitam o polimorfismo. Escreva os códigos no programa main que demonstre o polimorfismo.

como resolvo??putz desculpe incomodar …mais será de grande ajuda…

abraço

Escreva um HelloWorld, declare três clientes diferentes (Cliente cliente1, cliente2…), e inicialize cada cliente com uma subclasse diferente (cliente1 = new ClienteVip(), ou algo do tipo).

Mesma coisa que acima, mas vc pode implementar um método toString em cada cliente que diga “Eu sou o cliente Vip”, “Eu sou cliente tal”, etc.

Depois chama o método com System.out.println(cliente1.toString());, e faça o mesmo p/ cada cliente diferente.