• Non ci sono risultati.

Luca Abeni

N/A
N/A
Protected

Academic year: 2021

Condividi "Luca Abeni"

Copied!
15
0
0

Testo completo

(1)

Tipi di Dati Astratti

Luca Abeni

April 19, 2017

(2)

Dati e Tipi di Dato

LPM2 Luca Abeni

• Tipo di dato: concetto di “alto livello”

• Macchina fisica: unico tipo di dato → sequenze di bit

• Macchine Astratte: tipi di dato pi `u complessi

• Tipo di dato: specificano che valori attribuire a determinate sequenze di bit e che operazioni si possono compiere su tali valori

• Non solo insieme di valori, ma anche operazioni!

• Tipo di dati opaco: la rappresentazione interna non `e

“visibile”

• Esempio: lista ordinata. Conosco le operazioni su tale lista, ma non so come la lista “ `e

implementata”

(3)

Definire Nuovi Tipi di Dato

• Molti linguaggi permettono di “definire nuovi tipi” o di definire sinonimi per tipi esistenti...

• Ma si tratta realmente di nuovi tipi di dati?

• Si possono “creare” nuovi valori...

• Forse... :)

• Ma la struttura interna di un tipo `e direttamente accessibile al programmatore

• Esempio: tipo struct lista in C. Cosa impedisce di accedere direttamente ai campi della struttura,

invece di usare solo specifiche operazioni?

• Vorremmo manipolare liste usando solo inserisci, stampa, ...

(4)

Tipi di Dato “Veri”

LPM2 Luca Abeni

• Per “creare veramente” un nuovo tipo di dato...

• ...Sarebbe necessario “nascondere” la struttura interna di un tipo e “legare” le operazioni al tipo

• Ricordiamo astrazione sul controllo: funzioni

• Posso usare una funzione conoscendone il prototipo (dichiarazione)

(5)

Astrazione sui Dati - 1

• Sarebbe bello definire un tipo di dato in termini di interfaccia, evitando di rendere pubblica

l’implementazione

• Interfaccia: tipi e funzioni accessibili all’utente

• Implementazione: struttura interna dei dati e delle funzioni che agiscono su di essi

• Esempio: lista in C. Interfaccia:

• struct lista

• struct lista *inserisci(int n, struct lista *l),

• void stampa(struct lista *l),

• ...

(6)

Astrazione sui Dati - Lista in C

LPM2 Luca Abeni

• Non voglio rendere nota l’implementazione

• struct lista {int val; struct lista

*next; }

• Implementazione delle funzioni inserisci(), stampa(), ...

• Specifica: dice cosa le varie operazioni fanno sui dati

• Espressa non in termini del tipo (non fa

riferimento a val o next, etc...), ma tramite relazioni generali (esempio: inserisci() inserisce un numero naturale in una lista

ordinata), ...

• Teoricamente, se l’implementazione cambia i

programmi che usano l’interfaccia non dovrebbero risentirne...

(7)

Riassumendo...

• Tipo di dato: insieme di valori ed operazioni su di essi

• Interfaccia: cosa `e “visibile al programmatore”

• Nomi, valori, prototipi, ...

• Implementazione: dettagli “interni”

• Rappresentazione dei dati, definizione delle operazioni, ...

• Specifica: Funzionamento “inteso” del tipo, espresso mediante propriet `a osservabili attraverso linterfaccia

• Senza riferimenti a dettagli implementativi

(8)

Abstract Data Type

LPM2 Luca Abeni

• Tipo di dato: insieme dei valori ed operazioni su tali valori

• Tipo di dato astratto (ADT): “protegge” (rende

inaccessibile al programmatore) la rappresentazione interna del dato e tutta l’implementazione

