Esercitazione PR2
Giovedì 8 ottobre 2020

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 installato correttamente il sistema Java, compilando ed eseguendo (eventualmente con javac e java) un semplice programma, per esempio Benvenuto.

    [1.1] Si consideri il tipo di dato astratto modificabile ModString, utilizza to per rappresentare stringhe mutabili.

    Il tipo di dato ModString ha, fra gli altri, i seguenti metodi
    • 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, eventualmente riposizionando in maniera adeguata i caratteri rimanenti.
    Si completi la specifica del tipo di dato, 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 ModString

    [1.2] Si consideri una implementazione del tipo di dato astratto ModString che utilizza come struttura di supporto una rappresentazione del tipo
       private final Character[] charEl;
    

    Soluzione: la classe MyModString.

    [2.1] Si consideri il tipo di dato astratto modificabile ModStringCollection, utilizzato per rappresentare una collezione mutabile di oggetti di tipo ModString.

    Il tipo di dato ModStringCollection ha, 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 tutte le occorrenze se num = 0), e restituisce il numero degli elementi effettivamente rimossi;
    • public String[ ] getUnique(), che restituisce gli elementi della collezione eliminando i duplicati.

    Si completi la specifica del tipo di dato 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 ModStringCollection.

    [2.2] Si definisca una implementazione del tipo di dato astratto ModStringCollection. La rappresentazione deve utilizzare come struttura di supporto una rappresentazione del tipo
       private final Vector<ModString> str;
       private final Vector<Integer> occ;
    
    In particolare, si definiscano la funzione di astrazione e l'invariante di rappresentazione.

    Si testino le classi utilizzando la classe TestModStringCollection.

    Soluzione: la classe MyModStringCollection.

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