1
resposta

[Projeto] Faça como eu fiz: dispositivos com sensores


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

class SensorTemperatura : ISensor
{
    public void Ativar()
    {
        Console.WriteLine("Sensor de temperatura ativado.");
    }

    public void Desativar()
    {
        Console.WriteLine("Sensor de temperatura desativado.");
    }
}

class SensorPresenca : ISensor
{
    public void Ativar()
    {
        Console.WriteLine("Sensor de presença ativado.");
    }

    public void Desativar()
    {
        Console.WriteLine("Sensor de presença desativado.");
    }
}

SensorTemperatura temp = new SensorTemperatura();
SensorPresenca presenca = new SensorPresenca();

temp.Ativar();
temp.Desativar();

presenca.Ativar();
presenca.Desativar();
1 resposta

Olá, Eduardo! Tudo bem?

Com este projeto, você atingiu um dos patamares mais importantes da arquitetura de software: o uso de Interfaces para definir contratos de comportamento.

Enquanto nos exercícios anteriores você focou em Herança (relações do tipo "é um"), aqui você está explorando a Abstração e o Polimorfismo de Interface. Isso é fundamental para criar sistemas flexíveis e desacoplados.

Os pontos altos da sua implementação são:

  • Contrato Padronizado: A interface ISensor garante que qualquer sensor que você criar no futuro (seja de fumaça, umidade ou luminosidade) obrigatoriamente terá os métodos Ativar() e Desativar(). Isso traz previsibilidade ao código.
  • Independência de Implementação: Note que cada sensor executa sua própria lógica dentro do método. O SensorTemperatura faz algo específico, mas para quem usa o objeto, basta saber que ele é um ISensor.
  • Preparação para Injeção de Dependência: Esse modelo facilita muito o uso de padrões de design avançados. Você poderia ter uma classe PainelDeControle que recebe uma lista de ISensor e ativa todos de uma vez, sem precisar saber qual é o tipo específico de cada um.

Um desafio extra de Composição:

Para fechar o ciclo de Herança vs. Composição, tente criar uma classe chamada DispositivoInteligente. Em vez de herdar de um sensor, ela poderia ter um sensor (composição):

class DispositivoInteligente 
{
    private ISensor _sensor;
    public DispositivoInteligente(ISensor sensor) => _sensor = sensor;
    
    public void IniciarSistema() => _sensor.Ativar();
}

Dessa forma, você pode criar um dispositivo e "plugar" qualquer sensor nele (Temperatura ou Presença) dinamicamente!

Parabéns pela sequência incrível de projetos, Eduardo! Sua evolução nos conceitos de C# e Orientação a Objetos é nítida e muito consistente.

Espero que possa ter lhe ajudado!