Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Resolução] Faça como eu fiz: dispositivos com sensores

SensorBase.cs

namespace E06DispositivosComSensores.Models;

internal abstract class SensorBase(string identificacao, string tipo)
{
    public string Identificacao { get; } = identificacao;
    public string Tipo { get; } = tipo;
    public bool Ativo { get; private set; } = false;

    protected void AlterarEstado()
    {
        Ativo = !Ativo;
    }
}

ISensor.cs

namespace E06DispositivosComSensores.Interfaces;

interface ISensor
{
    void Ativar();
    void Desativar();
}

SensorDePresenca.cs

using E06DispositivosComSensores.Interfaces;

namespace E06DispositivosComSensores.Models;

internal class SensorDePresenca(string identificacao, string tipo) : SensorBase(identificacao, tipo), ISensor
{
    public void Ativar()
    {
        AlterarEstado();
        Console.WriteLine($"Sensor de {Tipo} [{Identificacao}] {(Ativo ? "Ativado" : "Desativado")}");
    }

    public void Desativar()
    {
        AlterarEstado();
        Console.WriteLine($"Sensor de {Tipo} [{Identificacao}] {(Ativo ? "Ativado" : "Desativado")}");
    }
}

SensorDeTemperatura.cs

using E06DispositivosComSensores.Interfaces;

namespace E06DispositivosComSensores.Models;

internal class SensorDeTemperatura(string identificacao, string tipo) : SensorBase(identificacao, tipo), ISensor
{
    public void Ativar()
    {
        AlterarEstado();
        Console.WriteLine($"Sensor de {Tipo} [{Identificacao}] {(Ativo ? "Ativado" : "Desativado")}");
    }

    public void Desativar()
    {
        AlterarEstado();
        Console.WriteLine($"Sensor de {Tipo} [{Identificacao}] {(Ativo ? "Ativado" : "Desativado")}");
    }
}

Program.cs

using E06DispositivosComSensores.Models;

SensorDePresenca sensorDePresenca = new("S-043 corredor central","presença");
SensorDeTemperatura sensorDeTemperatura = new("S-008 sala RH","temperatura");

sensorDePresenca.Ativar();
sensorDePresenca.Desativar();

sensorDeTemperatura.Ativar();
sensorDeTemperatura.Desativar();
2 respostas
solução!

Olá, Gerson, como vai?

O seu código apresenta uma excelente compreensão dos conceitos de herança e interfaces em C#. Você utilizou corretamente a interface ISensor para padronizar o comportamento dos dispositivos e a classe abstrata SensorBase para evitar a repetição de propriedades comuns, como Identificacao e Tipo. A lógica de alternar o estado do sensor por meio de um método protegido é uma boa prática de encapsulamento.

Parabéns por compartilhar sua resolução e continue firme nos estudos.

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

Muito obrigado Mike!