41
Fondamenti di Informatica 1 Realizzazione software • Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro elaborazione 2. Realizzazione algoritmo con un particolare linguaggio (traduzione)

Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Embed Size (px)

Citation preview

Page 1: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 1

Realizzazione software

• Due fasi:

1. Specifica dell'algoritmo1.a Definizione dei dati1.b Definizione della modalità della loro

elaborazione

2. Realizzazione algoritmo con un particolare linguaggio (traduzione)

Page 2: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 2

Tipi di dati• Tipo di dato astratto: oggetto

matematico definito da tre componenti:– insieme di valori che definisce il dominio– insieme di operazioni sul dominio– insieme di costanti

• Esempio: tipo booleano:• {true, false}• and, or, not, ...• true, false

Page 3: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 3

Tipi di dati

• Tipo di dato concreto: si riferisce all'uso del dato in un particolare linguaggio

• Per definire un tipo di dato concreto occorre:– definire le proprietà astratte– definire i vincoli imposti dal linguaggio

scelto• ad esempio: come dichiararlo, utilizzarlo,

accedere alle sue parti,...

Page 4: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 4

Rappresentazione diun nuovo tipo di dato

• Per rappresentare un nuovo tipo di dato, può essere necessario utilizzare tipi di dati già esistenti

• Esempio: tipo di dato: "insieme [1..5]"• Realizzato con un vettore di 5

elementi• I metodi sono composizioni dei

metodi utilizzati dai dati componenti

Page 5: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 5

Rappresentazione diun nuovo tipo di dato

• Esempio:– inserimento di un elemento nell'insieme– rimozione di un elemento dall'insieme– svuotamento dell'insieme– controllo della presenza di un elemento– controllo dello stato dell'insieme (pieno,

vuoto, stati intermedi)

Page 6: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 6

Rappresentazione dei dati

• La rappresentazione di un nuovo dato non è univoca

• I criteri di scelta sono:– la correttezza e– l'efficienza della rappresentazione,

misurata da:• occupazione in memoria• costo di esecuzione delle operazioni

Page 7: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 7

Diverse rappresentazioni

• Esempio: insieme di interi [1..5]– con un vettore di 5 elementi booleani– con un unico intero di 5 bit

• Differenza di efficienza:– Inserimento di un el.: – Controllo dello stato di un el.: – Azzeramento: – Unione:

Page 8: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 8

Vettori e matrici

• Si mettono in corrispondenza un insieme di indici e gli elementi del vettore– Gli indici sono definiti interi– I metodi sono generalmente:

memorizza e accedi

• Una matrice è definita come un vettore a due dimensioni

Page 9: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 9

Rappresentazione di vettori

• In locazioni di memoria contigue• Si definisce l'indirizzo della prima

locazione e la dimensione di ogni elemento

• Accesso all'elemento i-esimo:

ind(el i) = ind(el 0) + i*size(el)

Page 10: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 10

Vettori a più dimensioni

• Esempio a due dimensioni:– Row major order

• Accesso all'elemento (i,j)-esimo:

ind( el i,j ) = ind(el 0,0) + (j+i*N)*size(el)

• Facile estensione a più di due dimensioni

Page 11: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 11

Rappresentazionecompatta di vettori

• Matrici sparse con valore predominante– per velocizzare l'elaborazione– per risparmiare memoria

• Esempio con vettore a tre componenti– memorizzazione dimensione matrice e

valore predominante

Page 12: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 12

Rappresentazionecompatta di vettori

• Metodi di accesso agli elementi:– accedi (complesso)– memorizza (molto complesso, richiede

shift)

• Funzioni composte:– controllo dello stato– controllo del numero degli elementi

• Risparmio di memoria

Page 13: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 13

Le liste semplici

• I valori di una lista sono sequenze di valori elementari, detti atomi

• Esempio di lista di interi mediante rappresentazione parentetica: ( 8 25 6 87 54 )

