Domanda Risolto Variabile globale gestibile da classi diverse e non collegate se non dallo stesso package

inforge-user001

Utente Jade
28 Marzo 2020
557
61
2,314
732
Salve a tutti inforgiani sto creando un programma che possa gestire un ristorante. (è un esercizio didattico non "reale")
Quindi ho un tipo 'Ristorante' che gestisce diversi ordini
Quindi ho un tipo 'Ordine' che è l'insieme di tutti i prodotti inseriti in un ordine.
Quindi ho un tipo 'Prodotto' che come dato ha 'codiceIdUnivoco' descrizione e costo.

Ciò che m'interessa sapere e ciò che vi chiedo è se c'è la possibilità di avere un ArrayList gestibile da tutti i file ed editabile da tutti i file, ma solo all'interno dello stesso package.

Devo creare per ogni prodotto un codiceIdUnivoco e avevo anche pensato a creare un metodo generaId ma se lo mettessi in Ordine avrebbe validità solo per quell'ordine e se lo mettessi in Ristorande non sarebbe fattibile perché aggiungo tanti prodotti ad un ordine e non posso fare un iterazione per volta...

N.B. Gestisco al più un ristorante.

Ho sentito parlare di variabili globali ma a lezione non l'abbiamo fatte.
Come potrei risolvere?
Esiste qualcosa di più utile e diverso dalla mia idea?
Grazie in anticipo a chiunque risponderà e scusate se la mia domanda risulta essere banale :ruloz:
 
È sbagliata l'idea di avere una variabile globale. Non usarle mai!
Ogni classe deve fare quello che gli compete niente di più, niente di meno.
Partiamo da prodotto: avrà gli attributi (è buona norma metterli privati e usare i getters e setters se serve che classi esterne vi accedano) che hai scritto.
Ordine, ha una lista di prodotti, quindi potrebbe essere un ArrayList di prodotti.
Il ristorante ha una lista di ordini, quindi dovrebbe avere una ArrayList di ordini. Inoltre, siccome il ristorante offre dei prodotti, dovrebbe avere una lista di prodotti che offre e qui puoi gestire il codice univoco a livello di ristorante.
Non capisco la frase "non sarebbe fattibile perché aggiungo tanti prodotti ad un ordine e non posso fare un iterazione per volta..."

