PROGRAMMIAMO
JS - Anagrafe di persone
Un archivio anagrafico con gli oggetti

Vediamo ora un altro esempio nel quale l'uso degli oggetti presenta vantaggi. Supponiamo di voler costruire un archivio contenente i dati anagrafici di persone (nome, cognome, residenza, etc).

Chiaramente definire tutte queste informazioni come variabili singole produrrebbe una programmazione piuttosto confusa. Molto meglio raggruppare tutto quanto nella definizione di un oggetto. Supponiamo dapprima di voler registrare solo nome, cognome, sesso e recapito telefonico della persona. A questo scopo potremmo dichiarare un oggetto come nell'esempio qui sotto:

var persona = { 
    nome: "",
    cognome: "",
    sesso: "",
    telefono: "",
};

Tutte le proprietà dell'oggetto sono state inizializzate con stringhe vuote. Ciò ha semplicemente lo scopo di fornire un valore iniziale valido alle proprietà stesse. Poi i valori effettivi potranno essere assegnati da programma, come per esempio:

persona.nome = "Mario";
persona.cognome = "Rossi";
persona.sesso = "M";
persona.telefono = "02778800";

Se vogliamo arricchire i nostri dati anagrafici possiamo aggiungere per esempio l'indirizzo di residenza e la data e il luogo di nascita. Per questi dati possiamo usare due oggetti nested, annidati gerarchicamente nell'oggetto principale persona, come mostra l'esempio:

var persona = { 
    nome: "",
    cognome: "",
    sesso: "",
    telefono: "",
    indirizzo: {
        via: "",
        numero: "",
        CAP: ""
    	},
    nascita: {
    	mese: "",
	giorno: "",
    	anno: "",
    	CAP: ""
    	},
};

Anche in questo caso i valori sono stati inizializzati con stringhe vuote. L'inizializzazione con i valori effettivi avviene da programma, per esempio:

persona.indirizzo.via = "Corso Italia";
persona.indirizzo.numero = 22;
persona.indirizzo.CAP = 16100;
persona.nascita.giorno = 4;
persona.nascita.mese = 10;
persona.nascita.anno = 1995;
persona.nascita.CAP = 18038;

Si noti che alcune proprietà sono state inizializzate con valori numerici, invece che con stringhe. Ciò è corretto, dal momento che, come sappiamo, le variabili in JS non sono tipizzate. Inoltre si osservi che persona.indirizzo.CAP e persona.nascita.CAP sono due proprietà omonime che però si riferiscono ad oggetti diversi e dunque possono assumere valori diversi.

Aggiungiamo i metodi

Oltre alle proprietà al nostro oggetto possono essere aggiunti dei metodi. A titolo di esempio ne vediamo due: uno che calcola il codice fiscale e l'altro che calcola l'età in anni della persona:

var persona = { 
    nome: "",
    cognome: "",
    sesso: "",
    telefono: "",
    indirizzo: {
        via: "",
        numero: "",
        CAP: ""
    	},
    nascita: {
    	mese: "",
	giorno: "",
    	anno: "",
    	CAP: ""
    	},
   codiceFiscale: function() 
      {
      // istruzioni per il calcolo
      },
   calcolaAnni: function() 
      {
      // istruzioni per il calcolo
      },  
};

Questi metodi potranno essere quindi utilizzati per ricavare ad esempio il codice fiscale in questo modo:

Codice = persona.codiceFiscale();

Possiamo utilizzare i metodi per l'inserimento dei dati, aggiungendo per esempio un metodo di nome input al nostro oggetto (sono stati usati i nomi inglesi per i parametri per evitare confusione, ma avremmo potuto benissimo chiamarli nome, cognome etc come le corrispondenti proprietà dell'oggetto):

var persona = { 
    nome: "",
    cognome: "",
    sesso: "",
    telefono: "",
    indirizzo: {
        via: "",
        numero: "",
        CAP: ""
    	},
    nascita: {
    	mese: "",
	giorno: "",
    	anno: "",
    	CAP: ""
    	},
   codiceFiscale: function() 
      {
      // istruzioni per il calcolo
      },
   calcolaAnni: function() 
      {
      // istruzioni per il calcolo
      },  
  input: function(name,surname,sex,street,number,CAP1,day,month,year,CAP2)
      {
      // istruzioni
      }
};

Il metodo input potrà essere usato per esempio nel seguente modo;

persona.input("Mario","Rossi","M","Corso Italia",22,16100,4,10,1995,18038);

Qual è il vantaggio rispetto all'inserimento diretto dei valori? Per esempio il metodo input potrebbe controllare la correttezza formale dei dati inseriti (es. che il mese non sia maggiore di 12) o implementare altri meccanismi per la protezione dei dati dell'oggetto.

Dichiariamo una classe e poi un vettore di oggetti

Infine possiamo trasformare il nostro oggetto nella dichiarazione di una Class:

class Persone { 
		constructor() 
			{ 
			this.nome = ""; 
			this.cognome = ""; 
			this.sesso = ""; 
			this.telefono = ""; 
			this.indirizzo = { via: ""; numero: ""; CAP: "" }; 	
			this.nascita = { mese: ""; giorno: ""; anno: ""; CAP: "" }; 
			} 
		codiceFiscale() { // istruzioni per il calcolo } 
		calcolaAnni() { // istruzioni per il calcolo } 
		input(name, surname, sex, street, number, CAP1, day, month, year, CAP2) 
			{ 
			// istruzioni } 
			} 
		}

In questo modo posso dichiarare un array di oggetti del tipo Persone:

var archivio = new Array();     //dichiara l'array
archivio.push(new Persone()); // crea un nuovo elemento (da ripetere per tutti gli elementi)

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it