DOMANDA costruttori Java, uso ed implementazioni

Ilyich

Utente Attivo
1,021
146
Audio
(in elaborazione)
Ciao a tutti ragazzi. E' da qualche mese che sto studiando Java partendo dalle basi, in precedenza ho fatto solo PHP e l'impatto con la programmazione ad oggetti è stato traumatico. Ho metabolizzato la distinzione tra classi, oggetti e metodi (e ci mancherebbe), non ho particolari problemi nell'uso delle funzioni, ma ho grossi problemi nel comprendere funzionamento e utilità dei costruttori, nonchè dei metodi get e set. Potreste darmi delle delucidazioni in materia? perchè sono bloccato, quando devo realizzare qualche semplicissimo programmino didattico vado nel pallone e non riesco più a comprendere cosa devo fare ed in quale ordine... grazie
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
ho grossi problemi nel comprendere funzionamento e utilità dei costruttori
Beh... i costruttori sono metodi "speciali", che vengono richiamati quando istanzi una classe. I costruttori hanno lo stesso nome della classe e non ritornano nulla.
Un costruttore tipicamente inizializza i campi dell'oggetto che vai a creare.
Se per esempio hai una classe "Voto" che contiene la coppia materia-voto:
Codice:
public class Voto(){
   private String materia;
   private int voto;

   public Voto (String materia, int voto){
      this.materia = materia;
      this.voto = voto;
   }

   public Voto(String materia){
      this.materia = materia;
   }
   
   public void setVoto(int voto){
      this.voto = voto;
   }
}
quando tu poi vai a creare un oggetto di tipo Voto potrai fare:
Codice:
Voto votoM = new Voto("Matematica", 8);
Voto votoI = new Voto("Italiano");
Voto votoX = new Voto();
Nei primo caso hai usato il primo costruttore passandogli il nome della materia e il voto relativo.
Nel secondo hai passato solo il nome della materia, quindi l'oggetto avrà settata la materia ma non il voto
Nel terzo caso non hai passato nulla ed è stato usato il costruttore standard che non inizializza nulla

I metodi get e set sono metodi accessori che accedono in lettura o scrittura ai campi della classe.
riprendendo l'esempio sopra, se poi scrivo:
Codice:
votoI.setVoto(7);
avrò settato il campo privato "voto" a 7.
I get, come puoi immaginare, altro non sono che metodi che ritornano valori interni alla classe.

Questo è l'uso più basilare dei get e set, oserei dire "banale"
 

Ilyich

Utente Attivo
1,021
146
Audio
(in elaborazione)
quindi, andando per ordine... get e set praticamente servono quando i membri vengono dichiarati private? in altri casi non sono utili?
nell'esempio citato sopra, se non avessi usato il costruttore, come avrei dovuto scrivere?
detto ancora più volgarmente, in cosa il costruttore ci fa risparmiare tempo e lavoro scrivendo il codice?
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
quindi, andando per ordine... get e set praticamente servono quando i membri vengono dichiarati private? in altri casi non sono utili?
In parole povere, si. Sono infatti definiti metodi "di accesso" ai campi di classe.
nell'esempio citato sopra, se non avessi usato il costruttore, come avrei dovuto scrivere?
Un costruttore esiste sempre, quello standard che non inizializza nulla.
Se tu non scrivi un costruttore per la tua classe, potrai usare solo il costruttore standard:
Codice:
Classe oggetto = new Classe();
e poi dovrai usare i metodi set (che devi aver scritto) per settare i valori.
detto ancora più volgarmente, in cosa il costruttore ci fa risparmiare tempo e lavoro scrivendo il codice?
Un costruttore serve a inizializzare un oggetto in base agli eventuali parametri che gli fornisci.
Non è solo una questione di risparmiare righe di codice, spesso è proprio una questione di funzionalità che è notevole nei casi in cui hai a che fare con classi con una gerarchia estesa. Alcune classi richiedono di essere inizializzate all'atto dell'istanziazione, per cui i costruttori si occupano di preparare l'oggetto per l'uso, e raramente ci si limita al solo inizializzare i campi interni.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!