Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFilumena Grande Modificato 11 anni fa
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.