Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 34 di 43
  • livello principiante
Indice lezioni

Liste ed oggetti contenitore

La gestione degli insieme dei valori: le classi Tlist, TStack e TQueue.
La gestione degli insieme dei valori: le classi Tlist, TStack e TQueue.
Link copiato negli appunti

Delphi mette a disposizione dello sviluppatore alcune classi che permettono di
semplificare la gestione di insiemi di valori. La gestione di questi insiemi di valori
avviene tramite delle classi lista. La più generica, poichè permette di gestire insemi
di valori di tipo non omogeneo, è la classe TList che definisce una lista di puntatori.
Esiste una classe specizlizzata nella gestione di liste di stringhe, TStringList derivata
da TStrings. Un'altro gruppo di classi per la gestione di insiemi riguarda le collezioni.
Questo gruppo si compone fondamentalmente di due classi, TCollection e TCollectionItem. La
classe TCollection permette di gestire una lista di oggetti dello stesso tipo, di cui la
stessa lista è proprietaria.

Tutte queste liste mettono a disposizione dello sviluppatore una serie di metodi e
proprietà per manipolare il contenuto della lista stessa. Alcuni di questi metodi sono Insert,
Add, Delete, Remove per l'inserimento,
aggiunta e l'eliminazione degli elementi della lista. Sono disponibili alcuni metodi come IndexOf
per la ricerca di elementi all'interno della lista. Sono disponibili anche proprietà che
permettono l'accesso agli elementi della lista in base ad un indice come se si stesse
lavorando con un array. Per esempio, per accedere al secondo elemento di una lista di
stringhe (TStringList) è possibile utilizzare la proprietà Strings[1]. Da notare
l'indice 1 per identificare il secondo elemento della lista, poichè l'indice della lista
è "zero based" cioè il primo indice (ovvero il primo elemento) è 0. Quindi,
se si vuole accedere all'ultimo elemento della lista, sfruttando anche un'altra proprietà
comune a tutte le classi lista viste, utilizzando la proprietà Count che restituisce il
numero di elementi contenuti nella lista, dovremo scrivere Strings[NomeClasseLista.Count
- 1]. Le liste di stringhe hanno altresì la possibilità di associare un riferimento ad
oggetto per ciscuna stringa inserita nella lista attraverso il metodo AddObjects(Stringa,
PuntatoreObj). Così facendo verrà inserita una stringa con il valore contenuto
in Stringa e contemporaneamente le verrà associato il riferimento PuntatoreObj.
Parallelamente, per accedere ai valori della lista di oggetti di può ricorrere alla
proprietà Objects che funziona come la proprietà Strings
già vista. Quindi all'indice 0 corrisponderà il riferimento oggetto relativo alla prima
stringa e così via.

Con l'arrivo di Delphi 5 sono state introdotte alcuni nuovi tipi di liste con
caratteristiche molto interessanti definite classi-contenitore. Fondamentalmente estendono
le funzionalità di TList, aggiungendo il concetto di proprietà degli oggetti contenuti e
regole perticolari di estrazione ed inserimento. Una di queste nuove classi è TObjectList
che dal nome stesso è una lista che accetta come elementi solamente oggetti derivati da
TObject e non semplici puntatori. Caratteristica di questa classe è la proprietà OwnsObjects
che se impostata a true produce la distruzione automatica dell'oggetto
quando questo viene rimosso dalla lista. Esistono anche altre classi come TComponentList
per la gestione di liste di componenti, TClassList per la gestione di liste di class
reference.

Di particolare interesse ritengo siano le classi TStack e TQueue. Dal nome di queste si
intuisce già il loro scopo e funzionamento.

La classe TStack implementa una lista di
puntatori in cui l'inserimento e l'estrazione degli elementi avviene in testa alla lista.
Si tratta dell'implementazione di una struttura denominata pila in cui gli elementi
vengono inseriti in cima alla pila e rimossi sempre dalla cima. Questa strategia di
inserimento ed estrazione è denominata LIFO (Last In, First, Out). Per aggiungere
elementi alla lista si fa ricorso al metodo Push e per rimuovere elementi
al metodo Pop. Si dispone anche del metodo Peek per
leggere l'elemento correntemente in cima alla pila senza estrarlo da essa. Una variante
della classe TStack è la classe TObjectStack che implementa un struttura simile tranne
per il fatto che gli elementi sono di tipo TObject.

L'altra classse, TQueue implementa un'altra struttura molto conosciuta in informatica,
ovvero la coda. Come per TStack, si tratta di una lista di puntatori la cui aggiunta segue
la strategia FIFO (First In, First Out) ovvero il primo elemento inserito viene estratto
per primo. Possiede gli stessi metodi della classe TStack. Come per la classe TStack
esiste una variante per la gestione di liste di oggetti il cui nome della classe è
TObjectQueue. A differenza della TObjectList, le classi TObjectStack e TObjectQueue non
hanno la possibilità di distruggere gli oggetti al momenti dell'estrazione dalla lista.

Ti consigliamo anche