Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Documenti analoghi
I numeri razionali. Specifica: la sintassi. Specifica: la semantica

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO

Esempio su strutture dati dinamiche: ArrayList

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Implementazione Java di un ADT

Tipo di Dato. Abstract Data Types. Tipi di Dato Astratti /2. Tipi di Dato Astratti /1

Esempio su strutture dati dinamiche: ArrayList

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Le liste. ADT e strutture dati per la rappresentazione di sequenze. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 5

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Astrazione Dati. Nicola Fanizzi. Linguaggi di Programmazione [010194] 10 mag, Dipartimento di Informatica Università degli Studi di Bari

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Informatica 3. Informatica 3. LEZIONE 5: Tipi di dati. Lezione 5 - Modulo 1. Tipi predefiniti. Introduzione

Programmazione orientata agli oggetti. Ivan Lanese

Pile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione.

Tipi di Dati Astratti

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Algoritmi e Strutture Dati

in più stringhe,... ADT un tipo è caratterizzato dalle operazioni consentite su di esso: un numero è qualcosa che si può moltiplicare, sommare,...

Tipi di dato e strutture dati

Esempio su strutture dati dinamiche: ArrayList

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Programmazione ad oggetti

Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT

La programmazione ad oggetti: chiamate di metodi. Overloading. This

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Introduzione ai Dati Astratti. Giuliano Armano 1

Sul pattern Iterator

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Linked Lists. Liste linkate (1) liste linkate ( stack, queues ), trees. Liste linkate come strutture

PILE E CODE. Pile (stack):

Programmazione ad oggetti

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

ADT STACK (PILA) ADT STACK (PILA)

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Programmazione Orientata agli Oggetti in Linguaggio Java

Fondamenti di Informatica T1 Mappe

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti.

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Algoritmi e Strutture Dati

Funzioni, Stack e Visibilità delle Variabili in C

Pile: implementazione. Pile: implementazione. Pile: implementazione con array. Pile: implementazione con array. Pile: implementazione con array

La struttura dati PILA

CORSO DI PROGRAMMAZIONE

Tipi astratti pila e coda

Laboratorio di Python

Definizione di un ADT

Progettazione By Contract

Programmazione con Java

La programmazione nel linguaggio C

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Oggetti. Interfacce e sottotipi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Tipi di dato e Strutture dati elementari

Introduzione a Java. Riferimenti

Strutture dati. Le liste

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Basi di Dati. Concetti e Principi Generali. Maria Mirto

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

14 - Metodi e Costruttori

Silvia Crafa

Le collezioni di oggetti. Prof. Accarino IIS Altiero Spinelli via Leopardi 132 Sesto San Giovanni

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Sommario. Collezioni. Collezioni: Liste: Pile (stack) Collezioni. Collezioni. Collezioni Struttura indicizzata (array) Nodi

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Struttura dati astratta Coda

Polimorfismo parametrico vs polimorfismo per inclusione

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Introduzione all OOP!

Programmazione in Java (I modulo)

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

La struttura dati CODA

Fondamenti di Informatica T-1

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

Corso: Fondamenti di Linguaggi di Programmazione

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione a oggetti

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

Strutture dati nel supporto a run time

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

La classe java.lang.object

Corso di Programmazione ad Oggetti

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Informazioni sull esame e Regole per lo svolgimento dei progetti

Lezione 6 Introduzione al C++ Mauro Piccolo

Costanti e Variabili

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Polimorfismo per Genericità in Java

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Transcript:

Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti Linguaggi di programmazione come Pascal, C o Java consentono all utente di definirne di nuovi Cos è un tipo? Insieme di valori + operatori + 0, 1, 2,,, Interi, Booleani I tipi di dato sono modelli matematici 1

Specifica: la sintassi Consiste nel definire nuovi identificatori: nome del tipo definito: Es. Stack nomi e tipi degli operatori Es. NewStack: void Stack Push: TipoEl, Stack Stack Top: Stack TipoEl Pop: Stack Stack IsEmpty: Stack Boolean Specifica: la semantica Consiste nel definire il significato/ comportamento degli operatori Equazionalmente: IsEmpty(NewStack()) = true IsEmpty(Push(e, s)) = false Top(Push(e, s)) = e Pop(Push(e, s)) = s Specifica: la semantica Consiste nel definire il significato/ comportamento degli operatori Con pre e post-condizioni NewStack(): IsEmtpty(s): Push(e, s): Top(s): Pop(s): Post: produce una pila vuota Post: true se s =, false altrimenti Post: ritorna la pila ottenuta aggiungendo e ad s come el. emergente Pre: s ; Post: ritorna l emergente Pre: s ; Post: ritorna s meno l emergente 2

