Exercício de JAVA, interface.. Da faculdade. Alguém pode me ajudar?

Estou com esse exercício para resolver, da faculdade, mas não estou conseguindo entender mt bem. Estou lendo, pesquisando, mas não consegui até agora. Alguém pode me ajudar?

O exercício é seguinte:

s interfaces podem ser utilizadas até mesmo em tarefas mais simples. Além de definirem métodos a serem utilizados pelas classes que as implementam, as interfaces podem declarar constantes para serem usadas por estas classes.

Você trabalha na área de TI de uma escola. A secretaria da instituição solicitou que você crie uma forma de inserir o conceito obtido pelo aluno, com sua descrição, de tal maneira que apenas seja necessário informar o número do conceito obtido.

Você deverá criar uma interface com três constantes, constante “a” = “Parabéns, você atingiu todos os indicadores de avaliação com excelência”; constante “b” = “Parabéns, você obteve aproveitamento satisfatório nos indicadores de avaliação”; constante “c” = “Você não atingiu o mínimo esperado para aprovação”.

Crie uma classe para implementar a interface. Nesta classe, crie uma variável para receber a opção digitada pelo usuário. Utilize o método showInputDialog() da classe JOptionPane para solicitar as opções. Crie uma estrutura de decisão para verificar a opção digitada e printar na tela o conceito e sua descrição.

Utilize uma linguagem de programação orientada a objetos. Crie um projeto chamado ConceitoAluno; dentro dele, crie um pacote chamado interfaces, e, dentro do pacote, crie a interface e a classe para implementá-la.

Desde já, agradeço!!

Qual é a sua dúvida?

Não sei fazer isso, eu até tentei, mas não consegui cara!

Não sei criar as constantes.
Não sei como vou fazer para utilizar a classe JOpitionPane para solicitar as entradas mas com a estrutura de decisão para verificar.

Consegue me ajudar com isso?

Agradeço!

Prezado, onde você está cursando/estudando?

Interfaces servem para definir comportamentos.

Estão te ensinando a usar interfaces para definir constantes, isso é um anti-pattern, ou seja, algo que não se deveria fazer.

Constantes você define com enum ou com classes, não com interfaces.

Estou estudando na ETEP Faculdades, conhece?
Pois é, seguindo o enunciado do exercício eu pesquisei, procurei algo para servir de referência, mas não consegui não…

Então é por isso que você disse mesmo!

package interfaces;

public interface Constantes {

    public static final String A = "Parabéns, você atingiu todos os indicadores de avaliação com excelência";
    public static final String B = "Parabéns, você obteve aproveitamento satisfatório nos indicadores de avaliação";
    public static final String C = "Você não atingiu o mínimo esperado para aprovação";
}
import java.awt.Component;

import javax.swing.Icon;
import javax.swing.JOptionPane;

public class Programa implements Constantes {

    public static void main(String[] args) {
        Programa programa = new Programa();
        programa.executar();
    }

    public void executar() {
        String opcao = solicitarOpcaoDoUsuario();
        String conceito = avaliarConceito(opcao);
        apresentar(opcao, conceito);
    }

    private String solicitarOpcaoDoUsuario() {
        Component componentePai = null;
        Object mensagem = "Selecione o conceito do aluno";
        String titulo = "Entrada de dados";
        int tipoMensagem = JOptionPane.QUESTION_MESSAGE;
        Icon icone = null;
        Object[] valoresSelecionaveis = new String[] { "A", "B", "C" };
        Object valorInicialSelecionado = "A";
        String opcao = (String) JOptionPane.showInputDialog(componentePai, mensagem, titulo, tipoMensagem, icone, valoresSelecionaveis, valorInicialSelecionado);
        return opcao;
    }

    private String avaliarConceito(String opcao) {
        switch (opcao) {
            case "A":
                return A; // retorna a constante A
            case "B":
                return B; // retorna a constante B
            case "C":
            default:
                return C; // retorna a constante C
        }
    }

    private void apresentar(String opcao, String conceito) {
        Component componentePai = null;
        Object mensagem = "O conceito do aluno é: " + opcao + "\n" + conceito;
        String titulo = "Resultado";
        int tipoMensagem = JOptionPane.INFORMATION_MESSAGE;
        JOptionPane.showMessageDialog(componentePai, mensagem, titulo, tipoMensagem);
    }
}

O exemplo acima, faz o que foi pedido.

Mas tenha em mente que estão te ensinando más práticas.
Se eu fosse você, questionaria o professor sobre isso.

Interfaces foram criadas para definir comportamentos, para estabelecer “contratos” entre classes, para aumentar o polimorfismo e para reduzir o acoplamento de classes.
É possível definir constantes nela, mas não é pra isso que elas servem.
:wink:

1 curtida

Muito obrigado, vou questionar o professor sim! Agradeço a ajuda mais uma vez!

Veja o mesmo exemplo implementado utilizando enum, que é a forma recomendada de utilizar constantes fortemente tipadas:

public enum Conceito {

    A("Parabéns, você atingiu todos os indicadores de avaliação com excelência"),

    B("Parabéns, você obteve aproveitamento satisfatório nos indicadores de avaliação"),

    C("Você não atingiu o mínimo esperado para aprovação");

    public final String descricao;

    private Conceito(String descricao) {
        this.descricao = descricao;
    }

    @Override
    public String toString() {
        return name();
    }
}

O programa em si:

public class Programa {

    public static void main(String[] args) {
        Programa programa = new Programa();
        programa.executar();
    }

    public void executar() {
        Conceito conceito = solicitarOpcaoDoUsuario();
        apresentar(conceito);
    }

    private Conceito solicitarOpcaoDoUsuario() {
        Component componentePai = null;
        Object mensagem = "Selecione o conceito do aluno";
        String titulo = "Entrada de dados";
        int tipoMensagem = JOptionPane.QUESTION_MESSAGE;
        Icon icone = null;
        Object[] valoresSelecionaveis = Conceito.values();
        Object valorInicialSelecionado = Conceito.A;
        Conceito opcao = (Conceito) JOptionPane.showInputDialog(componentePai, mensagem, titulo, tipoMensagem, icone, valoresSelecionaveis, valorInicialSelecionado);
        return opcao;
    }

    private void apresentar(Conceito conceito) {
        Component componentePai = null;
        Object mensagem = "O conceito do aluno é: " + conceito + "\n" + conceito.descricao;
        String titulo = "Resultado";
        int tipoMensagem = JOptionPane.INFORMATION_MESSAGE;
        JOptionPane.showMessageDialog(componentePai, mensagem, titulo, tipoMensagem);
    }
}
2 curtidas

Esse professor é muito sacana! Não temos contato direto com ele, esse semestre por conta da pandemia, não estamos tendo aulas presenciais e nem online ao vivo. Somente EaD, eles lançam os conteúdos no site e a gente pesquisa e resolve os exercícios.

Semana que vem começará as provas. Já estou até vendo. Provavelmente vou precisar de ajuda. Vou pedir ajuda aqui para vocês no forum. Agradeço desde já.

Estou com mais uns 2 exercícios para resolver e enviar para ele ainda.

Vlw pela ajuda até agora!