JavaScript/Oggetti

Wikibooks, manuali e libri di testo liberi.

Il concetto di oggetto è molto importante nella programmazione in JavaScript. In questo modulo verranno spiegate le caratteristiche comuni degli oggetti; nei moduli seguenti verranno invece trattati nel dettaglio gli oggetti intrinsechi di JavaScript.

L'uso degli oggetti e delle loro funzionalità entra a far parte del paradigma della programmazione orientata agli oggetti (abbreviata OOP, Object Oriented Programming)

Indice

[modifica] Cosa sono gli oggetti

Per avvicinarci al concetto di oggetto in informatica, possiamo pensare al concetto di oggetto nel mondo reale.
Per creare un nuovo oggetto è necessario partire da un modello (in JavaScript un oggetto chiamato prototipo) che indichi come creare altri oggetti dello stesso tipo (ogni oggetto è un'istanza del prototipo).

Gli oggetti possono inoltre possedere delle caratteristiche (proprietà): nel caso ad esempio di macchina (per fare un paragone con la realtà), saranno la cilindrata, le dimensioni, il costo, ecc....

Ciascuna istanza espone inoltre la possibilità di effettuare delle operazione su di essi (metodi): per la nostra macchina, metterla in moto o guidare. Queste operazioni modificheranno delle caratteristiche come il livello del suo carburante o la velocità.

Una volta introdotto il concetto di oggetto, dobbiamo avere però la capacità di astrarre: gli oggetti dell'informatica non corrispondono a quelli della realtà; hanno però numerosi vantaggi, tra i quali la possibilità di trattare dati più complessi di numeri e stringhe.

[modifica] Gli oggetti in JavaScript

JavaScript permette di creare i propri oggetti personalizzati; tuttavia noi lavoreremo solo su quelli predefiniti.

Per creare una nuova istanza di un oggetto è necessario utilizzare una funzione chiamata costruttore. Di fatto, in realtà, per definire un oggetto prototipo è quindi sufficiente creare un nuovo costruttore.

La sintassi quindi:

var variabile = new nome_oggetto ();

In questo modo la variabile variabile sarà l'unico modo per fare riferimento all'istanza di nome_oggetto appena creata.

I costruttori solitamente prevedono anche una serie di parametri per impostare automaticamente alcune proprietà dell'oggetto creato:

var variabile  = new nome_oggetto (parametri_del_costrutture);

Per fare un esempio con la nostra macchina:

var la_mia_macchina = new macchina ("Utilitaria", "Rosso");

Nell'esempio, il costruttore dell'oggetto macchina prevederà come parametri il tipo e il colore della macchina.

[modifica] Proprietà

Possiamo pensare ad una proprietà come ad una variabile associata al singolo oggetto; il suo valore viene attribuito inizialmente dal costruttore e successivamente viene modificato agendo sull'oggetto (operando sui metodi, ecc...). Per fare riferimento alla proprietà (per il recupero o per l'assegnazione) si usa la sintassi:

nome_oggetto.nome_proprietà

Alcune proprietà possono essere di sola lettura, cioè il loro valore può essere letto ma non modificato.

Con la nostra macchina:

alert('La mia macchina è lunga ' + la_mia_macchina.lunghezza + ' m!');

Come si potrà pensare, la proprietà lunghezza è di sola lettura.

[modifica] Metodi

Un metodo è una funzione associata al singolo oggetto e definito nel costruttore; se nel prototipo è prevista una funzione metodo_esempio sarà possibile eseguire la funzione tramite la sintassi:

nome_oggetto.metodo_esempio () //ricordarsi le parentesi anche se non passiamo parametri!

Dal momento che le funzioni possono prevedere un valore di ritorno, sarà possibile inserire la notazione vista precedentemente all'intero di un'espressione.

Ad esempio, con la nostra macchina:

la_mia_macchina.rifornisci (20) //20 euro di benzina

[modifica] La struttura with

Quando si lavora con gli oggetti, può risultare comodo il costrutto with, che permette di accedere più volte ad un oggetto senza dover ogni volta specificare il suo nome. Ad esempio:

with (la_mia_macchina) {
 .rifornisci (20) //20 euro di benzina
 alert(.lunghezza); //ricordarsi l'uso del punto!
 altra_macchina.rifornisci(50); //per riferirmi ad altri oggetti devo indicare il loro nome
} //qui si conclude il blocco with

Strumenti personali