Esercitazione PR2
Giovedì 27 ottobre 2016

ISTRUZIONI E TESTI

  • Si svolgano gli esercizi proposti in una nuova directory/progetto, ricordandosi di importare una classe adeguata per l'I/O da tastiera.
  • Si verifichi di aver istallato correttamente il sistema Java, compilando ed eseguendo (eventualmente con javac e java) un semplice programma, per esempio Benvenuto.

    [1] Si consideri il tipo di dati astratto modificabile SMap<K,V>, variante semplificata dell'interfaccia Map<K,V> delle API Java e utilizzata per rappresentare una funzione parziale con domino K e codominio V. O, per dirla con le API Java: An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.
    Tale tipo di dati ha, tra gli altri, i seguenti metodi
    • public V put(K key, V value), che associa il valore value alla chiave key, e restituisce il valore precedentemente associato a key se questo esisteva, e null altrimenti;
    • public V get(K key), che restituisce il valore associato alla chiave key se questo esiste, e null altrimenti;
    • public List<K> getKeys(), che restituisce una lista delle chiavi che hanno associato un valore.

    Si completi la specifica del tipo di dati astratto, includendo una overview con la descrizione di un'istanza tipica e fornendo la specifica completa dei metodi, comprese le eventuali eccezioni lanciate.

    Soluzione: la classe SMap<K,V>.

    [2] Si definisca la classe public TwoListSMap<K,V> che implementa il tipo di dati astratto SMap<K,V>. Questa deve utilizzare una rappresentazione del tipo
       private List<K> keys;
       private List<V> values;
    
    In particolare, si definiscano la funzione di astrazione e l'invariante di rappresentazione.

    Soluzione: la classe TwoListSMap<K,V> e alcune varianti di specifica/implementazione per il metodo get.

    [3] Si dimostri la correttezza dell'implementazione proposta.

    [4] Si consideri la classe LimitedTwoListSMap<K,V>, che estende TwoListSMap<K,V> imponendo un limite massimo al numero di elementi di K ai quali può essere associato un valore. Si sovrascrivano solo i metodi necessari, e si definiscano la funzione di astrazione e l'invariante di rappresentazione.

    Si dimostri infine se la nuova classe verifica o meno il principio di sostituzione.


    Soluzione: la classe LimitedTwoListSMap<K,V>.