Concetti Chiave

  • Programmi leggibili richiedono nomi significativi per variabili, costanti e funzioni, facilitando la comprensione del codice.
  • Il ciclo di vita del software include fasi come analisi, progettazione, programmazione, test e manutenzione, garantendo un approccio strutturato allo sviluppo.
  • Il testo origine è preparato tramite editor e suddiviso in moduli, permettendo la collaborazione tra programmatori e una gestione più efficace del codice.
  • La precompilazione modifica il codice sorgente secondo direttive specifiche, generando un output che viene poi inviato al compilatore per la compilazione finale.
  • Durante il collegamento, i moduli oggetto vengono combinati per creare un file eseguibile, con possibilità di errori se ci sono simboli non definiti correttamente.

Principi per programmi leggibili

Principi da seguire per costruire programmi leggibili e facilmente mantenibili

- Utilizzare nomi significativi (per costanti, tipi, variabili, funzioni/procedure,…)

- Utilizzare le costanti

- Uso dei commenti:

- Sintetici

- Significativi

- Aggiornati con la variazione del codice

- Indentare con cura

- Ogni funzione/procedura deve fare una ed una sola cosa

Ciclo di vita del software

Ciclo di vita del software

Modello a cascata:

- Analisi e specifica dei requisiti (si risponde alla domanda: che cosa?)

- Progettazione (si risponde alla domanda: come?)

- Programmazione e test di unità

- Integrazione e test di sistema

- Manutenzione (correttiva, adattativa, evolutiva)

(Fasi trasversali: Documentazione, Piano di test, Gestione e controllo del progetto)

- Il ciclo di sviluppo di un programma prevede una serie di fasi atte a conferire alcune significative flessibilità:

- la composizione di un programma di grosse dimensioni attraverso più moduli;

- l’uso di librerie di funzioni già compilate;

- il collegamento di moduli eventualmente scritti con differente linguaggio origine;

- la possibilità di porre in commercio programmi o moduli nella forma oggetto e non in forma origine; è questa una scelta di molti produttori di software per motivi di tutela della proprietà.

1.

Preparazione del testo origine

Preparazione del testo origine

- Il testo origine viene preparato mediante un editor e viene memorizzato in file con estensione .c/.cpp.

- Il codice sorgente di una applicazione viene, in generale, strutturato in più moduli (detti anche unità di traduzione), redatti da più programmatori.

- Ciascuna unità di traduzione viene sottoposta separatamente alle successive fasi di precompilazione e compilazione.

- La struttura di un generico modulo è schematicamente la seguente:

- Direttive di precompilazione

- Dichiarazioni di nomi di tipo

- Dichiarazioni di costanti e di variabili

- Dichiarazioni di funzioni (prototipi)

- Definizioni di costanti e di variabili

- Definizioni di funzioni

2.

Precompilazione e compilazione

Precompilazione

- il testo origine (sorgente) contenuto nel file .c/.cpp viene

elaborato da un programma detto preprocessore (o

precompilatore) che modifica il codice secondo alcune

direttive fornitegli dal programmatore;

- le direttive al preprocessore sono contenute nelle righe di

testo che cominciano col carattere ‘# ‘;

- l’output del precompilatore è codice sorgente che va al

compilatore vero e proprio.

3. Compilazione delle unità

- le unità del programma vengono compilate separatamente mediante

l’attivazione del compilatore;

- per ciascuna unità di traduzione, il testo origine viene trasformato in testo

oggetto e memorizzato in un file con estensione .obj (oppure .o)

I file oggetto

- Il formato dei file oggetto è indipendente dal linguaggio ad alto livello

- Un file oggetto contiene, oltre al codice macchina:

- una tabella dei simboli (funzioni e variabili esterne o globali) definiti nel

corrispondente file sorgente

- una tabella dei simboli utilizzati ma non definiti nel modulo (quindi

definiti in altri moduli)

4.

Collegamento e file oggetto

Collegamento (linkage)

- I diversi moduli oggetto costituenti il programma (p1.obj,…, pn.obj) vengono

combinati fra loro ed assieme al supporto al tempo di esecuzione, mediante

un programma collegatore (linker).

- Il collegatore produce il testo eseguibile del programma in unico file (per

esempio prog.exe)

- Anche se il programma consta di un solo file sorgente, alcune librerie sono

necessarie (ad es. per l’ingresso-uscita dei dati)

- Il linker può segnalare errori, tipicamente perché non è possibile associare

ad un simbolo richiesto da un modulo alcun simbolo tra quelli esportati da

tutti gli altri moduli.

- Ciò può avvenire, per esempio, in uno dei seguenti casi:

- ci si è dimenticati di indicare qualche file .obj al linker

- manca l’implementazione di qualche funzione

- esistono più definizioni di uno stesso nome di funzione o variabile globale.

Domande da interrogazione

  1. Quali sono i principi fondamentali per costruire programmi leggibili?
  2. I principi includono l'uso di nomi significativi per variabili e funzioni, l'uso di costanti, commenti sintetici e significativi, un'accurata indentazione e la regola che ogni funzione deve svolgere una sola operazione.

  3. Quali sono le fasi del ciclo di vita del software secondo il modello a cascata?
  4. Le fasi comprendono analisi e specifica dei requisiti, progettazione, programmazione e test di unità, integrazione e test di sistema, e manutenzione, con fasi trasversali come documentazione e gestione del progetto.

  5. Come viene preparato il testo sorgente di un'applicazione?
  6. Il testo sorgente è preparato tramite un editor e memorizzato in file con estensione .c/.cpp, strutturato in moduli che vengono sottoposti a precompilazione e compilazione separatamente.

  7. Qual è il ruolo del preprocessore nella fase di precompilazione?
  8. Il preprocessore elabora il testo sorgente secondo le direttive fornite dal programmatore, producendo un codice sorgente che viene poi inviato al compilatore.

  9. Cosa avviene durante il collegamento dei file oggetto?
  10. I moduli oggetto vengono combinati insieme tramite un programma collegatore, producendo un file eseguibile. Il linker può segnalare errori se ci sono simboli non associati o definizioni duplicate.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community