Title: Ese 3 (del 31 Marzo 2004)
1Ese 3 (del 31 Marzo 2004)
2Testo
- Dare rappresentazione e realizzazione dei metodi
della seguente classe QueueWithPriority. Nella
risposta, non riportare i commenti della
specifica. - Realizzare la procedura stand-alone che, data una
QueueWithPriority, la modifica rimuovendo tutti
gli elementi con priorità massima.
3Specifica
4Specifica
5Implementazione
- Rappresentazione usiamo un Vector per
implementare la coda con priorita, ogni elemento
e una coppia consistente di una stringa ed un
intero (serve un tipo ausiliario record). - Il primo elemento della coda, quello con
priorita massima ed inserito prima, e il primo
elemento del vettore le coppie sono ordinate di
conseguenza - Implementiamo i metodi di conseguenza
- Omettiamo la definizione del tipo eccezione
EmptyException, checked (estende Exception)
6Record
class Pair // OVERVIEW un tipo record
String value int prior // costruttore Pair
(String s, int n) // EFFECTS inizializza il
record con i // valori di s ed n value
s prior n
7Implementazione
public class QueuewithPriority // OVERVIEW una
QueueWithPriority è una coda con priorità, ossia
una // collezione di oggetti (di tipo String) a
cui è associata una priorità (un // numero). Gli
elementi sono ordinati in modo decrescente in
base alla // priorità e a parità di priorità in
base allordine di inserimento // (con una
politica first in first out). E modificabile.
private Vector els \\rappresentazione
privata
8public QueuewithPriority () \\ EFFECTS
costruisce una QueuewithPriority vuota elsNew
vector() public String first() throws
EmptyException \\ EFFECTS se this e vuoto
solleva EmptyException, altrimenti \\ restituisce
il primo elemento di this if (els.size()0)
throw new EmptyException(vuota) Pair p
(Pair) els.get(0) return p.value
9 public int max() throws EmptyException \\
EFFECTS se this e vuoto solleva EmptyException,
altrimenti \\ restituisce la priorita massima
presente in this if (els.size()0) throw new
EmptyException(vuota) Pair p (Pair)
els.get(0) return p.prior public void
dequeue() throws EmptyException \\ MODIFIES
this \\ EFFECTS se this e vuoto solleva
EmptyException, altrimenti \\ rimuove il primo
elemento di this if (els.size()0) throw new
EmptyException(vuota) els.remove(0)
10 public void enqueue(String x, int p) ) throws
NullPointerException \\ MODIFIES this \\
EFFECTS se x e null solleva NullPointerExceptio
n, altrimenti \\ inserisce x in this con
priorita p if (xnull) throw new
NullPointerException(null) Pair znew Pair
(x,p) els.add(z) if (els.size() lt1)
return int iels.size()-2 while (i gt0)
Pair q(Pair) els.get(i) if (q.priorgtz.prior)
return els.set(i1,q) els.set(i,z) i--
11Procedura stand-alone
- Scritta vedendo solo la specifica di
QueuewithPriority (non vediamo la - rappresentazione, ovvero la variabile distanza
els di tipo Vector) - Gestiamo le eccezioni che possono essere
sollevate dai metodi della classe
(EmptyException) mediante try e catch - EmptyException e checked, potrebbe essere
propagata solo se messa nellintestazione - Mascheriamo le eccezioni, se non ci sono elementi
non modifica la coda
12Procedura stand-alone
- public static void removemax(QueuewithPriority p)
- \\MODIFIESp
- \\ EFFECTS rimuove tutti gli elementi di
priorita pari alla massima da p - if (pnull) return
- int i
- tryip.max()
- catch(EmptyException)
- return
- p.dequeue()
- try
- while (p.max() i) p.dequeue()
- catch (EmptyException) return
-