• Un ADT `e caratterizzato da:

1. Il nome del tipo

2. Una rappresentazione dei valori del tipo 3. Un insieme di operazioni

4. La loro implementazione

5. Un meccanismo per separare nomi del tipo ed operazioni dalle loro rappresentazioni /

implementazioni

(9)

Interfaccia vs Implementazione

• Interfaccia (visibile): nomi, valori e prototipi

chiaramente separata da implementazione (non visibile ne’ accessibile!)

• Valori: interfaccia

• Insieme delle operazioni sui valori (nomi e prototipi):

interfaccia

• Rappresentazione dei valori del tipo:

implementazione

• Implementazione di ogni operazione: basata sulla rappresentazione dei dati di cui sopra

(10)

Abstract Data Type - Supporto Linguistico

LPM2 Luca Abeni

• Astrazione sul controllo: “nasconde” il corpo delle subroutine (funzioni e procedure)

• Esempio: separazione fra prototipo e definizione

• Astrazione sui dati: “nasconde” la rappresentazione interna dei dati

• Esempio: separazione fra dichiarazione e definizione di una struttura!

• Che supporto linguistico ci forniscono i vari linguaggi?

(11)

Abstract Data Type - Supporto Linguistico

• Differenti linguaggi hanno differenti livelli di supporto per ADT

• In generale:

• Sintassi per separare signature ed implementazione

• Generica keyword abstype {type ...

signature ... operations}

• Linguaggio C: forma di supporto “pi `u primitiva”

• header file (.h) = interfaccia/signature;

• implementazione in file .c separati

• Java, C++: OO → ADT on steroid

• ML: vedremo...

(12)

Indipendenza dalla Rappresentazione

LPM2 Luca Abeni

• Principio di indipendenza dalla rappresentazione

• “Due implementazioni corrette di una stessa specifica (ed interfaccia) di un ADT sono

osservabilmente indistinguibili da parte dei clienti di quel tipo”

• Esempio: potrei reimplementare la struct lista usando internamente un array...

• Problemi con specifiche informali / non completamente definite

• Out of memory

• Stampa di lista vuota?

• Versione “rilassata” del principio di indipendenza dalla rappresentazione, basata solo su signature

(13)

Programmazione in Piccolo ed in Grande

• Programmazione “in piccolo”: sviluppo di piccoli programmi “di dimensione trattabile”

• Possono essere organizzati in un singolo modulo di compilazione

• Tutto il codice assieme; no separazione in unit `a logicamente uniformi

• In questo caso, ADT per incapsulare dati con relative operazioni

• Programmazione “in grande”: sviluppo di programmi

“complessi”

• Necessit `a di dividere in codice in pi `u file separati

• ...

(14)

Programmazione in Grande

LPM2 Luca Abeni

• Programmazione “in grande”: sviluppo di programmi pi `u “complessi”

• Necessit `a di dividere in codice in file separati

• Moduli di compilazione o package

• Possibilit `a di raggruppare dati e codice in base alle funzionalit `a

• Dati ed operazioni suddivisi in moduli / package

• Meccanismo utilizzabile per incapsulare dati...

(15)

Moduli vs ADT

• Diversi costrutti per funzionalit `a simili

• Alcuni linguaggi forniscono abstype (o simile), altri moduli (esempio: C)

• I moduli (o package) dal punto di vista pratico forniscono a volte pi `u funzionalit `a

• Perch ´e progettati per sviluppare programmi pi `u complessi (programmazione in grande)

• Come un ADT, un modulo ha interfaccia ed implementazione

• Possibilit `a di definire tipi privati nell’implementazione

• L’interfaccia di un modulo pu `o essere importata da

Riferimenti

Documenti correlati

Si instaura fra elementi dei primi gruppi (m. alcalini) caratterizzati da bassa energia di ionizzazione ed elementi degli ultimi gruppi (alogeni) caratterizzati

A quale altezza bisogna fissare la lampada perchè un oggetto che si trova sull'orlo della tavola sia illuminato nel modo migliore?. (L'illuminazione è direttamente proporzionale

– Consente di avere versioni con valori solo positivi (unsigned) o sia positivi che negativi (signed). – int si assume sempre signed (non

[r]

Il fatto è che da sempre la Cina è stata retta da governanti la cui caratteristica fondamentale è l’essere inter- preti della volontà del Cielo ed esprimere la virtù

I valori di resistenze e condensatori utilizzati in un circuito elettronico spaziano su un campo molto ampio, dai centesimi di ohm ai terahom per le resistenze (10 −2 ÷ 10 12 Ω), dal

La Carta dei valori della cittadinanza e dell´integrazione, ancorata strettamente alla Costituzione italiana e alle Carte europee e internazionali sui diritti umani, ha un

[r]