• Caratteristiche:– lunghezza non definita a priori– presenza della lista nulla ( )

Page 14: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 14

Metodi sulle liste

• Lunghezza (numero di elementi)• cons(el, lista) per inserire un

elemento in testa alla lista• car(lista) determina il primo

elemento• cdr(lista) fornisce una copia della

lista senza il primo elemento• null(lista) verifica se la lista è vuota

Page 15: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 15

Rappr. delle liste semplici

• Pochi linguaggi dispongono del tipo concreto lista

• Vi sono due tipi di rappresentazione:– rappr. sequenziale– rappr. collegata

Page 16: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 16

Rappresentazione sequenziale

• E' rappresentata da:– un vettore monodimensionale i cui

elementi contengono un atomo– un intero (primo) che denota l'indice

del vettore che identifica il primo elemento

– un intero (lunghezza) che denota il numero di elementi nella lista

Page 17: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 17

Rappresentazione sequenziale

(5 1 21 45 78)

5 1 21 45 78 12 1 7

1 2 3 4 5 6 7 8

primo = 1 lunghezza = 5

Page 18: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 18

Rappresentazione sequenziale

• Implementazione dei metodi• Svantaggi:

– occupazione fissa di memoria– limiti nell'estensione della lista– inefficienza di alcuni metodi

Page 19: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 19

Rappresentazione collegata

• Ad ogni elemento è associato un riferimento che serve a determinare il successore

• La sequenza non è più rappresentata dall'adiacenza fisica in memoria, ma da una informazione logica

0

Page 20: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 20

Rappresentazione collegata

• Implementazione dei metodi:– eliminazione primo elemento– aggiunta di un elemento in testa– eliminazione di un elemento generico– aggiunta di un elemento in una

posizione generica

Page 21: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 21

Rappresentazione collegata

• Vantaggio:– non più necessario spostare elementi

(solo modifiche ai riferimenti)

• Svantaggio:– per accedere ad un elemento è

