| prof. Nunzio Brugaletta |
C++:
programmazione e oggetti |
L'array è la prima struttura di dati trattata in Informatica. Si parla di struttura dati quando ci si riferisce ad un insieme di dati organizzati secondo una determinata legge. Una struttura dati è un insieme dove, come nell'eccezione matematica del termine, è definita una legge di appartenenza e sui quali elementi possono essere svolte determinate operazioni: creazione della struttura, inserimento/eliminazione di un elemento, ricerca di un elemento, estrazione di un sottoinsieme.
L'array è la struttura dati più comunemente usata ed è quella che sta a fondamento di quasi tutte le altre.
Un array è un insieme di variabili dello stesso tipo cui è possibile accedere tramite un nome comune e referenziare uno specifico elemento tramite un indice.
Si può pensare all’array come ad un insieme di cassetti numerati: per poter accedere al contenuto di un cassetto deve essere specificato il numero ad esso associato (l’indice) che indica la posizione relativa dell'elemento, rispetto al punto iniziale della struttura. Il primo elemento del vettore ha indice 0.

Nelle variabili semplici per accedere al valore contenuto in esse è necessario specificare il nome ed, inoltre, una variabile che dovrà conservare un valore diverso avrà un nome diverso. Nell’array esiste un nome che però stavolta identifica l’array come struttura (il nome farà riferimento all’insieme dei cassetti dell’esempio precedente: questo concetto sarà chiarito meglio più avanti). I singoli elementi dell’array verranno referenziati specificando la loro posizione relativa all’interno della struttura (l’indice): l’elemento a cui ci si riferisce dipende dal valore assunto dall’indice.
Gli elementi dell'array vengono allocati in posizioni di memoria adiacenti. In Informatica una allocazione in memoria centrale per byte consecutivi, viene chiamata vettore.
Il diverso tipo di dichiarazione nelle variabili di tipo elementare, come si è già fatto notare, comporta un diverso modo di svolgere le operazioni fra i dati in esse contenute. Nel caso di un vettore, essendo questa una struttura complessa costituita da un gruppo di variabili, si possono distinguere due livelli:
la struttura che ha proprie caratteristiche: una certa dimensione, un certo ordine per cui se si inserisce o si elimina un elemento, in ogni caso, deve essere garantita l'allocazione per byte contigui.
Le singole variabili che , in rapporto al tipo, consentono alcune operazioni ed altre no.
C++, nel caso di strutture (insiemi di dati) complesse, mette a disposizione un meccanismo (classi) che consente, una volta dichiarato un oggetto di quel tipo, all'oggetto stesso, di possedere dei comportamenti tipici di tutti gli oggetti della stessa famiglia.
La definizione di vettore è contenuta nella libreria vector che quindi va inclusa nel programma tutte le volte che si ha necessità di definire una variabile di tipo vettore. La libreria fa parte di quelle che vengono definite STL (Standard Template Library).
Le differenze sostanziali fra la dichiarazione di una variabile di tipo elementare, per esempio una variabile di tipo int, e un oggetto, per esempio, della classe vector si possono sintetizzare:
Una dichiarazione del tipo:
int a;
comporta, in ragione del tipo che ci sono alcune operazioni (le quattro operazioni dell'aritmetica elementare e l'operazione modulo) che si possono fare con il dato contenuto nella variabile che di fatti è un contenitore per dati su cui si vogliono eseguire quelle operazioni. La variabile a è una variabile di tipo int: a è un contenitore per dati sui quali effettuare le operazioni permesse dal tipo.
Una dichiarazione del tipo:
vector<int> v;
dichiara un oggetto della classe vector che contiene dei numeri interi come elementi ma v essendo un oggetto (una istanza) della classe vector ha tutti i comportamenti definiti nella classe. Non è possibile gestire direttamente gli elementi del vettore perché con un oggetto si interagisce utilizzando i metodi definiti per quella classe. Il metodo è una competenza che possiede l'oggetto e quando serve quella funzionalità si richiama il metodo applicato all'oggetto (si manda un messaggio all'oggetto) che reagirà secondo quando previsto.
I metodi più comuni che verranno utilizzati negli esempi di questi appunti sono sintetizzati nella tabella:
|
Metodo (classe vector) |
Comportamento |
|---|---|
|
empty() |
Restituisce un valore booleano (true o false) indicante se il vettore è vuoto o contiene almeno un elemento |
|
size() |
Restituisce la quantità di elementi contenuti nel vettore |
|
begin() |
Restituisce la posizione in memoria del primo elemento del vettore |
|
at() |
Permette di accedere all'elemento del vettore che si trova in una certa posizione. È necessario specificare l'indice come numero intero dentro le parentesi (parametro). |
|
push_back() |
Permette di inserire, in coda nel vettore, un nuovo elemento. L'elemento va specificato come parametro fra parentesi e deve essere del tipo previsto nella dichiarazione del vettore |
|
insert() |
Permette l'inserimento di un elemento in una posizione qualsiasi del vettore. Fra parentesi vanno specificati due parametri separati dalla virgola: la posizione di inserimento, l'elemento da inserire |
|
erase() |
Permette l'eliminazione dalla struttura di un elemento la cui posizione va specificata come parametro |
| http://ennebi.solira.org |
ennebi@solira.org |