# s: Stack è this: dunque non viene mai menzionato Interfacce in Java manca NewStack: sarà il costruttore Stack { IsEmpty(); // Post: true se la pila è vuota, false altr. Push(Object newitem); // Post: aggiunge newitem come emergente Object Top(); // Pre: la pila non è vuota // Post: ritorna l emergente senza rimuoverlo Pop(); // Pre: la pila non è vuota // Post: rimuove l emergente dalla pila Il significato dell astrazione La pila s è vuota: IsEmpty(s) =? IsEmpty(s) = false Posso conoscere allora il valore dell emergente: Top(s) =? Top(s) = e Utente Il significato dell astrazione Posso inserire un valore in fondo alla pila s? Non senza aver prima rimosso tutti gli altri con Pop Vorrei sapere come sono organizzati gli el. Utente Questi sono affari!"$# %& 3

Il significato dell astrazione L utente interagisce con i valori di tipo Stack solo attraverso gli operatori: non può né deve conoscere i dettagli della loro realizzazione Utente Il significato dell astrazione ADT = Abstract Data Type barriera Programma applicativo operatore Implementazione dell ADT Programma applicativo Accesso diretto ai dati Che cos è una struttura dati? Struttura dati = modo sistematico di rappresentare ed organizzare dati a f k z q d i w vettore 2 5 9 1 lista 0010011010010111 numero intero rappr. in binario 4

Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: base = indirizzo del primo elemento V[' ] = valore all indirizzo base + ' dim(valore) V a f k z q d i w Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: Cons(2, L) 2 p p.next 5 9 1 p.info L = Puntatore al primo el. Primitive di accesso Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati: 0010011010010111 not 1101100101101000 5

Invarianti di struttura Una proprietà di una struttura dati che deve essere mantenuta dopo qualunque accesso alla struttura è un invariante di struttura 2 5 9 1 lista I puntatori di una lista devono concatenare tra loro tutti i singoli elementi Realizzazione mediante classi La struttura dati è il valore di alcuni campi privati Gli operatori dell ADT sono realizzati con altrettanti metodi pubblici (in particolare l operatore che genera una nuova istanza della struttura è un costruttore) Eventuali routines ausiliarie coinvolte nella realizzazione dei metodi pubblici, sono realizzate con metodi privati Cassi in Java (( StackAsArray *)+ ), ( Stack { +, - nextfree; +, Object arrayofvalues[]; Struttura dati 6

Cassi in Java (( costruttori StackAsArray *)+ ), ( Stack { +. StackAsArray ( size) { arrayofvalues = / Object[size]; nextfree = 0; +. StackAsArray () { 0,( (100); overloading Cassi in Java (( StackAsArray *)+ ), ( Stack { +. 1 IsEmpty() {. nextfree == 0; +. Object Top() { return arrayofvalues[nextfree]; +. Pop() { nextfree--; Cassi in Java 2$3 4 5 5 StackAsArray 6*7 8 3$9 7 9 :; 5 Stack { 8<$= 3 6 2?> @ 6$A Push(Object newitem) { 6 B (nextfree == arrayofvalues.length) EnlargeOf (100); arrayofvalues[nextfree++] = newitem; 8C 6 > 4;*9D>@ 6 A EnlargeOf (6 : ; size) { // alloca altri size elementi in arrayofvalues[] Ha senso perché è un vettore Object temp[] = : 9E Object[arrayofvalues.length + size]; B @ C (6 : ; i = 0; i < arrayofvalues.length; i++) temp[i] = arrayofvalues[i]; arrayofvalues = temp; 7

Invariante di classe Quando un ADT viene realizzato con una classe, che a sua volta implementa una o più strutture dati, l invariante di struttura deve essere parte della post-condizione di tutti i metodi pubblici: prende allora il nome di invariante di classe. L invariante di classe, essendo relativo all implementazione, non è pubblico: deve implicare le post-condizioni dei metodi pubblici come dichiarate in interfaccia 8