1
resposta

[Projeto] Controle de dispositivos

package e;

public interface Controlavel {

    void ligar();
    void  desligar();
}
package e;

public class Main {

    public static void main(String[] args) {
        Luz luz = new Luz();
        ArCondicionado ar = new ArCondicionado();

        luz.ligar();
        luz.ligar();
        luz.desligar();

        ar.desligar();

    }
}
package e;

public class Luz implements Controlavel {

    boolean ligado;


    @Override
    public void ligar() {

        if (ligado == false) {
            ligado = true;
            System.out.println("Luz ligada");
        } else {
            System.out.println("Luz já está ligada.");
        }
    }

    @Override
    public void desligar() {

        if (ligado == true) {
            ligado = false;
            System.out.println("Luz desligada");
        } else {
            System.out.println("A luz já está desligada.");
        }

    }
}
package e;

public class ArCondicionado implements Controlavel {

    boolean ligado;

    @Override
    public void ligar() {

        if(ligado == false) {
            ligado = true;
            System.out.println("Ar-condicionado ligado");

        }
    }

    @Override
    public void desligar() {

        if(ligado == true) {
            ligado =false;
            System.out.println("Ar-condicionado desligado.");
        } else {
            System.out.println("Ar-condicionado já está desligado.");
        }
    }
}
1 resposta

Oi, João Vinicius! Meus parabéns por concluir o desafio de controle de dispositivos. É muito bom ver como você aplicou os conceitos de interfaces para padronizar o comportamento de diferentes aparelhos em uma automação residencial.

Sua implementação demonstra uma compreensão clara de como uma interface funciona como um contrato. Ao usar a anotação @Override, você garante que os métodos ligar() e desligar() estão sendo implementados conforme a interface exige. O uso do atributo booleano para gerenciar o estado interno é a maneira mais direta de evitar que o sistema envie comandos desnecessários.

Para elevar ainda mais a qualidade do seu projeto, deixo duas observações técnicas:

  • Encapsulamento: No seu código, o atributo boolean ligado não possui um modificador de acesso, o que o torna "package-private" por padrão. O ideal seria usar private boolean ligado, garantindo que apenas os métodos da própria classe possam alterar o estado do dispositivo.
  • Lógica no Ar-Condicionado: Notei que no método ligar() do ArCondicionado, faltou a mensagem de "já está ligado" no bloco else. Adicionar essa verificação mantém a experiência do usuário consistente em todos os dispositivos.

Para entender melhor como as interfaces ajudam a desacoplar o código, recomendo a leitura sobre o Polimorfismo com Interfaces em Java.

Você conseguiu perceber como o uso da interface facilitaria a criação de um novo dispositivo, como uma "Televisão" ou "Cortina Inteligente", sem precisar mudar nada na sua classe Main?

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