Ada (linguaggio di programmazione): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
→‎Package: ordine
→‎Package: fix, le funzioni non possono essere nulle
Riga 409:
La modularità del codice ad un livello più astratto rispetto alle routine è ottenuta tramite i package. Un package è suddiviso in due parti distinte, specifica e implementazione, e alcuni compilatori (come [[GNAT]]) obbligano ad inserire una sola unità di compilazione per file, dividendo inoltre specifica e implementazione in due file separati (rispettivamente <code>.ads</code> e <code>.adb</code>). La specifica rappresenta l'interfaccia del package accessibile dall'esterno e può essere compilata indipendentemente dall'implementazione, facilitando i test nelle fasi iniziali di sviluppo. L'implementazione contiene il codice effettivo delle routine definite nell'interfaccia, più altre eventuali routine non accessibili dall'esterno del package. I package possono essere compilati separatamente e, in caso di modifica all'implementazione di un package senza alterarne la specifica, eventuali altri package da esso dipendenti non necessitano di essere ricompilati.<ref>{{cita|Barnes (2014)|pp. 265-266|barnes14}}.</ref>
 
Le dichiarazione delle routine contenute devono essere inserite nella specifica del package (file <code>.ads</code>), mentre l'implementazione si colloca nel body (file <code>.adb</code>). Specifica e implementazione devono avere una ''type conformance'' completa, ovvero il nome della routine, l'eventuale tipo di ritorno, il numero, tipo, modo, ordine, valore predefinito e nome dei parametri devono essere identici nella specifica e nell'implementazione, a meno di alcune differenze non sostanziali: un letterale numerico può essere sostituito con uno formalmente diverso ma con lo stesso valore, a un identificatore può essere aggiunto un prefisso in [[dot notation]], una indicazione esplicita del modo <code>in</code> può essere omessa, un insieme di parametri dello stesso sottotipo possono essere indicati separatamente. Tutte le routine dichiarate nella specifica devono essere necessariamente implementate nel body, salvo alcune eccezioni: le procedure nulle (la cui dichiarazione termina con <code>is null</code>, ed è equivalente ad una routineprocedura contenente solo una istruzione nulla), le routine [[#Tipi astratti e interfacce|astratte]] (che non hanno una implementazione) e le funzioni costituite da un'[[#Espressioni condizionali|espressione condizionale]] (che viene inserita direttamente nella specifica).<ref>{{cita|Barnes (2014)|p. 183|barnes14}}.</ref>
 
<syntaxhighlight lang=ada>