1
resposta

[Projeto] Prática de Polimorfismo e Herança -Java

Boa noite, pesquisei um exercício na internet para tentar praticar melhor o que foi ensinado nesse curso e gostaria de um feedback em relação ao polimorfismo e a OO utilizada (se tem algo a melhorar ou um jeito mais fácil de ser feito)

O exercício informa que há 3 tipos de ingressos: o Normal, Camarote inferior e o Camarote superior. O usuário precisa escolher entre os 3 e é necessário informar o preço final (o exercício não sugeria nenhum preço, então inventei).

Em relação a herança, o exercício solicitou que existisse a classe Ingresso que seria herdada pelas classes Normal e VIP, depois a classe VIP seria herdada pela CamaroteSuperior e CamaroteInferior.

Também foi criada a classe SistemaInterno e a Teste para fazer algumas configurações em relação a interação com o usuário.

public abstract class Ingresso {
    private double valor=100.50;
    private int categoria;

    public abstract double valorFinal();

    public double getValor() {
        return this.valor;
    }
    public void setValor(double valor) {
        this.valor = valor;
    }
    public int getCategoria() {
        return this.categoria;
    }
    public void setCategoria(int categoria) {
        this.categoria = categoria;
    }
}
public class VIP extends Ingresso {

    private double adicional = 1.25;

    public double valorFinal() {
        return getValor()*getAdicional();
    }
    public double getAdicional() {
        return this.adicional;
    }
    public void setAdicional(double adicional) {
        this.adicional = adicional;
    }
}
public class CamaroteInferior extends VIP {

    public double valorFinal() {
        return super.valorFinal();
    }

}
public class CamaroteSuperior extends VIP {
    private double adicionalSup = 1.50;

    public double valorFinal() {
        return super.valorFinal()*getAdicionalSup();
    }

    public double getAdicionalSup() {
        return this.adicionalSup;
    }
    public void setAdicionalSup(double adicional) {
        this.adicionalSup = adicional;
    }
}
public class Normal extends Ingresso {

    public double valorFinal() {
        return getValor();
    }
}
import java.util.Scanner;

public class SistemaInterno {

    Scanner a = new Scanner(System.in);

    public void PedirIngresso() {
        int categoria=0;
        System.out.println("Escolha um tipo de ingresso:\n 1- Normal\n 2- Vip Super\n 3- Vip Padrão\n");
        categoria = a.nextInt();
        categoria = VerificacaoSeguranca(categoria);
        DefinirCategoria(categoria);
    }

    public int VerificacaoSeguranca(int categoria) {
        boolean condicao = categoria!=1&&categoria!=2&&categoria!=3;
        if(condicao) {
            while(condicao) {
                System.out.println("Digite apenas 1,2 ou 3, por favor!");
                categoria = a.nextInt();
        }
        }
        return categoria;
    }
    public void DefinirCategoria(int categoria) {
        switch(categoria) {
        case 1:
            Ingresso normal = new Normal();
            Valor(normal);
            break;
        case 2:
            Ingresso superior = new CamaroteSuperior();
            Valor(superior);
            break;
        case 3:
            Ingresso inferior = new CamaroteInferior();
            Valor(inferior);
            break;    
        }
    }
     public void Valor(Ingresso aux){
            double valor = aux.valorFinal();
            System.out.println("O valor final do seu ingresso é: "+valor);
        }
}
public class Teste {
    public static void main(String[] args) {

    SistemaInterno aux = new SistemaInterno();
    aux.PedirIngresso();
    }
}

Obrigado por ver até aqui. (Criei o mesmo tópico na aula de JAVA POLIMORFISMO porque não tinha certeza se era um off topic ou não)

1 resposta

Olá Diego, tudo bem? Parabéns por buscar exercícios para praticar o que foi ensinado no curso! É uma excelente forma de fixar o conteúdo e aprimorar seus conhecimentos.

Sobre o código que você postou, parece que você entendeu bem os conceitos de polimorfismo e herança. A estrutura das classes está coerente e você utilizou corretamente os métodos abstratos para garantir que cada classe filha implemente sua própria lógica.

Uma sugestão que posso dar é em relação à nomenclatura das classes. Talvez fosse interessante utilizar nomes mais descritivos, como "IngressoNormal", "IngressoCamaroteInferior" e "IngressoCamaroteSuperior", para facilitar a leitura e entendimento do código.

Outra sugestão é em relação ao método "Valor" na classe SistemaInterno. Talvez fosse interessante utilizar um nome mais descritivo, como "calcularValorIngresso", para deixar mais claro qual é a função desse método.

De resto, parabéns pelo código e continue praticando! Espero ter ajudado e bons estudos!