1
resposta

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

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.

1 resposta

Olá Diego, tudo bem?

Parabéns pela iniciativa de praticar o que foi aprendido no curso!

Sobre o seu código, achei bastante organizado e fácil de entender. Você conseguiu aplicar bem os conceitos de herança e polimorfismo, o que é muito importante nesse tipo de exercício.

Uma sugestão de melhoria seria utilizar constantes para armazenar os valores dos adicionais, ao invés de deixá-los fixos no código. Isso tornaria o seu código mais flexível, permitindo que você altere os valores dos adicionais com mais facilidade, caso necessário.

Além disso, seria interessante adicionar mais comentários no código, explicando o que cada classe e método fazem. Isso ajuda a tornar o código mais legível e facilita a manutenção no futuro.

Espero ter ajudado e bons estudos!