D4rkAng3l
31-01-2009, 17:51
Allora parte di un vecchio compito dell'esame di linguaggi di programmazione sono questi 2 esercizzi:
Problema 1. Si richiede il progetto di un tipo astratto di dati Articolo che rappresenta e gestisce i
singoli articoli presenti in un negozio. Il tipo di dati Articolo deve rappresentare il nome
dell’articolo (es. sapone) ed il suo costo unitario. Inoltre, ad ogni articolo deve essere associato il
codice dell’articolo: esso è univoco (non esistono due articoli con lo stesso codice). Le operazioni
richieste per il tipo di dati sono quelle di accesso in lettura alle informazioni rappresentate.
Problema 2. Si richiede l’implementazione del tipo astratto Articolo in linguaggio Java.
Il punto 1 non ha nulla a che fare con i tipi abstract...è una pippa mentale della proff di analisi pre implementazione...praticamente vuole che definiamo 3 insiemi.
Un insieme V che descrive gli oggetti rappresentati dal mio tipo di dato. Un insieme O che rappresenta le operazioni su tali oggetti ed un insieme C che rappresenta possibili costanti significative...da questa descrizione insiemistica si passa ad una possibile implementazione della classe in Java...tanto per spiegare meglio (ma non è importante ai fini della domanda) in questo caso io dico:
V(codice_articolo) = {un singolo articolo in vendita in un negozio} dove tra () ho messo "codice_articolo" in quanto ogni articolo DIPENDE dal suo codice che lo identifica univocamente.
O = 1) accesso in lettura al campo nome, 2) accesso in lettura al campo costo, 3) accesso in lettura al campo codice articolo
C = 0 (insieme vuoi --> non ci sono costanti significative da rappresentare nella mia classe)
Passo quindi a sviluppare una possibile implementazione in JAVA, dal fatto che in questo tipo astratto ho V(codice_articolo) si deduce che ogni oggetto dipende da un codice che lo identifica in maniera univoca --> nell'implementazione pratica scelto di rappresentare il codice da attribuire al prossimo oggetto creato tramite una variabile di classe che incremento ogni volta che creo un oggetto.
Ed in pratica il mio codice commentato è questo:
public class Articolo{
/* Dichiaro una variabile int di classe che conterrà l'ID da attribuire al prossimo oggetto di tipo Articolo creato e la
inizializzo a 0 perchè così il primo oggetto creato avrà ID pari a 0 */
private static int nextObjectID = 0;
// Variaili di istanza
String nome = null; // Conterrà il nome dell'articolo rappresentato
double costo; // Conterrà il costo dell'articolo rappresentato
int ID; // Conterrà l'ID che identifica univocamente l'oggetto creato
/** COSTRUTTORE: Crea un oggetto di tipo Articolo.
@param name di tipo String
@param cost di tipo double
@return il riferimento ad un oggetto di tipo Articolo */
public Articolo(String name, double cost){
nome = name; // Mette il riferimento alla stringa name nella variabile nome
costo = cost; // Copia il valore double di cost dentro la variabile costo
ID = Articolo.nextObjectID; // Copia il valore della variabile di classe dentro al campo ID dell'ogetto creato
Articolo.nextObjectID ++; // Incrementa di 1 la variabile di classe, così il prossimo oggetto che sarà creato avrà l'ID successivo
}
/* METODI DI ACCESSO */
/** getNome() Restituisce il valore del campo nome dell'oggetto ricevente
@param void
@return il riferimento alla stringa nel campo nome dell'oggetto ricevente */
public String getNome(){
return nome;
}
/** getCosto() Restituisce il valore del campo costo dell'oggetto ricevente
@param void
@return il riferimento al valore double nel campo costo dell'oggetto ricevente */
public double getCosto(){
return costo;
}
/** getID() Restituisce il valore del campo ID che identifica univocamente l'oggetto ricevente
@param void
@return il riferimento al valore int nel campo ID dell'oggetto ricevente */
public int getID(){
return ID;
}
}
Dite che può andar bene? me lo avrebbero dato per buono?
La cosa che mi preoccupa di più è se può essere valida la mia idea di rappresentare l'ID univoco del prossimo oggetto da creare come una variabile di classe intera (nextObjectID) ed assegnare tale valore al campo ID dell'oggetto appena creato, per poi incrementare di 1 la variabile di classe...
Che ne pensate? L'esame è tra pochissimi giorni e sono un bel po' preoccupato...
Grazie
Andrea
Problema 1. Si richiede il progetto di un tipo astratto di dati Articolo che rappresenta e gestisce i
singoli articoli presenti in un negozio. Il tipo di dati Articolo deve rappresentare il nome
dell’articolo (es. sapone) ed il suo costo unitario. Inoltre, ad ogni articolo deve essere associato il
codice dell’articolo: esso è univoco (non esistono due articoli con lo stesso codice). Le operazioni
richieste per il tipo di dati sono quelle di accesso in lettura alle informazioni rappresentate.
Problema 2. Si richiede l’implementazione del tipo astratto Articolo in linguaggio Java.
Il punto 1 non ha nulla a che fare con i tipi abstract...è una pippa mentale della proff di analisi pre implementazione...praticamente vuole che definiamo 3 insiemi.
Un insieme V che descrive gli oggetti rappresentati dal mio tipo di dato. Un insieme O che rappresenta le operazioni su tali oggetti ed un insieme C che rappresenta possibili costanti significative...da questa descrizione insiemistica si passa ad una possibile implementazione della classe in Java...tanto per spiegare meglio (ma non è importante ai fini della domanda) in questo caso io dico:
V(codice_articolo) = {un singolo articolo in vendita in un negozio} dove tra () ho messo "codice_articolo" in quanto ogni articolo DIPENDE dal suo codice che lo identifica univocamente.
O = 1) accesso in lettura al campo nome, 2) accesso in lettura al campo costo, 3) accesso in lettura al campo codice articolo
C = 0 (insieme vuoi --> non ci sono costanti significative da rappresentare nella mia classe)
Passo quindi a sviluppare una possibile implementazione in JAVA, dal fatto che in questo tipo astratto ho V(codice_articolo) si deduce che ogni oggetto dipende da un codice che lo identifica in maniera univoca --> nell'implementazione pratica scelto di rappresentare il codice da attribuire al prossimo oggetto creato tramite una variabile di classe che incremento ogni volta che creo un oggetto.
Ed in pratica il mio codice commentato è questo:
public class Articolo{
/* Dichiaro una variabile int di classe che conterrà l'ID da attribuire al prossimo oggetto di tipo Articolo creato e la
inizializzo a 0 perchè così il primo oggetto creato avrà ID pari a 0 */
private static int nextObjectID = 0;
// Variaili di istanza
String nome = null; // Conterrà il nome dell'articolo rappresentato
double costo; // Conterrà il costo dell'articolo rappresentato
int ID; // Conterrà l'ID che identifica univocamente l'oggetto creato
/** COSTRUTTORE: Crea un oggetto di tipo Articolo.
@param name di tipo String
@param cost di tipo double
@return il riferimento ad un oggetto di tipo Articolo */
public Articolo(String name, double cost){
nome = name; // Mette il riferimento alla stringa name nella variabile nome
costo = cost; // Copia il valore double di cost dentro la variabile costo
ID = Articolo.nextObjectID; // Copia il valore della variabile di classe dentro al campo ID dell'ogetto creato
Articolo.nextObjectID ++; // Incrementa di 1 la variabile di classe, così il prossimo oggetto che sarà creato avrà l'ID successivo
}
/* METODI DI ACCESSO */
/** getNome() Restituisce il valore del campo nome dell'oggetto ricevente
@param void
@return il riferimento alla stringa nel campo nome dell'oggetto ricevente */
public String getNome(){
return nome;
}
/** getCosto() Restituisce il valore del campo costo dell'oggetto ricevente
@param void
@return il riferimento al valore double nel campo costo dell'oggetto ricevente */
public double getCosto(){
return costo;
}
/** getID() Restituisce il valore del campo ID che identifica univocamente l'oggetto ricevente
@param void
@return il riferimento al valore int nel campo ID dell'oggetto ricevente */
public int getID(){
return ID;
}
}
Dite che può andar bene? me lo avrebbero dato per buono?
La cosa che mi preoccupa di più è se può essere valida la mia idea di rappresentare l'ID univoco del prossimo oggetto da creare come una variabile di classe intera (nextObjectID) ed assegnare tale valore al campo ID dell'oggetto appena creato, per poi incrementare di 1 la variabile di classe...
Che ne pensate? L'esame è tra pochissimi giorni e sono un bel po' preoccupato...
Grazie
Andrea