La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione."— Transcript della presentazione:

1 Esercitazione Frame

2 Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione di astrazione

3 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)

4 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)

5 Specifica public class Frame{ \\ costruttore public Frame(){ \\EFFECTS\\EFFECTS: costruisce un nuovo Frame indefinito per tutti i valori } \\ metodi distanza public boolean defined(String s) { \\EFFECTS\\EFFECTS: se s e null solleva NullPointerException, se this e definita per s restituisce true, altrimenti restituisce false}

6 Metodi dIstanza public int apply(String s) throws NotFoundException{ \\EFFECTS\\EFFECTS: se s e null solleva NullPointerException, se this e definita per s restituisce il valore associato, altrimenti solleva NotFoundException} public String toString(){ \\EFFECTS\\EFFECTS: restituisce una stringa che contiene le coppie di this, (x,y) \\dove y e lelemento associato ad x} public void bind(String s, int x) throws DuplicateException{ \\MODIFIES\\MODIFIES: this \\EFFECTS\\EFFECTS: se s e null solleva NullPointerException, se this e definita per s solleva DuplicateException, altrimenti modifica this aggiungendo lassociazione tra s ed x} public void update(String s, int x) throws NotFoundException{ \\MODIFIES\\MODIFIES: this \\EFFECTS\\EFFECTS: se s e null solleva NullPointerException, se this non e definita per s solleva NotFoundException, altrimenti modifica this rimpiazzando lassociazione per s con x} }

7 Implementazione La scelta fondamentale (come per tutte le classi che definiscono oggetti) e quella delle variabili distanza Definiscono lo stato degli oggetti Vanno dichiarate nella classe private Inizializzate dal costruttore

8 Come si scelgono? Devono permettere di memorizzare le informazioni che gli oggetti hanno Devono anche permettere di implementare i costruttori e metodi distanza richiesti (in modo possibilmente efficiente) Come si puo rappresentare un Frame?

9 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 lintero associato alla stringa nella posizione i-esima di dom I due vettori hanno sempre la stessa dimensione

10 Unaltra soluzione Utilizzare un tipo ausilario Pair che memorizza le coppie (x,y), y e lelemento associato ad x Utilizzare un vettore di Pair fun = [(d,4), (e,7), (g,9)]

11 Tipo Record public class Pair{ \\EFFECTS\\EFFECTS: un Pair e una coppia (stringa,intero) public String left; public int right; public Pair (String s,int i){ \\EFFECTS\\EFFECTS: costruisce una nuova coppia (s,i)} } La rappresentazione puo anche essere pubblica Non ci sono operazioni da mascherare

12 Implementazione Realizzare quella tramite vettore di Pair Dare linvariante e la funzione di astrazione, e sviluppare il ragionamento di correttezza in parallelo a costruttori e metodi In ogni caso la scelta dellimplementazione e invisibile ai moduli che usano Frame

13 Seconda Parte Un modulo che usa Frame Procedura statica (deve essere scritta in base allinterfaccia pubblica)

14 public class usaframe{ public int sum(Frame f, String[] a){ \\EFFECTS\\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


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

Presentazioni simili


Annunci Google