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 programmazione e nell'analisi. 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 per il nostro settore 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 bene che il computer non manipola valori-matematici-astratti bensì opera con porzioni di memoria ram nei quali sono contenuti dei codici. Dunque alla base ci sono i campi informativi. Con questo nome si sottolinea efficacemente il loro significato operativo e si agevola il paragone con gli equivalenti cartacei che si trovano ad esempio sui moduli, sui prestampati 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 eventuale contenuto

Non sto dicendo nulla di nuovo. Il modello è già noto, ma non viene approfondito. Gli viene dato un ruolo illustrativo. Qualcuno lo trova banale mentre ha un valore sostanziale perché le  celle di memoria sono fatte proprio così. 

Una volta che la questione è stata posta sul piano concreto e corretto, lo studio dei dati si appiana e progredisce vorrei dire da solo. Infatti le strutture dati sono le aggregazioni dei campi informativi che il programmatore realizza per comodità. 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.

 

Essi riguardano tantissimi lavori per le seguenti ragioni di utilità:

  • Il record è l'aggregato di dati che entra ed esce da un file; 
  • 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. 

La struttura 2 della lista 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. 

Ognuna risponde ad una precisa funzione e questo produce un importante corollario: il programmatore sceglie la struttura in funzione del compito da eseguire. 

Il procedimento didattico illustrato segue fedelmente la tecnologia ed introduce i dati in funzione del servizio che offrono. E' diametralmente opposto al cammino di chi presenta i dati in astratto e poi si sforza di trovarne una giustificazione nella pratica. 

 

Indietro

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 é 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?

 

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. 

I dati definiti, fondamentali nella programmazione Java e più in generale in quella ad oggetti, sono alquanto impegnativi e costituiscono una delle difficoltà iniziali di questa tecnologia.

 

Indietro