Ciao,
a brevissimo avrò un esame che contiene anche JAVA (esame base...niente eccezioni, enumerazioni, etcetc)
L'esercizio dice:
roblema 1. Si richiede il progetto di una classe JAVA per rappresentre il tipo ArticoloInSupermercato che rappresenta e gestisce gli articoli in vendita in un supermercato. Ciascun articolo deve recare le informazioni relative al suo nome, al suo prezzo ed alla quantità presente nel negozio. Inoltre, ciascun articolo deve registrare anche il reparto del supermercato cui è assegnato (ad esempio, ortofrutta, macelleria, pulizia casa, ….).
I reparti caratterizzano completamente il supermercato e devono essere noti prima che la gestione degli articoli possa iniziare. Si osservi come, al momento della creazione di un oggetto di tipo , sia necessario controllare che esso appartenga ad un reparto presente nel supermercato.
Le operazioni richieste per il tipo di dato sono:
a) accesso (in lettura) alle caratteristiche di un oggetto;
b) test di uguaglianza di due oggetti;
c) rappresentazione di un oggetto in forma di stringa.
va bene questa classe Java che ho scritto? (poi avrei un problemino a ridefinire il metodo equals...se qualcuno mi dà una mano gliene sono grato.
Così come l'ho fatta può essere considerata logicamente corretta?codice:public class ArticoloInSupermercato{ private static String [] reparti = null; // Array di stringhe di classe: rappresenta i reparti del supermercato private String nome_Articolo; // Nome dell'articolo in vendita, inizialmente a ull private double prezzo_Articolo; // Prezzo dell'articolo in vendita private int quantita_Articolo; // Numero di oggetti in vendita per un certo articolo private int indice_Reparto; // Indice di identificazione del reparto nell'array di classe reparti /** METODO DI CLASSE Inizializza(): inizializza il vettore di classe di stringhe reparti con i nomi dei reparti presenti nel supermercato. @param un vettore di stringhe che contiene i nomi dei reparti del supermercato @return void */ public static void Inizializza(String [] T){ int i; if(reparti == null){ // Se la classe non è stata ancora inizializzata for(i=0; i<T.length; i++) reparti[i] = T[i]; // Copia i riferimenti alle stringhe del vettore parametro T nel vettore reparti } else System.err.println("ERRORE: La classe ArticoloInSupermercato è già stata inizializzata"); } /** COSTRUTTORE: Inizializza tutte le variabili di istanza e crea un nuovo oggetto istanza della classe. @param nome di tipo String @param prezzo di tipo double @param quantita di tipo int @param indice di tipo int @return il riferimento ad un oggetto di tipo ArticoloInSupermercato */ public ArticoloInSupermercato(String nome, double prezzo, int quantita, int indice){ if(reparti != null){ // Se la classe è già stata inizializzata crea l'oggetto ed inizializza le sue variabili di istanza nome_Articolo = nome; // Metti il riferimento della stringa nome in nome_Articolo prezzo_Articolo = prezzo; // Copia il valore double di prezzo in prezzo_Articolo quantita_Articolo = quantita; // Copia il valore int di quantita in quantita_Articolo indice_Reparto = indice; // Copia il valore int di indice in indice_Reparto } else // Altrimenti restituisci un messaqggio di errore e non fare nulla System.err.println("ERRORE: la classe non è stata ancora inizializzata, impossibile creare l'oggetto"); } /* METODI DI ACCESSO AI DATI: */ /** getNome: restituisce al chiamante il valore contenuto nel campo nome dell'oggetto ricevente @param void @return una stringa contenente il nome del prodotto */ public String getNome(){ return nome_Articolo; // Ritorna al chiamante il riferimento alla stringa contenente il nome dell'articolo } /** getPrezzo: restituisce al chiamante il valore contenuto nel campo prezzo dell'oggetto ricevente @param void @return una double contenente il prezzo del prodotto */ public double getPrezzo(){ return prezzo_Articolo; // Ritorna al chiamante il riferimento alla stringa contenente il nome dell'articolo } /** getQuantita: restituisce al chiamante il valore contenuto nel campo prezzo quantita dell'articolo @param void @return un int contenente il numero di prodotti per uno specifico articolo */ public int getQuantita(){ return quantita_Articolo; } /** getRepartp: restituisce al chiamante il valore rappresentante l'indice nell'array dei reparti del supermercato @param void @return un int che rappresenta l'indice nell'array dei reparti del supermercato */ public int getReparto(){ return indice_Reparto; } /* METODI DI UTILITA' */ /** METODO toSting: Restituisce al chiamante una stringa contenente i dati contenuti nelle variabili di istanza di un oggetto. @param void @return un oggetto di tipo String che contiene i dati delle variabili di istanza dell'oggetto ricevente sotto forma di stringa */ public String toString(){ String Risposta = "Il nome dell'articolo è: " + nome_Articolo + "Il prezzo è: " + prezzo_Articolo + "Nel supermercato ci sono tot pezzi: " + quantita_Articolo + "L'articolo appartiene al reparto: " + reparti[indice_Reparto]; return Risposta; } /** METODO EQUALS: ridefinisco il metodo equals per confrontare due oggetti istanza della classe ArticoliInSupermercato @parm prodotto di tipo ArticoloInSupermercato da confrontare con l'oggetto ricevente il messaggio @return esito di tipo boolean: TRUE se i due oggetti sono uguali, FALSE altrimenti. public boolean equals(ArticoloInSupermercato prodotto){ boolean esito = this.nome_Articolo == prodotto.getNome */ }
ho qualche dubbio sul fatto che avendo dichiarato la variabile nome_Articolo come String possano succedere casini ad esempio con il metodo getNome che ritorna al chiamante il riferimento a quella stringa...in teoria non credo che sia un problema in quanto le stringhe dovrebbero essere oggetti immutabili (nel senso che se provo a modificarlo non si modifica quella stringa ma se ne crea un'altra) quindi non dvorebbe fare problemi...
Il problema a scrivere il metodo equals() (che mi dovrebbe confrontare l'oggetto ricevente con l'oggetto referenziato dal parametro) sempre per quanto concerne le stringhe...come faccio a confrontare 2 stringhe?
se in tale metodo faccio:
this.nome_Articolo = Prodotto.nome_Articolo non stò semplicemente confrontando dei riferimenti a stringhe (e non le stringhe vere e proprie)...come posso implementarlo?
C'è qualche problema di sicurezza nella mia classe?
Per favore...l'esame si avvicina sempre più...
Tnx
Andrea

Rispondi quotando

