codice:
public class Involucro{
/** OVERVIEW: Involucro rappresenta una collezione dinamica di stringhe del tipo <s1, s2, s3,...., sn> tali che
s_i è completamente contenuta in s_(i+1).
V = {{s1,s2,s3,...,sn>: Per ogni i s_i è una stringa ed s_i è interamente contenuto in s_(i+1)}}
O = inserisci: Se l'oggetto che si vuole inserire è coerente con la rappresentazione della collezione
(è una stringa) e con lo stato attuale della collezione (i valori già presenti nella
collezione), allora lo inserisce nella collezione modificandola
fondi: Date collezioni S e T se s_n è interamente contenuto in t_1 allora fonde le due collezioni nel
seguente modo: S = <s1,s2,s3,...,sn> T = {t1,t2,t3,...,tn} --> {s1,s2,s3,...,sn,t1,t2,t3,..,tn}
get(i): Accede in maniera posizionale all'i-esimo elemento della collezione */
private Vector collStr; // Rappresenta la collezione di stringhe
/** FUNZIONE DI ASTRAZIONE: F_a(): STATO CONCRETO ----> STATO ASTRATTO
F_a([a, ab, abc, abcd]) ------> {<a, ab, abc, abcd>}
ma anche: F_a([a, b(a), (ba)f, z(baf), (zbaf)e]) ---> {a, ba, baf, zbaf, zbafe}
INVARIANTE DI RAPPRESENTAZIONE: è un predicato I: C ---> boolean che è vero per gli stati concreti che sono
rappresentazioni leggittime di uno stato astratto:
I(collStr): collStr != NULL (il Vector deve essere sempre diverso da NULL)
Per ogni i: v.get(i) deve essere incluso in v.get(i+1) (la i-esima stringa deve
sempre essere interamente contenuta nella (i+1)-esima stringa della collezione */
/** COSTRUTTORE:
EFFECTS: Crea un nuovo oggetto di tipo Involucro che rappresenta la collezione vuota
@param: void:
@return: Il riferimento ad un oggetto di tipo Involucro
Il costruttore soddisfa l'invariante di rappresentazione in quanto: 1) Viene assegnata alla variabile di istanza
collStr il riferimento ad un nuovo Vector quindi no è mai null. 2) Il costruttore crea una collezione vuota che
rappresenta la stringa vuota contenuta in ogni stringa, quindi qualsiasi sia il primo elemento va bene */
public Involucro(){
collStr = new Vector(); // Crea la collezione vuota assegnando a collStr il riferimento ad un nuovo Vector vuoto
}
/** Metodo inserisci()
EFFECTS: Se il parametro può essere inserito nella collezione (se contiene completamente l'ultima stringa della
collezione, allora viene inserito nella collezione rappresentata dall'oggetto ricevente, altrimenti viene
sollevata una StringaNonValidaException
MODIFIES: this
@param: Un oggetto di tipo String
Il metodo inserisci() soddisfa l'invariante di rappresentazione in quanto se la collezione è vuota permette
l'inserimento di una stringa qualsiasi, se invece nella collezione è già presente qualcosa prima di inserire il
parametro controlla che il parametro contiene completamente l'ultima stringa presente nella collezione. Se ciò è
verificato la inserisce, altrimenti no e la collezione rimane sempre coerente con la sua definizione */
public void inserisci(String s){
int n = this.collStr.size(); // Mette in n il numero di elementi presenti nella collezione ricevente
if(collStr.size() == 0) // Se la collezione è vuota
collStr.addElement(s); // allora aggiungi l'elemento in prima posizione
else{ // Se invece la collezione non è vuota
if(s.contains(this.collStr[n])) // Se la stringa parametro s contiene l'ultima stringa della collezione
collStr.addElement(s); // allora agiunge l'elemento nella collezione
else throw new StringaNonValidaException(); // Altrimenti non lo inserisce e solleva un'eccezione
}
}
/** Metodo fondi():
EFFECTS: Se possibile fonde la collezione ricevente con quella referenziata dal parametro. Tale fusione è possibile
se e solo se l'ultimo elemento della collezione ricevente è totalmente contenuto nel primo elemento della
collezione referenziata dal parametro, altrimenti solleva una CollezioneParametroNonValidaExcepion
Eventualmente la dusione fosse possiebileil metodo crea una nuova collezione che contiene la fusione delle
due collezioni iniziali.
@param: Il riferimento ad un oggetto Involucro
@return: Il riferimento ad un nuovo oggetto Involucro
Il metodo rispetta l'invariante di rappresentazione in quanto ne l'oggetto ricevente, ne il parametro possono essere
null e poichè l'eventuale nuova collezione rispetta la proprietà che Per ogni i, l'i-esima stringa è sempre
contenuta nella (i+1)-esima stringa */
public Involucro fondi(Involucro i){
int n = this.collStr.size(); // Mette in n il numero di elementi presenti nella collezione ricevente
int m = i.collStr.size(); // Mette in m il numero di elementi presenti nella collezione parametro
private Vector vettoreFusione; // Conterrà l'eventuale fusione delle 2 collezioni
int contatore;
/* Se la prima stringa contenuta nella collezione referenziata dal parametro contiene completamente l'ultima stringa
contenuta nella collezione ricevente */
if(i.collStr[1].contains(this.collStr[n])){
vettoreFusione = new Vector(); // Crea il vettore che conterrà la fusione delle due collezioni
for(contatore=0; contatore<=n; contatore++) // Copia gli elementi della prima collezione in vettoreFusione
vettoreFusione.addElement(this.collStr[contatore]);
for(contatore=0; contatore<=m; contatore++) // Copia gli elementi della seconda collezione in vettoreFusione
vettoreFusione.addElement(i.collStr[contatore]);
}
// Se invece non è possibile eseguire la concatenazione solleva un'eccezione
else throw new CollezioneParametroNonValidaExcepion();
return vettoreFusione; // Ritorna al chiamante il vettore che contiene la fusione delle due collezioni
}
/** Metodo get(i):
EFFETS: Accede in lettura in maniera posizionale agli elementi della collezione
REQUIRES: La collezione non deve essere vuota
@param: Un valore intero che rappresenta la posizione a cui voglio accedere nella collezione
@return Un valore String che rappresenta la stringa a cui voglio accede
Non modificando la collezione rispetta l'invariante di rappresentazione */
public String get(int i){
if(i >= collStr.size()) // Se si tenta di accedere ad una locazione più grande della dimensione della collezione
throw FuoriDallaCollezioneException(); // Lancia un'eccezione
else return collStr.elementAt(i); // Altrimenti restituisci la stringa in posizione i
}
}
Gli errori che mi da il compilatore sono questi: