Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução

package com.github.lucasdevrj.exercicios.identificandooestudante;

public class Aluno {

    private String nome;
    private TipoDeAluno tipoDeAluno;
    private boolean alunoDoTipoJaDefinido = false;

    public Aluno(String nome, TipoDeAluno tipoDeAluno) {
        this.nome = nome;
        this.tipoDeAluno = tipoDeAluno;
        alunoDoTipoJaDefinido = true;
    }

    public Aluno(String nome) {
        this.nome = nome;
    }

    public void setTipoDeAluno(TipoDeAluno tipoDeAluno) {
        if (!alunoDoTipoJaDefinido) {
            this.tipoDeAluno = tipoDeAluno;
            alunoDoTipoJaDefinido = true;
        } else {
            System.out.println("O tipo do aluno já foi definido.");
        }
    }

    public void identificar() {
        System.out.printf("Aluno: %s - Tipo: %s\n", nome, tipoDeAluno);
    }
}
package com.github.lucasdevrj.exercicios.identificandooestudante;

public enum TipoDeAluno {
    REGULAR("Regular"),
    BOLSISTA("Bolsista");

    private final String tipo;

    TipoDeAluno(String tipo) {
        this.tipo = tipo;
    }

    @Override
    public String toString() {
        return tipo;
    }
}
package com.github.lucasdevrj.exercicios.identificandooestudante;

public class Bolsista extends Aluno {

    public Bolsista(String nome) {
        super(nome);
        setTipoDeAluno(TipoDeAluno.BOLSISTA);
    }

}
/**
 * Você está construindo um sistema acadêmico para uma escola. Cada aluno possui um nome e pode
 * ser identificado no sistema com uma mensagem padrão. A escola também possui alunos bolsistas.
 * Para deixar o sistema mais informativo, queremos exibir o tipo do aluno no momento da
 * identificação, como "bolsista" ou "regular".
 *
 * Crie um programa que:
 *
 * Defina uma classe Aluno com nome e tipo.
 * Crie um método identificar() que que imprime: "Aluno: [nome] - Tipo: [tipo]".
 * Crie uma classe Bolsista que herda de Aluno e define o tipo automaticamente como "bolsista".
 * Crie um objeto Aluno regular e um Bolsista, e chame o método identificar() de cada um.
 * Exemplo de entrada:
 *
 *
 * Aluno aluno1 = new Aluno("Fernanda", "regular");
 * Bolsista aluno2 = new Bolsista("Lucas");
 *
 * aluno1.identificar();
 * aluno2.identificar();
 *
 * Saída esperada:
 *
 * Aluno: Fernanda - Tipo: regular
 * Aluno: Lucas - Tipo: bolsista
 */

package com.github.lucasdevrj.exercicios.identificandooestudante;

public class Principal {
    public static void main(String[] args) {
        Aluno alunoRegular = new Aluno("João", TipoDeAluno.REGULAR);
        Aluno alunoBolsista = new Bolsista("Marcelo");

        alunoRegular.identificar();
        alunoBolsista.identificar();

        alunoBolsista.setTipoDeAluno(TipoDeAluno.REGULAR);
        alunoBolsista.identificar();

        alunoRegular.setTipoDeAluno(TipoDeAluno.BOLSISTA);
        alunoRegular.identificar();
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta

Oi, Lucas. Tudo bem com você?

Obrigado por compartilhar sua resolução. Ela atende ao objetivo principal da atividade ao utilizar herança para criar a classe Bolsista a partir de Aluno, além de encapsular o tipo do aluno por meio de um enum. A decisão de representar os tipos com TipoDeAluno também é interessante, pois reduz a possibilidade de valores inválidos e torna o código mais seguro do que utilizar String.

Inclusive, você adicionou uma regra para impedir que o tipo seja alterado após ser definido, algo que vai além do que o exercício solicita. Esse tipo de adaptação é válido quando faz sentido para a regra de negócio.

Na sua visão, em um sistema maior, faria mais sentido impedir completamente a alteração do tipo do aluno ou permitir essa mudança mediante alguma validação específica?

Parabéns pela implementação e por ir além do enunciado da atividade. Continue compartilhando suas soluções no fórum, pois isso contribui bastante para as discussões e para o aprendizado.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!