Tipo di Dato Astratto o Abstract Data Type - ADT

 

Un Tipo di Dato Astratto o Abstract Data Type - ADT è, per definizione, un nuovo tipo di dato che estende i tipi nativi forniti dal linguaggio di programmazione.
 
[adsense:block:adcontenuto]
 
Un ADT è caratterizzato da un insieme di:
  1.  dati;
  2.  operazioni che agiscono sui dati, leggengoli/scrivendoli;

 

Fin qui niente di nuovo: anche i linguaggi procedurali, come per esempio C, consentono di definire un ADT. Ma, mentre per tali linguaggi chiunque può avere accesso ai dati e modificarli, i linguaggi Object Oriented ne garantiscono la loro riservatezza.
 
Supponiamo infatti di voler definire in C (non preoccuparsi della sintassi) un ADT Persona cioé una struttura dati che mantenga le informazioni (dati) di una Persona, come, per esempio, il nome, il cognome e la data di nascita e che consenta di creare e stampare le informazioni di una persona (operazioni):
 
/* Struttura dati per mantenere la data di nascita */
struct Data {
int giorno;
int mese;
int anno;
};
/* Struttura dati per mantenere le info. della persona */
struct Persona {
struct Data *data_di_nascita;
char *nome;
char *cognome;
};
/* Setta le info. della persona */
void creaPersona(struct Persona *persona)
{
persona->data_di_nascita->giorno = 31;
persona->data_di_nascita->mese = 12;
persona->data_di_nascita->anno = 1976;
persona->nome = "Eugenio";
persona->cognome = "Polito";
}
[adsense:block:adcontenuto]
/* Stampa le info. della persona */
void stampaDati(struct Persona *persona)
{
printf("Mi chiamo %s %s e sono nato il %i-%i-%i \n",
persona->nome,
persona->cognome,
persona->data_di_nascita->giorno,
persona->data_di_nascita->mese,
persona->data_di_nascita->anno);
}
/* crea un puntatore alla struttura e lo inizializza;
quindi stampa le info. */
int main()
{
struct Persona *io;
creaPersona(io);
stampaDati(io);
return 0;
}
 
Se eseguiamo questo programma, otteniamo il seguente output:
 
Mi chiamo Eugenio Polito e sono nato il 31-12-1976
 
Proviamo adesso a modificare il main nel seguente modo:
 
int main()
{
struct Persona *io;
creaPersona(io);
io->data_di_nascita->mese = 2;
stampaDati(io);
return 0;
}
 
Questa volta l’output è:
 
Mi chiamo Eugenio Polito e sono nato il 31-2-1976
 
Cioè le mie informazioni private sono state modificate con l’assegnamento:
 
io->data_di_nascita->mese = 2

 

 

Risorse per sviluppo: 

Ti potrebbero anche interessare: