Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoIda Gattini Modificato 9 anni fa
1
Si dia la specifica del tipo di dato astratto Tabella.Una Tabella ha due colonne e un numero variabile di righe. Gli elementi della prima colonna sono nomi (stringhe) senza ripetizioni,gli elementi della seconda colonna sono numeri interi senza ripetizioni. E` non modificabile.
3
La specifica E’ l’interfaccia del tipo di dato astratto (per l’utente) Serve per astrarre dall’implementazione Non deve contenere riferimenti all’implementazione (che tra l’altro non c’è ancora) al fine di mascherarla
4
public class Tabella{ \\OVERVIEW\\OVERVIEW: una Tabella ha due colonne \\ed un numero variabile di righe; la \\prima colonna memorizza stringhe \\ e la seconda interi senza ripetizioni. \\ E’ non modificabile. public Tabella(){ \\EFFECTS\\EFFECTS: costruisce una nuova Tabella vuota} public int size(){ \\EFFECTS\\EFFECTS: restituisce il numero di righe di this }
5
public String get-first(int i) throws InvalidException { \\EFFECTS: restituisce la stringa della i-esima riga se \\EFFECTS \\ esiste, altrimenti solleva l’eccezione InvalidException} public int get-second(int i) throws InvalidException { \\EFFECTS: restituisce l’intero della i-esima riga se \\EFFECTS \\ esiste, altrimenti solleva l’eccezione InvalidException}
6
public Tabella add(String s,int i) throws InvalidException { \\EFFECTS: se s o i compaiono gia’ in this (nella prima o seconda \\EFFECTS \\colonna rispettivamente) solleva InvalidException, \\altrimenti restituisce una Tabella ottenuta aggiungendo \\la nuova riga (s,i) a this} } METODO PRODUTTORE: this e’ non modificabile
7
La rappresentazione private Pair[] coppie; Usiamo un array di coppie Per rappresentare le coppie tipo ausiliario Pair
8
Invariante I(c) = c.coppie != null & & per ogni 0 < = i< j < c.coppie.length (c.coppie[i] != null & & ! c.coppie[i].left. equals(c.coppie[j].left) & & c.coppie[i].rigth != c.coppie[j].right)
9
Funzione di astrazione alpha(c) = tabella che ha due colonne e c.coppie.length righe e tale che la riga i-esima e’ (c.coppie[i].left, c.coppie[i].right)
10
public class Tabella{ \\OVERVIEW\\OVERVIEW: una Tabella ha due colonne \\ed un numero variabile di righe; la \\prima colonna memorizza stringhe \\e la seconda interi senza ripetizioni. \\E` non modificabile. private Pair[] coppie; public Tabella(){ \\EFFECTS\\EFFECTS: costruisce una nuova Tabella vuota coppie=new Pair[0]; }
11
public int size(){ \\EFFECTS\\EFFECTS: restituisce il numero di righe di this return coppie.length ; } public String get-first(int i) throws InvalidException { \\EFFECTS: restituisce la stringa della i-esima riga se \\EFFECTS \\ esiste, altrimenti solleva l’eccezione InvalidException if (! 0<=i<coppie.length) throw new InvalidException(Tabella.gf); return coppie[i ].left; }
12
public int get-second(int i) throws InvalidException { \\EFFECTS: restituisce l’intero della i-esima riga se \\EFFECTS \\ esiste, altrimenti solleva l’eccezione InvalidException if (! 0<=i<coppie.length) throw new InvalidException(Tabella.gs); return coppie[i ].right; } }
13
public Tabella add(String s,int i) throws InvalidException { \\EFFECTS: se s o i compaiono gia’ in this (nella prima o seconda \\EFFECTS \\colonna rispettivamente) solleva InvalidException, \\altrimenti restituisce una Tabella ottenuta aggiungendo \\la nuova riga (s,i) a this} for (int j=0; j< coppie.length;j++) { if (coppie[j].left.equals(s) | | coppie[j].right==i) throw new InvalidException(Tabella.add);} Tabella nuovo=new Tabella(coppie.length+1); for (int j=0; j< coppie.length;j++) {nuovo.coppie[j]=coppie[j];} nuovo.coppie[coppie.length]=new Pair(s,i); return nuovo;} private Tabella (int n){ \\EFFECTS\\EFFECTS: costruisce una nuova Tabella vuota, la cui rappresentazione \\ è un array di dimensione n coppie= new Pair[n];} }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.