e-commerce84
03-06-2009, 10:39
Ciao,
stò scrivendo questa classe Java chiamata Involucro che gestisce una collezione di stringhe rappresentate con un Vector.
Le stringhe accettate dalla collezione hanno la particolarità che la i-esima stringa deve sempre essere contenuta nella (i+1)-esima stringa.
Quindi saranno collezioni del tipo: {a, ab, abc, z[B]abc]u} tanto per fare un esempio.
Per ora ho scritto solo il costruttore ed un metodo che aggiunge un elemento alla collezione, tale secondo metodo controlla se la collezione è vuota ci inserisce una stringa ricevuta come parametro, se invece la collezione non è vuota controlla se l'ultimo elemento della collezione è contenuto nel parametro e se è vero lo aggiunge, altrimenti solleva un'eccezione...però mi dà uno strano messaggio in compilazione.
Il codice è questo:
Classe Involucro (c'è un sacco di documentazione ma quella è perchè piace alla proff, in realtà sono 3 righe di codice):
import java.util.*;
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 */
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 str){
int dimensione = collStr.size() ; // Contiene la dimensione del Vector collStr
if(dimensione == 0) // Se la collezione è vuota
collStr.addElement(str); // Aggiungi la stringa parametro in prima posizione
else{ // Altrimenti, se nella collezione ci sono già degli elementi
if(str.contains(collStr.elementAt(dimensione))) // Se i parametro contiene l'ultima stringa della collezione
collStr.addElement(str); // Aggiungi la stringa parametro in prima posizione
else throw new StringaNonValidaException(); // altrimenti solleva un'eccezione
}
}
}
Eccezione:
public class StringaNonValidaException extends RuntimeException{
public StringaNonValidaException(){
super();
}
public StringaNonValidaException(String s){
super(s);
}
}
Il messaggio di errore è il seguente:
C:\Programmi\Crimson Editor\template\esercizi\esami\11-07-07>javac Involucro.java
Note: Involucro.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
A cosa si riferisce? Che problemi può creare? Soluzioni?
Grazie
Andrea
stò scrivendo questa classe Java chiamata Involucro che gestisce una collezione di stringhe rappresentate con un Vector.
Le stringhe accettate dalla collezione hanno la particolarità che la i-esima stringa deve sempre essere contenuta nella (i+1)-esima stringa.
Quindi saranno collezioni del tipo: {a, ab, abc, z[B]abc]u} tanto per fare un esempio.
Per ora ho scritto solo il costruttore ed un metodo che aggiunge un elemento alla collezione, tale secondo metodo controlla se la collezione è vuota ci inserisce una stringa ricevuta come parametro, se invece la collezione non è vuota controlla se l'ultimo elemento della collezione è contenuto nel parametro e se è vero lo aggiunge, altrimenti solleva un'eccezione...però mi dà uno strano messaggio in compilazione.
Il codice è questo:
Classe Involucro (c'è un sacco di documentazione ma quella è perchè piace alla proff, in realtà sono 3 righe di codice):
import java.util.*;
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 */
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 str){
int dimensione = collStr.size() ; // Contiene la dimensione del Vector collStr
if(dimensione == 0) // Se la collezione è vuota
collStr.addElement(str); // Aggiungi la stringa parametro in prima posizione
else{ // Altrimenti, se nella collezione ci sono già degli elementi
if(str.contains(collStr.elementAt(dimensione))) // Se i parametro contiene l'ultima stringa della collezione
collStr.addElement(str); // Aggiungi la stringa parametro in prima posizione
else throw new StringaNonValidaException(); // altrimenti solleva un'eccezione
}
}
}
Eccezione:
public class StringaNonValidaException extends RuntimeException{
public StringaNonValidaException(){
super();
}
public StringaNonValidaException(String s){
super(s);
}
}
Il messaggio di errore è il seguente:
C:\Programmi\Crimson Editor\template\esercizi\esami\11-07-07>javac Involucro.java
Note: Involucro.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
A cosa si riferisce? Che problemi può creare? Soluzioni?
Grazie
Andrea