Gli oggetti in Processing

Per comprendere il concetto di oggetto in Processing (e, in generale, in Java e in tutti gli altri linguaggi di programmazione orientati agli oggetti) è necessario partire dal concetto di oggetto in generale. Un qualsiasi oggetto della vita reale è individuato da alcune caratteristiche: una persona ha un nome, un colore dei capelli, un'altezza, un peso, ecc.; un'automobile ha un colore, una velocità massima, una cilindrata, ecc.
Una volta individuate le caratteristiche comuni ad una determinata tipologia di oggetti, è possibile raggruppare tali caratteristiche fino a creare delle categorie astratte: una volta assodato che la mia automobile ha quattro ruote, un motore con una determinata cilindrata, un volante e dei pedali per l'accelerazione e il freno, così come la tua automobile e le automobili di tutti i nostri migliori amici, possiamo astrarre una categoria di oggetti denominata "automobile" alla quale appartengono la mia e la tua automobile, nonchè quelle degli amici; non vi appartengono altri oggetti come la mia e la tua bicicletta, le scarpe di Tizio o il pappagallino in vetrina nel negozio di animali sotto casa, perchè questi oggetti non hanno le caratteristiche necessarie ad essere qualificati come automobili. Ciascuna autovettura (la mia, la tua, quelle degli amici) presa singolarmente, costituirà invece un oggetto appartenente alla categoria "automobile".
In Processing le cose non cambiano, anzi, il concetto è forse ancora più semplice che nella vita reale, solo che non essendo noi dei freddi computer, spesso non sentiamo il bisogno di astrarre le caratteristiche di un oggetto fino a ridurle a quelle veramente essenziali. Un determinato oggetto, in Processing, viene definito istanza e la categoria alla quale appartiene è detta classe, mentre quelle che abbiamo definito caratteristiche sono detti campi. Così come la mia e la tua autovettura sono due diversi oggetti appartenenti alla stessa categoria 'automobile', così due oggetti diversi creati in Processing sono due istanze della medesima classe, ognuna con le sue caratteristiche che la rendono, almeno ipoteticamente, diversa da tutte le altre. Così come la mia auto è una Toyota targata AB 123 CD e quella del vicino è una Ferrari targata EF 456 GH, così, in un'ipotetico software che gestisce un'ananagrafica, Mario Rossi e Giuseppe Bianchi sono due istanze della medesima classe "Persona", con le proprietà che la logica di quell'ipotico software ha voluto che fosse contraddistinta (nome, cognome, data, luogo di nascita, ecc.).
Gli oggetti del mondo reale sono inoltre caratterizzati dall'avere un determinato comportamento. Tranne forse (forse) i soprammobili. Un'automobile, per esempio, è in grado di aumentare la velocità, frenare, cambiare marcia. Ognuno di questi comportamenti è peculiare degli oggetti che appartengono a una determinata categoria. P.es., quella di aumentare o diminuire la velocità a seconda della pressione sull'acceleratore da parte del guidatore, è una caratteristica degli oggetti appartenenti alla categoria 'automobile', non di quelli appartenenti alla categoria 'triciclo' o alla categoria 'frigorifero'. Ogni comportamento è, di solito, una procedura composta da più azioni. Se tu, guidatore, premi il pedale, il sistema di alimentazione dell'auto farà affluire una quantità maggiore di benzina al motore, dove i pistoni espleteranno un movimento periodico più frenetico, facendo girare più velocemente le ruote e quindi aumentando la velocità del veicolo. Anche le classi di Processing definiscono dei comportamenti (delle procedure: se è così fai questo... altrimenti quest'altro... per un numero di tot volte, ecc.) che caratterizzeranno ogni singola istanza di quella classe. Così nel nostro software che gestisce l'anagrafica, potremo avere un metodo per calcolare il codice fiscale, che potrà essere richiamato per ogni singola istanza della classe Persona (e che darà presumibilmente risultati diversi). Questi comportamenti, nella programmazione orientata agli oggetti, sono definiti metodi, e il risultato che producono (il codice fiscale nel nostro esempio) è detto tipo di ritorno.
Attraverso i metodi, inoltre gli oggetti comunicano tra loro. Se con la mia automobile supero i 150 km/h su una strada urbana controllata da un sistema di rilevazione automatico della velocità del traffico, l'oggetto (la mia automobile) "comunicherà" con un'altro oggetto (il sistema elettronico), il quale rileverà le determinate caratteristiche che contraddistinguono l'oggetto auto in quel determinato momento: targa e velocità. Ma il sistema elettronico delle multe non avrà il potere di cambiarmi la targa o la velocità a cui stavo viaggiando: avrà una procedura per fotografare, trasmettere i dati, ma non di intervenire sull'altro oggetto cambiandone le proprietà essenziali. D'altro canto, la mia auto non ha alcuna procedura per "lasciarsi cambiare" la targa o la velocità.  Così come nel mondo reale, in Processing gli oggetti devono comunicare, e cambiare il loro stato, attraverso i loro metodi. Tale principio è definito incapsulamento.

In Processing vi sono delle convenzioni. Le classi sono sempre indicate con l'iniziale maiuscola; le istanze con l'iniziale minuscola; i metodi con l'iniziale minuscola seguita da una coppia di parentesi (che possono essere vuote o contenere dei dati, detti parametri, chè il modello, cioè la classe, lo preveda).  Se i nomi sono composti da più parole, queste si scrivono attaccate tra loro con l'iniziale maiuscola. P.es. la mia automobile è una toyotaYaris, cioè un'istanza della classe Automobile contenente il metodo cambiaMarcia(seconda).
Per creare un oggetto si usa la parola chiave new in questa maniera:
Automobile toyotaYaris = new Automobile();
che significa: crea una variabile del tipo Automobile denominata toyotaYaris, destinata ad accogliere il nuovo oggetto che stiamo creando attraverso il richiamo di un particolare metodo -notare le parentesi - di quella classe; metodo definito costruttore e caratterizzato dal fatto, oltre che di portare lo stesso nome della classe (compresa la lettera maiuscola) e di non avere un tipo di ritorno, di essere richiamato solo una volta, e cioè all'atto della creazione dell'oggetto.
Una volta creato un oggetto potremo utilizzare i suoi metodi attraverso l'operatore punto ('.'). Così:
toyotaYaris.cambiaMarcia(seconda);
E per creare la classe (il modello da cui tutti gli oggetti derivano)? In tal caso si usa la parola chiave class. Continuando con il nostro esempio:
class Automobile {
...
}
In Processing ci sono comunque delle classi predefinite, quali String, PFont, PImage e PShade, che saranno però oggetto di un altro post.

Commenti

Etichette

Mostra di più