necessario scandire tutta la lista (cioè non è noto l'indirizzo del generico elemento)

Page 22: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 22

Implementazione della rappresentazione

collegata

• Vi sono due modi per implementare la rappresentazione collegata:

– utilizzando gli array– utilizzando i puntatori

Page 23: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 23

Rappresentazione collegata mediante array

• Si associa ad ogni elemento della lista una componente dell'array costituita da:– il valore dell'elemento della lista– il riferimento all'elemento successivo

(indice dell'array)

Page 24: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 24

Rappresentazione collegata mediante array

(5 1 21 45 78)

21 5 ? 45 ? 1 78 ?

4 6 ? 7 ? 1 0 ?

1 2 3 4 5 6 7 8

inizio = 2

Page 25: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 25

Rappresentazione collegata mediante array

• Metodi:– l'azzeramento e l'eliminazione di

elementi sono operazioni semplici– l'inserimento di elementi necessita

della determinazione di una posizione vuota che si può realizzare in due modi:• scansione dell'intera lista• utilizzo della lista libera (esempi)

Page 26: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 26

Rappresentazione collegata mediante array

• Vantaggi:– non vengono spostati elementi– linguaggi in cui l'unico dato struttturato è

l'array

• Svantaggi:– gestione della lista libera– rimane il problema della dimensione massima

fissata dalla dimensione dell'array– richiede più memoria a causa dei riferimenti

Page 27: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 27

Rappresentazione collegata mediante

puntatore• Il tipo puntatore è un tipo di dato i cui

valori rappresentano indirizzi in memoria

• Le operazioni usualmente disponibili sono:– accesso alla locazione puntata– richiesta di una nuova locazione libera– rilascio della locazione non più utilizzata

Page 28: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 28

Rappresentazione collegata mediante

puntatore• Ogni elemento della lista è

composto da:– il valore dell'elemento della lista– un puntatore che identifica la

locazione di memoria in cui è memorizzato l'elemento successivo

• L'elemento iniziale è un puntatore

Page 29: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 29

Rappresentazione collegata mediante

puntatore• Vantaggi:

– stessi vantaggi della rappresentazione collegata mediante array e in più non c'è limite alla lunghezza massima

• Svantaggi:– la ricerca richiede la scansione

completa

Page 30: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 30

L'utilizzo dei puntatori è critico

• L'utilizzo dei puntatori permette di referenziare zone di memoria; è critico perché:– permette di modificare aree di

memoria che possono contenere informazioni vitali

– se mal utilizzato, può portare all'esaurimento della memoria disponibile (garbage collection)

Page 31: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 31

Rappresentazione collegata

• Per migliorare l'efficienza di alcune operazioni sono state concepite due varianti:– Rappresentazione collegata circolare– Rappresentazione collegata

simmetrica

Page 32: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 32

Rappresentazionecollegata circolare

• L'ultimo elemento non contiene un riferimento nullo, ma il riferimento al primo elemento della lista

• Vantaggi:– utilizzo come buffer circolare

Page 33: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 33

Rappresentazionecollegata simmetrica

• Ogni elemento contiene anche il riferimento all'elemento precedente

• Vantaggi:– la lista si può scandire in entrambe le

direzioni

– si semplifica l'inserimento in posizione precedente ad un dato elemento

Page 34: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 34

Liste composite

• Estensione del concetto di lista• Gli elementi della lista possono a

loro volta essere delle liste• Rappresentazione parentetica:

( 5 () 6 ( 7 8 ) ( 9 (12) 3 ) 14 )• Nell'esempio, l'atomo può essere

una lista o un numero

Page 35: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 35

Rappresentazionedel singolo nodo

• Esistono due varianti:– l'atomo contiene sia un puntatore ad

una lista che lo spazio per memorizzare un numero; un ulteriore booleano li seleziona

– l'atomo contiene lo spazio per memorizzare solo il più esteso tra il puntatore alla lista e il numero; un ulteriore booleano li seleziona

Page 36: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 36

Rappresentazionedel singolo nodo

• Le due varianti si riferiscono a:strutture (struct) unioni (union)

typedef struct { typedef union {

int giorno; int numero;

int mese; char nome[10];

int anno; } cliente;

} data;

Page 37: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 37

Recupero della memoria

• Garbage collection(recupero memoria non più utilizzata)

• Può avvenire:– manualmente a carico del

programmatore– automaticamente a carico del

traduttore del linguaggio (serve marcare le aree allocate e gestire la lista libera)

Page 38: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 38

Le pile

• La pila è un tipo di dato con struttura LIFO• Definizione:

– {pila, elemento, boolean}– {top, push, pop, test_pila_vuota}

• top: pila elemento (cons)• push: pila x elemento pila (cdr)• pop: pila pila (car)• test_pila_vuota: pila boolean (null)

– {pila_vuota}

Page 39: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 39

Le pile

• A differenza delle liste gli inserimenti e le cancellazioni posso essere effettuati solo sulla cima della pila (non avvengono spostamenti degli elementi)

• Tipo di dato fondamentale

Page 40: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 40

Le code

• La coda è un tipo di dato con struttura FIFO

• Definizione:– {coda, elemento, boolean}– {primo, in_coda, out_coda, test_coda_vuota}

• primo: coda elemento (cons)• in_coda: coda x elemento coda (cdr)• out_coda: coda coda (car)• test_coda_vuota: coda boolean (null)

– {coda_vuota}

Page 41: Fondamenti di Informatica1 Realizzazione software Due fasi: 1. Specifica dell'algoritmo 1.a Definizione dei dati 1.b Definizione della modalità della loro

Fondamenti di Informatica 41

Requisiti delle pile e delle code

• Requisiti delle pile:– un puntatore che determini la cima– le operazioni di accesso sono semplici

• Requisiti delle code:– due puntatori che puntino alla cima e

alla coda– le operazioni di accesso sono poco più

complesse