- Saper tradurre requisiti funzionali di un sistema reale in attributi e metodi di una classe
- Utilizzare variabili booleane per gestire lo stato interno di un oggetto
- Applicare la logica condizionale all'interno dei metodi per simulare comportamenti reali
- Sviluppare algoritmi per il monitoraggio e la reportistica di un parco macchine istanziato
Modellazione e Stato di un Oggetto: Il "Condizionatore"
In questo modulo, esploreremo come modellare oggetti che non hanno solo dati statici (come un libro), ma che possiedono uno stato operativo. Un condizionatore può essere acceso o spento, e questa condizione determina se le altre funzioni (come cambiare temperatura) siano eseguibili o meno.
L'astrazione in ambito Smart Home ci permette di gestire dispositivi complessi attraverso interfacce semplificate. Non ci interessa come il gas refrigerante circoli nei tubi, ma ci interessa sapere se il dispositivo è attivo e a che temperatura è impostato.
| Attributo | Tipo di Dato | Descrizione dello Stato |
|---|---|---|
| marca | string | Identifica il produttore del dispositivo. |
| acceso | bool | Stato logico: true (acceso), false (spento). |
| tempCorrente | int | Il valore numerico della temperatura impostata. |
I metodi che andremo a definire agiranno come un telecomando digitale, modificando lo stato dell'oggetto in modo controllato.
LABORATORIO
Sviluppo Classe Condizionatore (IoT Simulation)
Obiettivo: Realizzare una classe capace di gestire l'accensione e la regolazione termica di un ufficio, implementando controlli di sicurezza.
- Dev-C++ o Code::Blocks
- Logica di controllo condizionale (if/else)
1 Esercitazione Guidata: Definizione e Logica di Stato
Seguire il codice per implementare la classe. Notare come il metodo impostaTemperatura verifichi prima se il condizionatore è acceso.
Passo 1: Definizione della classe Condizionatore.
#include <iostream>
#include <string>
using namespace std;
class Condizionatore {
public:
string marca;
bool acceso;
int tempCorrente;
// Metodo per accendere/spegnere
void power() {
acceso = !acceso; // Inverte lo stato attuale
if(acceso) {
cout << marca << ": Dispositivo ACCESO. Temp: " << tempCorrente << "C" << endl;
} else {
cout << marca << ": Dispositivo SPENTO." << endl;
}
}
// Metodo per impostare la temperatura con controllo
void impostaTemperatura(int nuovaTemp) {
if (acceso) {
if (nuovaTemp >= 16 && nuovaTemp <= 30) {
tempCorrente = nuovaTemp;
cout << "Temperatura impostata a " << tempCorrente << " gradi." << endl;
} else {
cout << "Errore: Temperatura fuori range (16-30)!" << endl;
}
} else {
cout << "Impossibile cambiare temperatura: il dispositivo è spento." << endl;
}
}
};
Passo 2: Test del sistema di domotica nel main.
int main() {
Condizionatore ufficio;
ufficio.marca = "Samsung EcoCool";
ufficio.acceso = false; // Inizialmente spento
ufficio.tempCorrente = 22; // Temperatura di default
// Tentativo di modifica da spento
ufficio.impostaTemperatura(20);
// Accensione e regolazione
ufficio.power();
ufficio.impostaTemperatura(18);
// Spegnimento
ufficio.power();
return 0;
}
2 Esercizio: Monitoraggio Energetico Uffici
Contesto: L'azienda vuole monitorare quanti condizionatori sono rimasti accesi a fine giornata per risparmiare energia.
Consegna:
- Modifica la classe aggiungendo l'attributo stanza (string) per identificare dove si trova il dispositivo.
- Crea nel main 3 oggetti: c1 (Laboratorio), c2 (Segreteria), c3 (Presidenza).
- Imposta lo stato degli oggetti in modo che alcuni siano accesi e altri spenti.
- Scrivi una funzione o una logica nel main che analizzi i 3 oggetti e stampi un AVVISO solo per le stanze in cui il condizionatore è rimasto acceso.
- Calcola e visualizza la temperatura media impostata solo tra i dispositivi attualmente accesi.