nikpez
Ominide
3 min. di lettura
Vota 3 / 5

Concetti Chiave

  • La programmazione modulare consente a un gruppo di lavoro di suddividere un progetto complesso in moduli indipendenti, facilitando lo sviluppo e l'integrazione del codice.
  • La modularizzazione in C++ utilizza meccanismi come la compilazione separata e le dichiarazioni extern per strutturare i programmi in moduli distinti.
  • Separare la specifica dalla implementazione di un modulo attraverso header file (.h) permette una chiara interfaccia e maggiore controllo durante la compilazione.
  • Le librerie modulari professionali distribuiscono header file per l'inclusione nel codice sorgente e moduli oggetto precompilati per proteggere la proprietà intellettuale.
  • Dividere un programma in più file sorgenti rende la struttura più chiara, facilita il lavoro di più programmatori e riduce la necessità di ricompilare l'intero programma per ogni modifica.
Programmazione modulare

La possibilità di collegare tra loro più file per produrre un unico eseguibile può essere sfruttata anche per rendere
più semplice la fase di sviluppo di un pgm molto articolato (applicazione).
Infatti, facendo riferimento ad un ipotetico gruppo di lavoro chiamato a produrre un pgm di una certa complessità, è possibile prevedere che:
- L’intero gruppo analizzi nel suo insieme il problema ed individui le funzioni e le caratteristiche dei moduli in cui può essere suddiviso il pgm.
- Ciascun componente si prenda carico di un modulo e lo sviluppi fino a costruire autonomamente il codice oggetto su un proprio file.
- I moduli prodotti vengono collegati tra loro tramite il linker per produrre il codice eseguibile, da sottoporre ad una verifica finale.

Modularizzazione
L'uso disciplinato di alcuni meccanismi del linguaggio C++ consente una corretta strutturazione di un programma in moduli.
Tra i principali meccanismi vi sono:
- la compilazione separata,
- l'inclusione testuale,
- le dichiarazioni extern,
- l'uso dei prototipi di funzioni.

Specifica e implementazione
È buona norma tenere separata la specifica di un modulo dalla sua implementazione.
Un programma utente di un modulo A deve conoscerne la specifica, ma disinteressarsi dei dettagli della sua implementazione.
Ciò può essere realizzato scrivendo un file di intestazione o header file (con l’estensione .h) contenente le dichiarazioni che costituiscono l’interfaccia di A, ed un file separato per l’implementazione di A.
L'header file deve essere incluso (mediante la direttiva al preprocessore #include) nella implementazione, ed in ogni modulo
utente, affinché il compilatore possa eseguire i necessari controlli.

Librerie di moduli software
Queste tecniche di sviluppo modulare consentono lo sviluppo su base professionale di librerie di moduli
software.
Il produttore di una libreria distribuisce:
- i file di intestazione (che devono essere inclusi dell’utilizzatore nel codice sorgente) dei moduli che
fanno parte della libreria;
- i moduli di libreria in formato oggetto (già compilati), che l’utilizzatore deve collegare assieme ai propri moduli
oggetto.
Tale scelta è tipicamente motivata da esigenze di tutela della proprietà, ed inoltre evita di dover ricompilare i moduli di libreria.

Perché dividere un programma in più file sorgenti
Ricapitolando, quali sono i vantaggi del dividere un programma in più moduli sorgente?
La struttura di un programma medio-grande è più chiara se il programma è suddiviso in più file sorgenti.
Più programmatori possono lavorare allo stesso tempo su file diversi.

Non occorre ricompilare l’intero programma ogni volta
che si effettua una piccola modifica.
Si possono usare librerie senza dovere includere fisicamente il codice sorgente nel programma (in effetti, spesso il sorgente non è disponibile).

Domande da interrogazione

  1. Quali sono i vantaggi della programmazione modulare?
  2. La programmazione modulare semplifica lo sviluppo di programmi complessi, permette a più programmatori di lavorare simultaneamente su moduli diversi, e riduce la necessità di ricompilare l'intero programma per piccole modifiche.

  3. Come si gestisce la specifica e l'implementazione di un modulo?
  4. È consigliabile separare la specifica di un modulo dalla sua implementazione, utilizzando un file di intestazione per le dichiarazioni dell'interfaccia e un file separato per l'implementazione.

  5. Quali meccanismi del linguaggio C++ supportano la modularizzazione?
  6. I principali meccanismi includono la compilazione separata, l'inclusione testuale, le dichiarazioni extern e l'uso dei prototipi di funzioni.

  7. Perché è utile utilizzare librerie di moduli software?
  8. L'uso di librerie di moduli software consente di proteggere la proprietà intellettuale, evita la ricompilazione dei moduli di libreria e facilita l'inclusione di funzionalità senza dover accedere al codice sorgente.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community