La sua domanda è semplice e nel contempo pesantissima. E' semplice perché lei la pone con assoluta immediatezza e chiarezza. E' pesantissima perché sottende gravi problemi di impostazione che sussistono nel nostro settore.

L'Informatica è una scienza giovane e soffre di errori di base e di deviazioni come nel passato successe già alla Meccanica, alla Chimica ed a tante altre discipline. Importante, specie per un insegnante, è saperlo e trovare soluzioni adeguate. Infatti alcuni metodi di studio sono talmente rovinosi che una volta accettati non c'è verso di venirne fuori. Anzi più si va avanti e più se ne resta invischiati. L'unica soluzione praticabile consiste nel metterli da parte e porre lo studio dell'Informatica su nuove basi. La sua domanda pone il dito su una difficoltà di questo tipo.

Da anni si è tentato di affrontare le strutture dei dati con strumenti logico-astratti i quali hanno prodotto confusioni nella didattica e poi a ruota nella pratica professionale. Se si trattasse di un ostacolo di poco conto, sarebbe sufficiente qualche caso per recuperare lo studente. Invece gli esempi didattici servono quasi niente a causa della irragionevolezza dell'approccio astratto. Esso costituisce una vera e propria iattura e l'unica via praticabile consiste nel riporlo. Ne ho già scritto più volte in questa rubrica, ad esempio nelle risposte 27, 29 e 38.
Quale strada si può ragionevolmente percorrere?

A mio avviso, l'unica è quella che si conforma alle più elementari nozioni di hardware ed alla pratica professionale.
Lo studente sa che il computer non manipola valori-matematici-astratti bensì opera con porzioni di memoria ram nei quali sono contenuti dei codici. Dunque è facile spiegare che alla base di ogni memorizzazione ci sono i
campi informativi. Con questo nome si sottolinea il loro significato operativo e si agevola il paragone con gli equivalenti cartacei che si trovano ad esempio sui moduli, sui prestampati, su molti documenti ecc. Il campo informativo che contiene il dato elementare, si disegna come uno scatolotto o anche con un semplice segmento, ponendo sotto il nome e sopra il suo contenuto

Non sto dicendo nulla di nuovo. Il modello è già noto, ma non viene approfondito. Gli viene dato un ruolo accessorio. Qualcuno lo trova banale, invece ha un valore sostanziale perché ogni memorizzazione si articola con tali celle di memoria. 

Una volta che la questione è stata posta sul piano concreto, lo studio dei dati si appiana e progredisce vorrei dire da solo. Infatti le strutture dati sono aggregazioni dei campi informativi che il programmatore realizza con le dicharative. I testi riportano:

  1. le tabelle o vettori o matrici 
  2. le liste con puntatori
  3. le pile e le code
  4. gli insiemi
  5. gli alberi
  6. i record

I più importanti sono i primi e gli ultimi perché risultano di gran lunga i più comuni. Si disegnano in modo immediato come insiemi di campi.

Le tabelle ed i record emergono per le seguenti ragioni di utilità:

  • Il record è l'aggregato unitario di dati che entra ed esce dal programma, dunque è alla base delle operazioni di input/output.

  • La tabella è la forma più semplice per correlare dei valori, per calcolare una funzione empirica, per riportare un andamento statistico, per realizzare un data base ecc. 

Le rimanenti strutture elencate della lista assolvono funzioni speciali. La 2 si usa per concatenare dei dati che sono cancellati ed aggiunti senza regole. Le strutture 3 sono lineari e si distinguono soltanto per il modo con cui vengono riempite e svuotate. Le ultime servono per speciali algoritmi di uso tutt'altro che quotidiano. 

Questa spiegazione vuol evidenziare come ogni organizzazione di dati risponde ad una precisa funzione. Non essendo la struttura una entità eterea o astratta ne consegue che il programmatore sceglie la struttura in funzione del compito da eseguire. 

 

Se il procedimento didattico spiega i dati secondo un'ottica realistica e pratica, si elencano le organizzazioni in funzione del servizio che offrono, e si dà una preparazione efficace allo studente.

 

 

anno 2003

83. Parlando di
strutture dati,
lineari,
tabellari (chiave-valore),
o ad alberi
binari,
ho difficoltà
a far capire
ai ragazzi
il contesto
di utilizzo
cioè quando risulta
utile servirsi
di certe strutture:
può fornirmi
cortesemente
degli esempi
concreti
di utilizzo
che siano
facilmente
comprensibili
ai ragazzi?

84. Che differenza c'è tra una variabile primitiva ed una definita in Java?

Nella programmazione ad oggetti un dato primitivo è un campo della memoria ram del tutto simile a quello della programmazione strutturata. Infatti viene dichiarato in modo piuttosto tradizionale. Ad esempio una variabile intera inizializzata con 18 si scrive così:

Il dato definito è del tutto differente perché riguarda l'attributo di un oggetto. In pratica la dichiarativa non crea l'attributo ma il puntatore e per dato definito si intende proprio questo ultimo. Ad esempio nella seguente dichiarativa anno è il puntatore ad una informazione contenuta in un oggetto:

Le differenze tra i due casi sono illustrate dalla figura che riporta due dichiarative con lo stesso nome: anno.

Il dato primitivo è un campo di memoria con 18; quello definito è il puntatore all'oggetto della classe Integer che, ad esempio, contiene anche lui il valore 18.

Non va confuso il termine Integer che indica una classe con int che indica il tipo di variabile. Java ha otto classi per preparare i dati definiti, quali Integer, Long, Float, Character, String ecc., chiamate classi wrappers. 

 

 

 

anno 2003