Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    Implementare una classe java...posso farlo o è una PORCATA?!

    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:

    codice:
    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Implementare una classe java...posso farlo o è una PORCATA?!

    Originariamente inviato da D4rkAng3l
    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...
    Se non ci sono questioni di thread-safety, direi che è accettabile come hai fatto (essendo oltretutto solo una cosa "didattica").

    Vedo che ci sono anche dei commenti javadoc. Solo alcune note:
    - se il metodo non ha parametri generalmente non si mette @param void
    - si tengono in linea gli asterischi a sinistra.

    In pratica:
    codice:
    /**
     * Restituisce il valore del campo nome dell'oggetto ricevente.
     *
     * @return il riferimento alla stringa nel campo nome dell'oggetto ricevente
     */
    public String getNome() {
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    E' il primo esame in cui usiamo java...e la thread sefty ho solo una vaga rimembranza di cosa sia dall'esame di sistemi operativi che trattò questi argomenti solo in maniera teorica...spero che alla proff vada bene sta cosa...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Oddio dopo viene il secondo punto dell'esame che mi stà mettendo veramente in grave crisi...non sò proprio dove sbattere la testa...devo realizzare un'altra classe Negozio che usi la classe Articolo appena costruita: Il testo dice:

    Problema 3. Si richiede il progetto di un tipo astratto di dati Negozio che rappresenta e gestisce gli
    insiemi di articoli presenti in un negozio. Per ciascun elemento dell’insieme, il tipo di dati Negozio
    deve rappresentare l’articolo (es. <sapone, 1 euro, codice 5>) e la quantità presente nel negozio. Le
    operazioni richieste per il tipo di dati sono quelle di accesso in lettura alle informazioni
    rappresentate e di modifica della quantità di un articolo presente in negozio.

    Problema 4. Si richiede l’implementazione del tipo astratto Negozio in linguaggio Java.


    Ho vari dubbi: che vuol dire secondo te: " Si richiede il progetto di un tipo astratto di dati Negozio che rappresenta e gestisce gli insiemi di articoli presenti in un negozio." ?!?!?

    Un insieme di articoli è qualcosa del tipo: < <sapone, 1 euro, codice 5>, 100 pezzi> ?!?!

    oppure una collezione di oggetti come questo?!?!
    Se intendesse la prima ipotesi da me fatta, vabè sarebbe abbastanza semplice...stò incapsulando il tipo di dato Articolo dentro un nuovo tipo di dato Negozio che contiene un oggetto di tipo Articolo + un campo che specifica la quantità di pezzi relativi a quell'articolo sono presenti in negozio.

    Se invece mi si stesse chiedendo di implementare un tipo di dato che rappresenta collezioni di tali oggetti...credo che dovrei prima rappresentare un tipo di dati per < <sapone, 1 euro, codice 5>, 100 pezzi> da incapsulare a stua volta nel tipo Negozio che mi gestisce in qualche modo la collezione...ma dovrei scrivere 2 classi e non andrebbe bene ai fini del compito.

    Secondo te mi stanno chiedendo di rappresentare banalmente la prima ipotesi che ho fatto?

    Please give me your opinion :-/

    Ciao
    Andrea

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da D4rkAng3l
    Se invece mi si stesse chiedendo di implementare un tipo di dato che rappresenta collezioni di tali oggetti...
    Sì ... direi questo (che ha più senso, mi sembra).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Originariamente inviato da andbin
    Sì ... direi questo (che ha più senso, mi sembra).
    mmm però la cosa che mi puzza è che è un primo esame di java ed è tutto molto meccanico...nel senso: mi si chiede di rappresentare un tipo di dato --> implemento una classe.

    Se dovessi rappresentare un tipo di dato che rappresenta la collezione dovrei:

    1) creare una classe che contine un oggetto Articolo ed una variabile intera per la quantità di quell'articolo
    2) Un'altra classe che implementa la collezione della classe 1)

    E dovrei realizzare per forza due classi (o sbaglio?)

    Poi leggendo il testo attentamente dice: Si richiede di proggetare il tipo astratto di dato Negozio (quindi una sola classe chiamata Negozio) che rappresenta e gestisce INSIEMI DI ARTICOLI presenti in un negozio. Per ciascun elemento dell'insieme, il tipo di dato Negozio deve rappresentare l'articolo (es: <sapone, 1 euro, codice 5>) e la quantità presentenel negozio.

    Quindi il V del mio tipo astratto dovrebbe essere:
    V = { {articoli in vendita in un supermercato}} in pratica una classe che mi rappresenta un insieme di articoli in un supermercato....dove credo che una cosa come {<sapone, 1 euro, codice 5>, 100 pezzi} sia un elemento di un insieme di articoli (100 pezzi di un certo articolo), implementando una collezione starei implementando un insieme di insiemi di articoli...o no?

    Però questo testo mi sembra un po' ambiguo...più che altro è il fatto che devo realizzare solo una singola classe Negozio e non più classi (anche perchè se implementassi Negozio come ho appena descritto...poi, ad esempio, nel main() potrei creare un array o un vector di tipo Negozio che mi rappresenta fisicamente il negozio con tutti i prodotti in vendita...o no?

    Io l'ho codificato così:

    codice:
    public class Negozio{
    
    	private Articolo prodotto;		// Dichiaro una variabile di tipo Articolo che rappresenta un campo dell'oggetto di tipo Negozio
    	private int numeroElementi;		// Rappresenta la quantità di elementi per un certo prodotto
    	
    	/** COSTRUTTORE: Crea un oggetto di tipo Negozio
    		@param il riferimento ad un oggetto di tipo Articolo
    		@param num di tipo int che rappresenta la quantità di elementi per quel particolare prodotto
    		@return il riferimento ad un oggetto di tipo Negozio */
    	
    	public Negozio(Articolo prod, int num){
    		prodotto = prod;		// Assegna il riferimento ad un oggetto di tipo Articolo alla variabile di istanza prodotto
    		numeroElementi = num;	// Copia il valore intero num nella variabile di istanza numeroElementi
    	}
    	
    	/* METODI DI UTILITAì */
    	
    	/** GetNomeProdotto(): restituisce il nome di un particolare prodotto contenuto nel negozio
    		@param void
    		@return: il riferimento ad una stringa contenente il nome del prodotto */
    	
    	String GetNomeProdotto(){
    		return prodotto.getNome();		// Uso il metodo GetNome() della classe Articolo per restituire il nome dell'oggetto prodotto istanza di Articolo
    	}
    	
    	/** GetCostoProdotto(): restituisce il costo di un particolare prodotto contenuto nel negozio
    		@param void
    		@return: il valore double contenente il costo del prodotto */
    	
    	double GetCostoProdotto(){
    		return prodotto.getCosto();		// Uso il metodo GetCosto() della classe Articolo per restituire il costo dell'oggetto prodotto istanza di Articolo
    	}
    	
    	/** GetIDProdotto(): restituisce l'ID di un particolare prodotto contenuto nel negozio
    		@param void
    		@return: il valore intero corrispondente all'ID univoco del prodotto */
    	
    	int GetIDProdotto(){
    		return prodotto.getID();		// Uso il metodo GetID() della classe Articolo per restituire l'ID dell'oggetto prodotto istanza di Articolo
    	}
    	
    	/** ModificaNumeroElementi(): modifica il numero di elementi di un certo oggetto di tipo Negozio
    		@param num di tipo int: rappresenta il nuovo numero di elementi da assegnare ad un oggetto ricevente di tipo Negozio
    		@return void */
    		
    	void ModificaNumeroElementi(int num){
    		this.numeroElementi = num;
    	}
    
    }
    Grazie
    Andrea

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Da quanto ho capito/intuito:
    a) Articolo descrive solo 1 articolo senza indicare alcuna quantità
    b) Negozio dovrebbe contenere una collezione di oggetti in cui ognuno rappresenta un Articolo più una quantità.

    Con queste premesse, si potrebbe fare (metto solo i campi, giusto per accorciare!):

    codice:
    class Articolo {
        private String nome;
        private double costo;
        private int id;
        // ...
    }
    
    class StockArticolo {
        private Articolo articolo;
        private int quantita;
        // ...
    }
    
    class Negozio {
        private ArrayList<StockArticolo> stockArticoli;    // o Vector o quello che ti pare ...
        // ...
    }
    Questo sì, secondo me ha senso.


    P.S. per curiosità: il testo dei problemi è esattamente, parola per parola, quello che ti è stato fornito?? Io 'sti enunciati di esercizi/esami li trovo sempre così "deprimenti" ... nonché spesso poco chiari. :ignore:
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Si il testo è esattamente quello...ed è per questo che mi puzza perchè quando lei chiede la creazione di 2 tipi di dato chiede la creazione di 2 classi e basta: altrimenti anche io avevo pensato appunto alle 3 classi: Articolo (descritta correttamente nel primo punto), stockArticolo e Negozio che implementa la collezione e gli operatori sulla collezione (per inserire o cancellare elementi)...però no...dice 2 tipi di dato quindi solo 2 classi.

    Poi lei è molto molto fiscale su sto cavolo di tipo astratto di dato che è la rappresentazione insiemistica di ciò che la classe rappresenta...e se proprio devono essere solo 2 classi e si pone particolare attenzioni al tipo astratto di dato si deduce che l'insieme V che rappresenta insiemisticamente gli elementi rappresentai dal tipo di dato (che poi sarà implementato con una possibile implementazione Java) è:

    V = { {articoli in un negozio di codice i}}

    Quindi gli elementi di V dovrebbero essere vari insiemi del tipo:

    < <sapone, 1 euro, codice 5>, 100 pezzi >
    < <lattuga, 2 euro, codice 8>, 50 pezzi >
    < <pomodori, 3 euro, codice 9>, 120 pezzi>
    ......
    ......
    ......

    Che sono degli insiemi di oggetti: un insieme di100 pezzi di tipo sapone con determinate caratteristiche, un insieme di 50 pezzi di tipo lattuga con certe caratteristiche, etcetc

    Se volesse una collezione di oggetti dentro V avrei avuto un insieme di insiemi...credo

    Però mi sembra tanto che:

    1) Il testo è poco chiaro
    2) Già che hai dato il testo poco chiaro è sadismo che uno si debba fare tutte ste seghe mentali sugli insiemi per interpretare il testo....
    3) Ma sta descrizione insiemistica a che azzo serve?!?! doh...tranne noi mi pare di aver capito che non l'ha studiata nessuno.,..quindi ho dei dubbi sull'effettiva utilità quando uno lavora
    4) Vabbè che è un esercizio da fare in 15 min all'esame ma darne uno un po' più sensato?

    VVoVe:

  9. #9
    potresti fare anche cosi:

    codice:
    public class Negozio
    {
        private Hashtable<Articolo, Integer> stockArticoli;
    
        ...
    }
    cosi' avresti due classi sole. Nella hashtable l'articolo e' il riferimento all'articolo, l'Integer e' quanti ce ne sono.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643
    Originariamente inviato da mxa
    potresti fare anche cosi:

    codice:
    public class Negozio
    {
        private Hashtable<Articolo, Integer> stockArticoli;
    
        ...
    }
    cosi' avresti due classi sole. Nella hashtable l'articolo e' il riferimento all'articolo, l'Integer e' quanti ce ne sono.
    doh è un esame base di java...manco l'ereditarietà o le eccezioni bisogna infilarci dentro...le hastable mi sembrano un pochino troppo avanzate per il corso :-P

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.