14
Esercitazione Frame

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

Embed Size (px)

Citation preview

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