Eccoci con una nuova lezione del nostro corso completo di programmazione in Java. Nella lezione precedente abbiamo visto molte cose sull’object oriented e molto altro si potrebbe ancora dire. Tuttavia, crediamo sia meglio iniziare a “sporcarsi un po’ le mani” scrivendo un po’ di codice: in questo modo molti aspetti verranno chiariti strada facendo (e risulterà a voi tutti molto meno noioso 🙂 )
La nostra prima classe…
…non si scorda mai! Beh, speriamo di sì, perché non sarà nulla di significativo :-). Una classe in Java si scrive così:
class ClassName { constructor1 constructor2 . . . method1 method2 . . . field1 field2 . . . } |
Scriviamo una classe che modella l’entità Impiegato, la quale possiede un nome, uno stipendio e una data di assunzione:
public class Impiegato { private String nome; private double stipendio; private Date dataAssunzione; public Impiegato(String n, double s, Date d) { nome = n; stipendio = s; dataAssunzione = d; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public double getStipendio() { return stipendio; } public void setStipendio(double stipendio) { this.stipendio = stipendio; } public Date getDataAssunzione() { return dataAssunzione; } public void setDataAssunzione(Date dataAssunzione) { this.dataAssunzione = dataAssunzione; } } |
Facciamo a fette l’impiegato
Sezioniamo il codice appena scritto: nome, stipendio e dataAssunzione sono i cosiddetti field o membri della classe e, come potete vedere, possono essere a loro volta oggetti. Nella loro dichiarazione c’è un cosiddetto modificatore di visibilità: private. Tale parola chiave sta ad indicare che non è possibile accedere al valore di tali field (in lettura o scrittura) se non all’interno di uno dei metodi della classe Impiegato.
Un po’ di privacy!
I membri di una classe Java sono sempre private. Il motivo di questo è che, come abbiamo visto quando abbiamo parlato di UML e Object Orientation, l’information hiding è una feature vantaggiosa dei linguaggi OOP e i membri privati servono proprio a questo scopo.
Getter e Setter
Poiché nel codice esterno a Impiegato non abbiamo accesso a nome, stipendio e dataAssunzione per manipolare il loro valore abbiamo bisogno di due metodi di accesso, i cosiddetti getter (per leggere il valore di un field) e setter (per modificare il valore di un field); quando si vuole realizzare una proprietà in sola lettura viene implementato solo il getter. Il nome dato a questi metodi non è casuale: c’è una forte convenzione (specifica JavaBean) alle spalle che vi consiglio di seguire sempre alla lettera. In ogni caso in molti IDE potete fare generare i metodi getter e setter in modo automatico e sicuro: in Eclipse (che sarà l’IDE di riferimento durante questo corso Java) si creano accedendo al menu source -> Generate Getters and Setters…
Costruisci
Nella classe c’è un metodo molto speciale: il costruttore. E’ un metodo che ha lo stesso nome della classe in cui si trova e che viene invocato quando viene istanziato un oggetto del relativo tipo. Il nostro costruttore nello specifico ha parametri tali che per costruire un nuovo oggetto di tipo Impiegato dovremo obbligatoriamente fornire un nome, uno stipendio ed una data di assunzione: il codice all’interno del costruttore si occupa dell’inizializzazione dei relativi field.
Utilizzo dell’impiegato
Per creare una nuova istanza di Impiegato si usa la parola chiave new: io l’ho fatto nel main di una nuova classe ImpiegatoTest, creata allo scopo:
public class ImpiegatoTest { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(2004, 8, 29); Impiegato impiegato = new Impiegato("Manuele", 999.25, calendar.getTime()); System.out.println("Nuovo impiegato di nome " + impiegato.getNome() + " con stipendio di " + impiegato.getStipendio() + " e assunto nel " + impiegato.getDataAssunzione()); } } |
La classe Calendar entra spesso in gioco quando si ha a che fare con le date, nella fattispecie volevo impostare la data al 29 Settembre 2004. Per quanto riguarda il valore dello stipendio…beh, vale l’Information Hiding e 999.25 è un numero casuale :-). Per vedere come creare classi con supporto dell’IDE Eclipse e come lanciare in esecuzione un programma Java possiamo consultare il nostro post Hello World in Java.
Conclusioni
Adesso che abbiamo creato una nuova classe abbiamo una nuova tipologia di mattoncino Lego a nostra disposizione: lo possiamo creare, impostare e usare quindi il valore delle sue proprietà. Nel prossimo post vedremo come i metodi consentano alle nostre entità di compiere delle operazione, insieme ad altri aspetti dell’OOP di cui non abbiamo ancora parlato, come ad esempio l’ereditariertà
Alla prossima!
Ciao bel tutorial li ho seguiti tutti e in effetti scrivere e meno noioso che leggere 😛 continuate cosi!!
se posso darvi un feedback a me piacerebbe vedere un minimo di versione mobile perché anche se ho un galaxy tab le pubblicità o consigli ai margini danno fastidio e devo sempre zummare 😛 😉
Ciao e MI raccomando continuate cosi e fatte diventare la parte androide( più bella di ios
Volevo intanto farvi i complimenti per le ottime guide e segnalarvi un typo (abbastanza inutile ai fini della comprensione) nella classe ImpiegatoTest: la data immessa è 29 Agosto 2004 e non Settembre come si dice poco dopo.
bonimba,se provi il codice vedi che non è sbagliato,non sò perchè ma java inizia a caontare i mesi da 0,quindi l’ottavo mese sarebbe il 9,quindi settembre.
Ciao, stavo seguendo le vostre belle guide, ho fatto copia incolla degli esempi ma quando vado a compilare mi da questi errori (uso un semplice IDE chiamato geany). Sembra che ha problemi con la classe Date… PS ho installato openjdk 6…
Mi sapete aiutare?!
Impiegato.java:6: cannot find symbol
symbol : class Date
location: class Impiegato
private Date dataAssunzione;
^
Impiegato.java:8: cannot find symbol
symbol : class Date
location: class Impiegato
public Impiegato(String n, double s, Date d) {
^
Impiegato.java:30: cannot find symbol
symbol : class Date
location: class Impiegato
public Date getDataAssunzione() {
^
Impiegato.java:34: cannot find symbol
symbol : class Date
location: class Impiegato
public void setDataAssunzione(Date dataAssunzione) {
^
4 errors
Compilazione fallita.
Ciao,
ho provato a compilare il primo esempio,però c’è un errore.Alla linea
public class Impiegato {
mi dice “Illegal modifier for the legal class Impiegato; only abstract or final is permitted”.
Ho JDK 7.
PS: complimenti per la guida,è davvero ben fatta 😀