Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per...

14
Esercitazione Frame

Transcript of Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per...

Page 1: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Esercitazione

Frame

Page 2: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Argomento

• Realizzazione di un tipo di dato astratto

• Usare le eccezioni per segnalare situazioni particolari

• Invariante e funzione di astrazione

Page 3: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Tipo di dato astratto

• Definire una classe Frame i cui oggetti rappresentano funzioni parziali (a dominio finito) da String (dominio) ad int (Codominio)

• In sostanza sono delle tabelle (senza duplicati)

Page 4: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Quali operazioni?

• Vogliamo le seguenti operazioni (al solito espresse da costruttori e metodi pubblici)

• Simili alle operazioni usate nei Frames della semantica operazionale

• Usiamo delle eccezioni NotFoundException, DuplicateException per segnalare situazioni particolari (checked)

Page 5: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Specifica

public class Frame{

\\ costruttore

public Frame(){\\EFFECTS: costruisce un nuovo Frame indefinito per tuttii valori }

\\ metodi d’istanza

public boolean defined(String s) {\\EFFECTS: se s e’ null solleva NullPointerException, se this e’

definita per s restituisce true, altrimenti restituisce false}

Page 6: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Metodi d’Istanza

public int apply(String s) throws NotFoundException{\\EFFECTS: se s e’ null solleva NullPointerException, se this e’

definita per s restituisce il valore associato, altrimenti solleva NotFoundException}

public String toString(){\\EFFECTS: restituisce una stringa che contiene le coppie di this,

(x,y) \\dove y e’ l’elemento associato ad x}public void bind(String s, int x) throws DuplicateException{\\MODIFIES: this\\EFFECTS: se s e’ null solleva NullPointerException, se this e’

definita per s solleva DuplicateException, altrimenti modifica this aggiungendo l’associazione tra s ed x}

public void update(String s, int x) throws NotFoundException{\\MODIFIES: this\\EFFECTS: se s e’ null solleva NullPointerException, se this non e’

definita per s solleva NotFoundException, altrimenti modifica this rimpiazzando l’associazione per s con x}

}

Page 7: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Implementazione

• La scelta fondamentale (come per tutte le classi che definiscono oggetti) e’ quella delle variabili d’istanza

• Definiscono lo stato degli oggetti

• Vanno dichiarate nella classe private

• Inizializzate dal costruttore

Page 8: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Come si scelgono?

• Devono permettere di memorizzare le informazioni che gli oggetti hanno

• Devono anche permettere di implementare i costruttori e metodi d’istanza richiesti (in modo possibilmente efficiente)

• Come si puo’ rappresentare un Frame?

Page 9: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Una soluzione

• Utilizzare due Vectors, uno che contiene gli elementi del dominio ed uno quelli del codominio

dom= [d,e,g] cod= [4,7,9]• La posizione i-esima di cod contiene l’intero

associato alla stringa nella posizione i-esima di dom

• I due vettori hanno sempre la stessa dimensione

Page 10: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Un’altra soluzione

• Utilizzare un tipo ausilario Pair che memorizza le coppie (x,y), y e’ l’elemento associato ad x

• Utilizzare un vettore di Pair

fun= [(d,4), (e,7), (g,9)]

Page 11: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Tipo Recordpublic class Pair{\\EFFECTS: un Pair e’ una coppia (stringa,intero)

public String left;public int right;

public Pair (String s,int i){\\EFFECTS: costruisce una nuova coppia (s,i)}

}

•La rappresentazione puo’ anche essere pubblica•Non ci sono operazioni da mascherare

Page 12: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Implementazione

• Realizzare quella tramite vettore di Pair• Dare l’invariante e la funzione di astrazione, e

sviluppare il ragionamento di correttezza in parallelo a costruttori e metodi

• In ogni caso la scelta dell’implementazione e’ invisibile ai moduli che usano Frame

Page 13: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

Seconda Parte

• Un modulo che usa Frame

• Procedura statica (deve essere scritta in base all’interfaccia pubblica)

Page 14: Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.

public class usaframe{

public int sum(Frame f, String[] a){\\EFFECTS: se f o a sono null solleva NullPointerexception, altrimenti restituisce la somma dei valori associati da f agli elementi di a}

}

Esempio:

f=[(d,4), (e,7), (g,9)] a=[e,h,g]

sum=16