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:

Cifrario basato su macchinario e cifrario di Atbash

Il primo esempio di cifratura basata su un ‘macchinario’ si può far risalire ad una testimonianza tra il 360 e il 390 dovuta ad Enea il tattico, generale della lega arcadica, in un trattato di cifre il cui XXI capitolo tratta appunto di messaggi segreti. In questo viene descritto un disco sulla zona esterna del quale erano contenuti 24 fori, ciascuno corrispondente ad una lettera dell'alfabeto.

Risorse per sviluppo: