L'informatico di Schrödinger

cat
7Dec/10Off

Java: Programmazione ad Oggetti (Parte 1)

Dopo i 4 post introduttivi siamo giunti a dover affrontare quello che senza remore è possibile definire l'argomento "chiave" della nostra trattazione.

In questo articolo riprenderemo i concetti visti, per ora solo a livello teorico, relativi alla programmazione ad oggetti e cercheremo di dargli una sostanza tramite un semplice esempio.

Ovviamente l'argomento è molto esteso e per questo verrà spezzato su più articoli in modo da potersi concentrare di volta in volta su pochi essenziali dettagli.

Per iniziare la trattazione abbiamo necessità di un entità da modellare: come abbiamo detto una classe in Java modella una tipologia di oggetti ed è quindi  normale aspettarsi un approccio che sia riconducibile all'esperienza del quotidiano. Prendiamo come esempio l'entità Persona e vediamo come potremmo descriverla in Java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class Persona{
 
    String nome,cognome;
    int eta;
 
    public Persona(){}
 
    public Persona(String nome,String cognome,int eta){
        this.nome=nome;
        this.cognome=cognome;
        this.eta=eta;
    }
 
    public void setNome(String nome){
        this.nome=nome;
    }
 
    public void setCognome(String cognome){
        this.cognome=cognome;
    }
 
    public void setEta(int eta){
        this.eta=eta;
    }
 
    public String getNome(){
        return this.nome;
    }
 
    public String getCognome(){
        return this.cognome;
    }
 
    public int getEta(){
        return this.eta;
    }
 
    public String toString(){
        return this.getNome()+" "+this.getCognome()+" "+this.getEta();
    }
 
}

Questa classe, seppur minimale, ci consente già di iniziare a analizzare quelli che saranno gli aspetti basilari della programmazione ad oggetti: le variabili di istanza, i costruttori, i metodi di istanza e la keyword this.

Innanzitutto diamo un occhio alla struttura del codice presentato: una classe (che, nel nostro caso, deve necessariamente essere salvata in un file dal nome Persona.java - abbiamo già visto questa convenzione in un articolo precedente) contiene il codice che la definisce all'interno di un "blocco" che ne dichiara il nome - e quindi il Tipo - (class Persona{...}).

All'interno di questo blocco principale possiamo notare subito la presenza di due entità ben distinte:

  • dichiarazioni di variabili (nel nostro caso: String nome,cognome; int eta;)
  • definizioni di metodo

Variabili di Istanza

Le variabili che abbiamo dichiarato sono chiamate "variabili di istanza" poiché il loro valore è legato a ciascuna diversa istanza della classe a cui appartengono; in contrapposizione alle variabili di istanza si pongono le variabili di "classe" ovvero variabili il cui valore non è legato alla singola istanza ma dipende, in qualche modo, dalla classe stessa. Vedremo successivamente (nel prossimo articolo) questa seconda tipologia di variabili con un esempio chiarificatore.

Metodi

I metodi definiscono il modo con cui possiamo maneggiare ciascun oggetto del tipo definito dalla nostra classe: tramite un metodo possiamo cambiare lo stato dell'oggetto, ottenerne informazioni e compiere operazioni sullo stesso.
La "firma" (signature) di un metodo è così caratterizzata:

1
public Tipo_del_risultato nomeDelMetodo(Tipo1 Parametro1, Tipo2...)

Tralascio volutamente, per ora, il significato della keyword "public".
Come si vede la firma specifica sia il Tipo del risultato restituito a seguito dell'invocazione del metodo (si usa il tipo void se il metodo non ritorna alcun valore) sia i parametri che prende in ingresso (definendone il Tipo esatto).

Una tipologia particolare di Metodi sono quelli che noi chiamiamo "Costruttori". Un costruttore è un metodo che nella sua firma non contiene un Tipo che specifichi il risultato da restituire e che ha come nome quello della classe in cui è definito.
I costruttori sono i metodi che vengono invocati (vedremo a breve come) per creare ed inizializzare un oggetto della nostra classe. Nell'esempio ho riportato 2 costruttori: uno che non prende parametri in ingresso (si limita quindi a creare un oggetto senza inizializzarne le variabili di istanza) e uno che invece prende in input dei valori che poi andrà ad assegnare alle sue variabili.

This

All'interno del codice presentato avrete notato che più volte ho fatto uso della keyword "this": tale keyword identifica la particolare istanza dell'oggetto di cui stiamo definendo le funzionalità. Ovviamente this può essere utilizzata esclusivamente all'interno di un oggetto per riferirsi a variabili e metodi appartenenti allo stesso.

Bene adesso per concludere vediamo come possiamo "istanziare" la nostra classe.

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args){
 
    Persona uno = new Persona();
    uno.setNome("Giulio");
    uno.setCognome("Rossetti");
    uno.setEta(26);
 
    Persona due = new Persona("Mario","Rossi",25);
 
    System.out.println(uno.toString());
    System.out.println(due.toString());
}

In questo esempio si vede come è possibile creare due istanze diverse di Persona (utilizzando i due costruttori) e come sia possibile invocare alcuni dei metodi della classe e stamparne una descrizione a video.

La keyword "new" è utilizzata insieme al costruttore per istanziare un oggetto della nostra classe utilizzando la sintassi:

1
Tipo_classe nome_istanza = new Costruttore_Classe(Parametri);

Come potete notare non è necessario specificare il Tipo dei parametri durante la fase di invocazione di un metodo (effettuata tramite nome_istanza.nome_metodo(parametri) ) poiché questi sono già specificati nella sua "firma" presente nella definizione della classe.

Bene direi che per questo articolo può bastare.. nella prossima puntata vedremo le variabili e i metodi di classe.

Stay Tuned!

Enhanced by Zemanta
Comments (0) Trackbacks (0)

Sorry, the comment form is closed at this time.

Trackbacks are disabled.