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

public interface Controlavel {

    void ligar();
    void desligar();

}
package com.github.lucasdevrj.exercicios.controlededispositivos;

public class Luz  implements Controlavel {

    private boolean ligado = false;

    @Override
    public void ligar() {
        if (!ligado) {
            System.out.println("Luz ligada.");
            ligado = true;
        } else {
            System.out.println("Luz já está ligada.");
        }
    }

    @Override
    public void desligar() {
        if (ligado) {
            System.out.println("Luz desligada.");
            ligado = false;
        } else {
            System.out.println("Luz já estava desligada.");
        }
    }
}
package com.github.lucasdevrj.exercicios.controlededispositivos;

public class ArCondicionado implements Controlavel {

    private boolean ligado = false;

    @Override
    public void ligar() {
        if (!ligado) {
            System.out.println("Ar-condicionado ligado.");
            ligado = true;
        } else {
            System.out.println("Ar-condicionado já está ligado.");
        }
    }

    @Override
    public void desligar() {
        if (ligado) {
            System.out.println("Ar-condicionado desligado.");
            ligado = false;
        } else {
            System.out.println("Ar-condicionado já estava desligado.");
        }
    }
}
package com.github.lucasdevrj.exercicios.controlededispositivos;

public class Principal {
    public static void main(String[] args) {
        Luz luz = new Luz();
        luz.desligar();
        luz.ligar();
        luz.ligar();

        ArCondicionado arCondicionado = new ArCondicionado();
        arCondicionado.ligar();
        arCondicionado.ligar();
        arCondicionado.desligar();
        arCondicionado.desligar();
    }
}

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

1 resposta

Olá, Lucas! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou uma interface para definir um contrato de dispositivos com Java, utilizou muito bem a implementação nas classes Luz e ArCondicionado para controlar estados e ainda compreendeu a importância da validação de condições para evitar inconsistências no funcionamento.

Uma dica interessante para o futuro é criar uma classe ControleRemoto que receba qualquer objeto Controlavel e permita ligar ou desligar sem precisar saber qual dispositivo está sendo manipulado. Assim:

public class ControleRemoto {
    public void ligarDispositivo(Controlavel dispositivo) {
        dispositivo.ligar();
    }

    public void desligarDispositivo(Controlavel dispositivo) {
        dispositivo.desligar();
    }
}

Isso faz o sistema ficar mais flexível e escalável, permitindo adicionar novos dispositivos sem alterar a lógica principal.

E se quiser aprofundar ainda mais, algumas boas práticas são:

  • Mensagens consistentes: manter um padrão de feedback para o usuário.
  • Adicionar novos dispositivos: como TV ou som, sem precisar mudar a interface.
  • Testes unitários: garantir que cada dispositivo responde corretamente aos comandos.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você acha que criar um ControleRemoto genérico para manipular qualquer dispositivo torna o sistema mais interessante e escalável ou prefere manter cada dispositivo sendo controlado diretamente para simplificar o aprendizado inicial?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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