Esercitazione PR2
Giovedì 13 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 considerino i tipi di dati astratto modificabile ModString, utilizzato per rappresentare stringhe mutabili, e ModStringCollection, utilizzato per rappresentare una collezione mutabile di oggetti di tipo ModString.
    Il tipo di dati ModString ha, fra gli altri, i seguenti metodi
    • public int occurrences(char c), che restituisce il numero di occorrenze del carattere c nella stringa;
    • public int size(), che restituisce la lunghezza della stringa;
    • public void update(char c, int num), che inserisce il carattere c nella posizione num, sovrascrivendo il carattere precedentemente in quella posizione;
    • public void remove(int num), che elimina il carattere in posizione num, shiftando in maniera adeguata i caratteri rimanenti.
    Il tipo di dati ModStringCollection ha invece, fra gli altri, i seguenti metodi
    • public int occurrences(ModString str), che restituisce il numero di occorrenze della stringa str nella collezione;
    • public int size(), che restituisce la cardinalità della collezione (il numero delle stringhe presenti);
    • public void insert(ModString str), che inserisce la stringa str nella collezione;
    • public int remove(ModString str, int num), che elimina dalla collezione al massimo num occorrenze della stringa str, e restituisce il numero degli elementi effettivamente rimossi;
    • public Vector<String> getUnique(), che restituisce gli elementi della collezione eliminando i duplicati.

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

    Soluzione: le classi ModString e ModStringCollection.

    [2] Si definisca una implementazione dei tipi di dati astratti ModString e ModStringCollection. Questa ultima deve utilizzare come struttura di supporto una rappresentazione del tipo
       private Vector<ModString> str;
       private Vector<Integer> occ;
    
    In particolare, si definiscano la funzione di astrazione e l'invariante di rappresentazione.

    Soluzione: le classi MyModString e MyModStringCollection e la classe TestModStringCollection per testarle.

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