Altro dettaglio: siccome i prodotti sono identificati da un codice univoco, sarebbe più corretto usare una Map, oppure un Set (avendo avuto l'accortezza di fare override nel modo corretto sul metodo equals)
 
È sbagliata l'idea di avere una variabile globale. Non usarle mai!
Ogni classe deve fare quello che gli compete niente di più, niente di meno.
Partiamo da prodotto: avrà gli attributi (è buona norma metterli privati e usare i getters e setters se serve che classi esterne vi accedano) che hai scritto.
Ordine, ha una lista di prodotti, quindi potrebbe essere un ArrayList di prodotti.
Il ristorante ha una lista di ordini, quindi dovrebbe avere una ArrayList di ordini. Inoltre, siccome il ristorante offre dei prodotti, dovrebbe avere una lista di prodotti che offre e qui puoi gestire il codice univoco a livello di ristorante.
Non capisco la frase "non sarebbe fattibile perché aggiungo tanti prodotti ad un ordine e non posso fare un iterazione per volta..."

Altro dettaglio: siccome i prodotti sono identificati da un codice univoco, sarebbe più corretto usare una Map, oppure un Set (avendo avuto l'accortezza di fare override nel modo corretto sul metodo equals)
Ciao! Io avevo già fatto come dici tu però la mia domanda è un altra... credo che la risposta alla mia domanda sia proprio l'altro dettaglio xD vorrei usare una map però dovrei averla in ristorante perché ogni prodotto di ogni ordine deve avere un id differente.
Il problema, e la domanda che facevo sin dall'inizio, è proprio il fatto che come faccio a gestire una map creata in ristorante, ma usata e settata nel prodotto?

Provo a spiegarmi con parole più semplici...
Io ho un dato in ristorante che racchiude tutti sti id
Un id viene aggiunto tramite un oggetto prodotto, il quale viene creato e settato all'interno di un altra classe ancora che non è collegata direttamente al ristorante...

Non mi riesco a spiegare bene scusami :boh:
 
Ciò che m'interessa sapere e ciò che vi chiedo è se c'è la possibilità di avere un ArrayList gestibile da tutti i file ed editabile da tutti i file, ma solo all'interno dello stesso package.
È possibile, ma non è una bella soluzione. A lezione non avete studiato le variabili globali perché in Java non esistono, ma si può fare qualcosa di molto simile (e altrettanto brutto).

Devo creare per ogni prodotto un codiceIdUnivoco
Java:
public class Prodotto {
  private static int _id = 0;

  public final int id;
  public final String description;
  public final double price; // sarebbe meglio avere una classe Euro

  public Prodotto(String description, double price) {
    id = _id++;
    this.description = description;
    this.price = price;
  }
}

Io eviterei di usare gli ID, secondo me non servono (amenoché non sia stato imposto dal tuo professore), ma non ho capito i requisiti (cosa deve fare, non come deve farlo) dell'applicazione quindi evito di sbilanciarmi su consigli per una possibile implementazione.
 
Io eviterei di usare gli ID, secondo me non servono (amenoché non sia stato imposto dal tuo professore), ma non ho capito i requisiti (cosa deve fare, non come deve farlo) dell'applicazione quindi evito di sbilanciarmi su consigli per una possibile implementazione.

Io neanche sono "a favore" degli id ma, come hai ben intuito, è richiesto dal professore... Per evitare ulteriori dubbi vi lascio la traccia... (Non la carico tutta per evitare possibili lamentele)

Codice:
Realizzare una classe Ristorante che gestisca gli ordini di un ristorante. Un ordine contiene: un id
progressivo dell’ordine (da generare automaticamente), il nome del cliente che ha effettuato l’ordine, l’id
dei prodotti da ordinare, e il prezzo totale dell’ordine. Un prodotto contiene un identificativo univoco del
prodotto, la descrizione e il prezzo.
La classe Ristorante deve contenere almeno i seguenti metodi:
- scegliAzione(): usando il metodo showInputDialog della classe JOptionPane permette all’utente di
scegliere un’azione da fare tra:
1. Inserisci ordine; // inserisciOrdine()
2. Rimuovi ordine; // rimuoviOrdine()
3. Mostra ordine; // mostraOrdine()
4. Mostra ordini di un cliente; // mostraOrdiniDiUnCliente()
5. Termina.
 
Un id viene aggiunto tramite un oggetto prodotto, il quale viene creato e settato all'interno di un altra classe ancora che non è collegata direttamente al ristorante...

Non mi riesco a spiegare bene scusami :boh:

La Map la fai in ristorante. Il ristorante avrà un metodo pubblico addProdotto(chiave, prodotto). Quando l'oggetto prodotto viene creato, viene aggiunto nella classe Ristorante (la classe che crea il prodotto deve avere l'istanza di ristorante)

come faccio a gestire una map creata in ristorante, ma usata e settata nel prodotto?

Quindi la Map non viene usata e settata nel prodotto, nel prodotto hai le informazioni sul prodotto e basta
 
La Map la fai in ristorante. Il ristorante avrà un metodo pubblico addProdotto(chiave, prodotto). Quando l'oggetto prodotto viene creato, viene aggiunto nella classe Ristorante (la classe che crea il prodotto deve avere l'istanza di ristorante)



Quindi la Map non viene usata e settata nel prodotto, nel prodotto hai le informazioni sul prodotto e basta
Gran bella idea! Grazie!

*Sono nuovo* come si chiudono le discussioni su inforge?