Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Semplificare la gestione di più oggetti con parametri comuni

    Ciao a tutti, premetto che il titolo può disorientare un po', ma non sapevo come descrivere meglio la mia domanda.
    Mi sto preparando ad un esame di Java e, tra le tracce proposte, ho trovato un esercizio che chiede di scrivere un programma per la gestione di un'agenzia immobiliare, e quindi prevede la gestione di oggetti di tipo Villa, Appartamento, Locale Commerciale e così via. Questi tre oggetti hanno una decina di parametri in comune, più qualche altro parametro specifico per il tipo di oggetto. La mia domanda è quindi la seguente: come posso evitarmi una sfilata di String indirizzo, String città, double prezzo, e creare un oggetto "Immobile" da poter differenziare poi nel tipo che mi serve? Inizialmente avevo pensato ad una classe astratta, ma non ho idea di come creare un costruttore comune visto che le classi astratte non creano oggetti.
    Grazie mille a chi vorrà aiutarmi

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

    Re: [JAVA] Semplificare la gestione di più oggetti con parametri comuni

    Originariamente inviato da Wilde
    ho trovato un esercizio che chiede di scrivere un programma per la gestione di un'agenzia immobiliare, e quindi prevede la gestione di oggetti di tipo Villa, Appartamento, Locale Commerciale e così via. Questi tre oggetti hanno una decina di parametri in comune, più qualche altro parametro specifico per il tipo di oggetto. La mia domanda è quindi la seguente: come posso evitarmi una sfilata di String indirizzo, String città, double prezzo, e creare un oggetto "Immobile" da poter differenziare poi nel tipo che mi serve?
    Creando appunto una "gerarchia" di classi e sfruttando quindi la ereditarietà.

    Originariamente inviato da Wilde
    Inizialmente avevo pensato ad una classe astratta, ma non ho idea di come creare un costruttore comune visto che le classi astratte non creano oggetti.
    Una classe astratta non può essere istanziata, è vero. Ma può avere le stesse cose delle altre classi non astratte, compresi costruttori.

    La classe base avrà i suoi campi (che sono quindi comuni a tutte le sottoclassi) e potrebbe avere un costruttore che riceve tutti i valori da assegnare ai campi.
    Le sottoclassi potrebbero avere ognuna un costruttore specifico (i costruttori non si ereditano) che riceve tutti i parametri comuni più quelli specifici. Quelli comuni li passi al costruttore della superclasse con la invocazione super(.....)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie per la risposta.
    Intendi una cosa di questo genere?
    codice:
    public abstract class Immobile {
            public Immobile(double prezzo){
    		this.prezzo = prezzo;
    	}
    }
    codice:
     public class Villa extends Immobile {
    	public Villa(int stanze, int servizi, String garage, int piani, double prezzo){
    		super(prezzo);
    		this.stanze = stanze;
    		this.servizi = servizi;
                    .......
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Wilde
    Intendi una cosa di questo genere?
    Esatto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    In questo modo però non semplifico granchè la scrittura del codice, perchè sono comunque costretta a specificare i parametri del costruttore della superclasse in ogni sottoclasse. O mi sbaglio?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Wilde
    In questo modo però non semplifico granchè la scrittura del codice, perchè sono comunque costretta a specificare i parametri del costruttore della superclasse in ogni sottoclasse. O mi sbaglio?
    Sì ma è comunque solo 1 invocazione super(....) ed è il minimo/giusto che si può fare.

    La vera semplificazione (ed efficacia della ereditarietà) sta nel fatto che i campi comuni sono solo in 1 punto, come pure gli eventuali metodi getter/setter relativi a quei campi.

    Quindi non cercare semplificazioni dove non ha senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Era una sola invocazione super(...) nell'esempio che ho scritto, per l'esercizio vero e proprio sarebbero 9
    Comunque sei stato molto chiaro, ti ringrazio per la pazienza

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 © 2026 vBulletin Solutions, Inc. All rights reserved.