Rintrah84
09-07-2009, 10:16
Ciao,
stò tentando di rifare il compito d'esame su cui sono stato bocciato la volta scorsa...ma ho dei problemi (HELP ME...il nuovo appello si avvicina).
Allora i primi 2 punti chiedono:
Si richiede la possibilità di rappresentare e gestire una collezione omogenea e dinamica di oggetti generici
per i quali è possibile definire una generica relazione booleana: due oggetti possono essere oppure non
essere in relazione.
1) Si richiede l’implementazione del tipo CollezioneConRelazione mediante la classe Java
CollezioneConRelazione.
2) Sia definito un operatore di accesso in lettura (osservatore) che, a partire da un dato parametro, opera come segue:
· se la collezione contiene elementi in relazione con il parametro, l’operatore calcola un iteratore che enumera tutti gli elementi della collezione che sono in relazione con tale parametro;
· qualora la collezione non contenga elementi in relazione con il parametro, l’operatore calcola il primo elemento della collezione.
Mi sono completamente bloccato sul punto numero 2 (qualche idea peròla ho...anche perchè avevo parlato con persone che erano riuscite a passare l'esame e mi avevano dato qualche idea).
Io perora ho fatto così:
Per prima cosa definisco l'interfaccia Relazionabile che mi definisce tipi di dati generici che come unico comportamento comune hanno quello di saper rispondere se due oggetti sono in relazione tra loro:
/** OVERVIEW: Si tratta di un'interfaccia che descrive oggetti generici che hanno come caratteristica comune quella di
sapere se due oggetti sono in relazione tra loro */
public interface Relazionabile{
boolean isInRelation(Relazionabile r);
}
Poi ho definito la classe CollezioneConRelazione che mi rappresenta la mia collezione omogenea e dinamica di Relazionabili. Per essere omogenea i dati dentro la collezione devono avere tutti lo stesso tipo effettivo. Per fare questo il metodo insert() si comporta così: Se la collezione è vuoto --> inserisce al suo interno un qualsiasi oggetto Relazionabile; Se nella collezione è presente almeno un oggetto --> Prima di inserire un oggetto parametro controlla che esso abbia lo stesso tipo effettivo degli oggetti nella collezione (viene controllato che abbia lo stesso tipo effettivo del primo elemento della collezione...così da inserire solo elementi con lo stesso tipo effettivo del primo oggetto inserito nella collezione).
E fin quà sono sicuro che va tutto bene:
import java.util.*;
/** OVERVIEW: La classe implementa una collezione omogenea (cioè contenente dati aventi tutti lo stesso tipo effettivo) e
dinamica di oggetti aventi Relazionabile come supertipo */
public class CollezioneConRelazione{
Vector collezione; // Rappresenta la collezione
/** COSTRUTTORE:
EFFECTS: Costruisce un nuovo oggetto di tipo CollezioneConRelazione
@param: void
@return: Il riferimento ad un oggetto di tipo CollezioneConRelazione */
public CollezioneConRelazione(){
collezione = new Vector(); // Crea la collezione assegnando a collezione il riferimento ad un vector vuoto
}
/** METODO INSERT():
EFFECTS: Se il Vector è vuoto inserisce un qualasiasi oggetto Relazionabile nella collezione, se ci sono già
altri oggetti inserisce l'oggetto referenziato dal paramentro dentro la collezione solamente se esso è
omogeneo con gli altri elementi della collezione, altrimenti solleva un'eccezione
@param: Un oggetto di tipo Relazionabile
@return: void */
public void insert(Relazionabile r){
int dimensione = collezione.size(); // Contiene la dimensione della collezione
if(dimensione == 0) // Se la collezione è vuota
collezione.addElement(r); // Il metodo aggiunge un qualsiasi Relazionabile alla collezione
else{ // Se invece la collezione non è vuota bisogna controllare che il parametro sia omogeneo con gli altri elementi
if(collezione.elementAt(0).getClass().isInstance(r))// Se il tipo del primo elemento è lo stesso del parametro r
collezione.addElement(r); // allora aggiunge l'elemento in coda alla colleazione
else throw new ElementoNonValidoException(); // Altrimenti solleva un'eccezione
}
}
/** METODO READ():
EFFECTS: Il metodo read() in base al parametro di input param opera nel seguente modo:
1) Se la collezione contiene elementi in relazione con il parametro, l'operatore calcola un iteratore
che enumera tutti gli elementi della collezione che sono in relazione con il parametro.
2) Qualora la collezione non contenga elementi in relazione con il parametro, l'operatore calcola il
primo elemento della collezione
@param: Il riferimento ad un oggetto di tipo Relazionabile
@return: Un oggetto di tipo MioIteratore che rappresenta l'iteratore richiesto dalle specifiche
@throw: Un'eccezione che eventualmente contenga il primo valore contenuto nella collezione */
}
Ora però mi impicco totalmente con il metodo read()...sò che bisogna fare + o - così (mi è stato detto):
Realizzare un particolare iteratore che prende come parametro un oggetto di tipo Relazionabile, l'iteratore restituisce tutti gli oggetti della collezione in relazione con tale parametro (se esistono), se invece non esiste nessun oggetto in relazione con il parametro SOLLEVA UN'ECCEZIONE CHE CONTIENE AL SUO INTERNO IL PRIMO ELEMENTO DELLA COLLEZIONE.
Io però non ho la minima idea di come si faccia un iteratore che accetti un parametro...mi potete dare una mano?
Grazie mille
stò tentando di rifare il compito d'esame su cui sono stato bocciato la volta scorsa...ma ho dei problemi (HELP ME...il nuovo appello si avvicina).
Allora i primi 2 punti chiedono:
Si richiede la possibilità di rappresentare e gestire una collezione omogenea e dinamica di oggetti generici
per i quali è possibile definire una generica relazione booleana: due oggetti possono essere oppure non
essere in relazione.
1) Si richiede l’implementazione del tipo CollezioneConRelazione mediante la classe Java
CollezioneConRelazione.
2) Sia definito un operatore di accesso in lettura (osservatore) che, a partire da un dato parametro, opera come segue:
· se la collezione contiene elementi in relazione con il parametro, l’operatore calcola un iteratore che enumera tutti gli elementi della collezione che sono in relazione con tale parametro;
· qualora la collezione non contenga elementi in relazione con il parametro, l’operatore calcola il primo elemento della collezione.
Mi sono completamente bloccato sul punto numero 2 (qualche idea peròla ho...anche perchè avevo parlato con persone che erano riuscite a passare l'esame e mi avevano dato qualche idea).
Io perora ho fatto così:
Per prima cosa definisco l'interfaccia Relazionabile che mi definisce tipi di dati generici che come unico comportamento comune hanno quello di saper rispondere se due oggetti sono in relazione tra loro:
/** OVERVIEW: Si tratta di un'interfaccia che descrive oggetti generici che hanno come caratteristica comune quella di
sapere se due oggetti sono in relazione tra loro */
public interface Relazionabile{
boolean isInRelation(Relazionabile r);
}
Poi ho definito la classe CollezioneConRelazione che mi rappresenta la mia collezione omogenea e dinamica di Relazionabili. Per essere omogenea i dati dentro la collezione devono avere tutti lo stesso tipo effettivo. Per fare questo il metodo insert() si comporta così: Se la collezione è vuoto --> inserisce al suo interno un qualsiasi oggetto Relazionabile; Se nella collezione è presente almeno un oggetto --> Prima di inserire un oggetto parametro controlla che esso abbia lo stesso tipo effettivo degli oggetti nella collezione (viene controllato che abbia lo stesso tipo effettivo del primo elemento della collezione...così da inserire solo elementi con lo stesso tipo effettivo del primo oggetto inserito nella collezione).
E fin quà sono sicuro che va tutto bene:
import java.util.*;
/** OVERVIEW: La classe implementa una collezione omogenea (cioè contenente dati aventi tutti lo stesso tipo effettivo) e
dinamica di oggetti aventi Relazionabile come supertipo */
public class CollezioneConRelazione{
Vector collezione; // Rappresenta la collezione
/** COSTRUTTORE:
EFFECTS: Costruisce un nuovo oggetto di tipo CollezioneConRelazione
@param: void
@return: Il riferimento ad un oggetto di tipo CollezioneConRelazione */
public CollezioneConRelazione(){
collezione = new Vector(); // Crea la collezione assegnando a collezione il riferimento ad un vector vuoto
}
/** METODO INSERT():
EFFECTS: Se il Vector è vuoto inserisce un qualasiasi oggetto Relazionabile nella collezione, se ci sono già
altri oggetti inserisce l'oggetto referenziato dal paramentro dentro la collezione solamente se esso è
omogeneo con gli altri elementi della collezione, altrimenti solleva un'eccezione
@param: Un oggetto di tipo Relazionabile
@return: void */
public void insert(Relazionabile r){
int dimensione = collezione.size(); // Contiene la dimensione della collezione
if(dimensione == 0) // Se la collezione è vuota
collezione.addElement(r); // Il metodo aggiunge un qualsiasi Relazionabile alla collezione
else{ // Se invece la collezione non è vuota bisogna controllare che il parametro sia omogeneo con gli altri elementi
if(collezione.elementAt(0).getClass().isInstance(r))// Se il tipo del primo elemento è lo stesso del parametro r
collezione.addElement(r); // allora aggiunge l'elemento in coda alla colleazione
else throw new ElementoNonValidoException(); // Altrimenti solleva un'eccezione
}
}
/** METODO READ():
EFFECTS: Il metodo read() in base al parametro di input param opera nel seguente modo:
1) Se la collezione contiene elementi in relazione con il parametro, l'operatore calcola un iteratore
che enumera tutti gli elementi della collezione che sono in relazione con il parametro.
2) Qualora la collezione non contenga elementi in relazione con il parametro, l'operatore calcola il
primo elemento della collezione
@param: Il riferimento ad un oggetto di tipo Relazionabile
@return: Un oggetto di tipo MioIteratore che rappresenta l'iteratore richiesto dalle specifiche
@throw: Un'eccezione che eventualmente contenga il primo valore contenuto nella collezione */
}
Ora però mi impicco totalmente con il metodo read()...sò che bisogna fare + o - così (mi è stato detto):
Realizzare un particolare iteratore che prende come parametro un oggetto di tipo Relazionabile, l'iteratore restituisce tutti gli oggetti della collezione in relazione con tale parametro (se esistono), se invece non esiste nessun oggetto in relazione con il parametro SOLLEVA UN'ECCEZIONE CHE CONTIENE AL SUO INTERNO IL PRIMO ELEMENTO DELLA COLLEZIONE.
Io però non ho la minima idea di come si faccia un iteratore che accetti un parametro...mi potete dare una mano?
Grazie mille