JAVA

Progetti Multi File

Programmazione modulare in Java: interazione tra classi e gestione di progetti multi-file da riga di comando (laboratorio di esempio: il termostato).

Durata

60 minuti

Software

JDK 21 e terminale del sistema operativo

Linguaggio

JAVA

LABORATORIO AVANZATO

Gestione di più file nella stessa cartella

In questa attività pratica vedremo come Java permetta di far cooperare più classi distribuite su file diversi e come compilarle in un unico blocco dal terminale.

1 Scenario: La simulazione del Termostato

Nei progetti reali, il codice non viene mai scritto in un unico file gigante. Creeremo una classe chiamata Termostato che definisce l'oggetto e le sue proprietà, e una classe separata chiamata ConfiguraAmbiente che conterrà il metodo main per avviare la simulazione.

Struttura dei file nella cartella di progetto:
JavaMultiFile/ (Cartella principale sul Desktop)
├── Termostato.java (Classe di supporto)
└── ConfiguraAmbiente.java (Classe driver principale)

2 Scrittura del primo file: Termostato.java (Senza Main)

Questo file serve solo a definire come funziona il nostro termostato. Noterai che non contiene il metodo main, quindi non può essere eseguito da solo.

// File: Termostato.java
public class Termostato {
    // Proprietà della classe (variabili)
    int temperaturaCorrente = 24;
    int temperaturaTarget = 20;
}

3 Scrittura del secondo file: ConfiguraAmbiente.java (Con il Main)

Questo è il nostro file principale. Contiene la "chiave di accensione" main ed è incaricato di richiamare e utilizzare la classe Termostato definita nel file precedente.

// File: ConfiguraAmbiente.java
public class ConfiguraAmbiente {
    public static void main(String[] args) {
        // Creiamo una copia (istanza) del Termostato definito nell'altro file
        Termostato mioTermostato = new Termostato();
        
        System.out.println("--- MONITORAGGIO CLIMATIZZAZIONE ---");
        System.out.println("Temperatura rilevata in stanza: " + mioTermostato.temperaturaCorrente + " gradi.");
        System.out.println("Temperatura impostata (Target): " + mioTermostato.temperaturaTarget + " gradi.");
        
        // Calcolo dello scarto termico
        int scarto = mioTermostato.temperaturaCorrente - mioTermostato.temperaturaTarget;
        System.out.println("Scarto termico rilevato: " + scarto + " gradi.");
    }
}



4 Compilazione cumulativa da Terminale

Dal terminale, posizionati all'interno della cartella dove hai salvato entrambi i file. Per compilarli tutti in un colpo solo, puoi sfruttare il carattere speciale asterisco (*), che indica a Java di prendere tutti i file con estensione .java:

javac *.java
Struttura della cartella dopo la compilazione:
JavaMultiFile/ (Contenuto completo aggiornato)
├── ConfiguraAmbiente.java
├── ConfiguraAmbiente.class (Bytecode generato)
├── Termostato.java
└── Termostato.class (Bytecode generato)

5 Esecuzione del progetto

Per avviare l'applicazione dobbiamo lanciare **unicamente** la classe che possiede l'interruttore di partenza (il metodo main), ovvero ConfiguraAmbiente:

java ConfiguraAmbiente

Quiz di Verifica: Architetture Multi-File

1. In un progetto Java composto da 5 classi differenti, quante di queste devono contenere il metodo main per poter avviare l'applicazione?


2. Quale comando si usa nel terminale per compilarne in un colpo solo tutti i file .java presenti nella cartella?


3. Cosa succede se provi a lanciare il comando "java NomeClasse" su una classe di supporto che non ha il metodo main?


4. In che modo la classe principale "ConfiguraAmbiente" riesce a utilizzare le proprietà definite nel file "Termostato.java"?


5. Qual è il requisito fondamentale affinché due o più classi separate cooperino senza bisogno di istruzioni di importazione avanzate?



In sintesi

Argomenti: concetti principali, riepilogo, competenze

  1. Il JDK 21 offre gli strumenti javac (compilatore) e java (esecutore) per il ciclo di sviluppo.
  2. La firma public static void main(String[] args) è l'unico punto di ingresso valido per l'avvio di un'applicazione.
  3. In un progetto multi-file, ogni classe risiede nel proprio file .java, ma solo una classe driver conterrà il metodo main.
  4. La compilazione con javac *.java genera un file .class (bytecode) per ciascuna classe presente nella cartella.
  5. L'esecuzione avviene lanciando esclusivamente il nome della classe driver (senza estensione), lasciando che la JVM carichi i componenti secondari.

Cosa hai imparato
  1. A organizzare lo spazio di lavoro per progetti a singolo file e multi-file.
  2. A strutturare una classe driver (con main) e classi di supporto senza metodo principale.
  3. A utilizzare l'operatore new per istanziare e far comunicare classi diverse.
  4. A effettuare una compilazione cumulativa da terminale tramite l'operatore wildcard *.java.
  5. A gestire i flussi operativi e i messaggi d'errore della JVM su Windows, macOS e Linux.


Java, JDK 21, Compilazione, Terminale, Bytecode, JVM, Multi-file, Classi,