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.sistemadenotificacao;

public abstract class Notificacao {

    private String destinatario;
    private String mensagem;

    public Notificacao(String destinatario) {
        this.destinatario = destinatario;
    }

    public Notificacao(String destinatario, String mensagem) {
        this.destinatario = destinatario;
        this.mensagem = mensagem;
    }

    public String getDestinatario() {
        return destinatario;
    }

    public String getMensagem() {
        return mensagem;
    }

    public abstract void enviar();
}
package com.github.lucasdevrj.exercicios.sistemadenotificacao;

public class Sms extends Notificacao {

    public Sms(String destinatario, String mensagem) {
        super(destinatario, mensagem);
    }

    @Override
    public void enviar() {
        String sms = String.format(
                "Enviando SMS para: %s\nMensagem: %s\n",
                getDestinatario(),
                getMensagem()
        );
        System.out.println(sms);
    }
}
package com.github.lucasdevrj.exercicios.sistemadenotificacao;

public class Email extends Notificacao {

    private String assunto;
    private String corpo;

    public Email(String destinatario, String assunto, String corpo) {
        super(destinatario);
        this.assunto = assunto;
        this.corpo = corpo;
    }

    @Override
    public void enviar() {
        String email = String.format(
                "Enviando Email para: %s\nAssunto: %s\nCorpo: %s\n",
                getDestinatario(),
                assunto,
                corpo
        );
        System.out.println(email);
    }
}
package com.github.lucasdevrj.exercicios.sistemadenotificacao;

public class Push extends Notificacao {

    private String titulo;
    private String conteudo;

    public Push(String destinatario, String titulo, String conteudo) {
        super(destinatario);
        this.titulo = titulo;
        this.conteudo = conteudo;
    }

    @Override
    public void enviar() {
        String push = String.format(
                "Enviando Push para: %s\nTítulo: %s\nConteúdo: %s\n",
                getDestinatario(),
                titulo,
                conteudo
        );
        System.out.println(push);
    }
}
/**
 * Você está desenvolvendo um sistema de comunicação para uma plataforma que precisa enviar
 * alertas aos usuários de diferentes formas. Cada tipo de notificação tem suas
 * particularidades: um e-mail exige um assunto e um corpo, um SMS somente o texto
 * da mensagem, e uma notificação push deve conter um título e uma mensagem de texto.
 *
 * Crie um programa que:
 *
 * Defina uma classe base Notificacao com atributos destinatário e mensagem.
 * Crie classes específicas (Email, SMS, Push) que herdem de Notificacao.
 * Cada uma deve implementar o seu próprio método enviar(), exibindo como cada notificação
 * é disparada. Lembre-se de sobrescrever o método utilizando a anotação @override.
 * Exemplo de entrada:
 *
 * email.enviar();
 * sms.enviar();
 * push.enviar();
 *
 * Saída esperada:
 *
 * Enviando Email para: cliente@exemplo.com
 * Assunto: Promoção especial!
 * Corpo: Aproveite nossos descontos esta semana.
 *
 * Enviando SMS para: (11) 98765-4321
 * Mensagem: Sua fatura foi paga com sucesso.
 *
 * Enviando Push para: usuario_app
 * Título: Novidade!
 * Conteúdo: Você tem uma nova mensagem não lida.
 */

package com.github.lucasdevrj.exercicios.sistemadenotificacao;

public class Principal {
    public static void main(String[] args) {
        Sms sms = new Sms("(21) 96917-2735", "Compra confirmada.");
        Email email = new Email("aluno@dominio.com", "Curso de Java", "Oi amigo, te recomendo o Curso de Java da Alura.");
        Push push = new Push("aluno_alura", "Atenção!", "Fatura esta fechada.");

        sms.enviar();
        email.enviar();
        push.enviar();
    }
}

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 do exercício sobre o sistema de notificação. Sua implementação atende à proposta utilizando herança e sobrescrita do método enviar(), permitindo que cada tipo de notificação possua seu próprio comportamento. Também foi interessante separar as informações específicas de Email e Push, mantendo na classe base apenas os atributos comuns. O uso da anotação @Override está correto e reforça a intenção de sobrescrever o método abstrato definido em Notificacao.

Uma dica de evolução seria avaliar se o atributo mensagem realmente precisa existir na classe base, já que Email utiliza corpo e Push utiliza conteudo em vez desse atributo. Dependendo do objetivo do projeto, outra abordagem seria fazer com que todas as subclasses utilizassem o atributo mensagem da classe pai, alterando apenas o nome exibido na saída. Esse tipo de decisão depende da modelagem adotada e ajuda a reduzir duplicação quando os conceitos representam a mesma informação.

Se fosse necessário adicionar uma classe NotificacaoWhatsApp, quais atributos você colocaria na classe específica e quais reutilizaria da classe Notificacao?

Parabéns pela resolução e por explorar diferentes formas de modelar o problema utilizando orientação a objetos. Continue compartilhando suas soluções. O fórum está à disposição para acompanhar sua evolução.

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