Capitolo 4
Strumenti informatici: Objective C, Swarm e Php
Per costruire un modello di simulazione è fondamentale
la conoscenza dell'informatica, la quale offre la possibilità di creare
il modello all'interno del computer. In questo capitolo sono presentati tre
strumenti informatici attraverso i quali è stato sviluppato il modello
di borsa Sum (e, in seguito, SumWeb). Sono due linguaggi di programmazione (Objective
C e Php) e una "biblioteca di codici informatici per la simulazione multi-agente
di sistemi complessi" (Swarm). Con Objective C e Swarm è stato costruito
Sum, con Php è stata realizzata l'interfaccia per gli umani di SumWeb.
Non si pretende di offrire una descrizione completa e dettagliata, ma semplicemente
una breve illustrazione delle principali caratteristiche di questi tre strumenti.
Per maggiori informazioni si rimanda ai numerosi manuali presenti in commercio
e on line.
Objective C è un linguaggio di programmazione nato dall'unione
di C e SmallTalk. E' un'evoluzione del suo famoso predecessore C, ma è
un linguaggio ad oggetti (come si intuisce dal nome). I linguaggi di programmazione
permettono di scrivere algoritmi interpretabili da un sistema di elaborazione.
Sono costituiti da un alfabeto e da un sistema di regole che devono essere rispettate
per scrivere programmi sinteticamente corretti. I linguaggi di alto livello
sono vicini al linguaggio naturale (inglese), non fanno riferimento ai registri
fisicamente presenti sulla macchina, ma a variabili. Per essere eseguiti devono
essere tradotti in linguaggio macchina, e tale traduzione viene fatta da un
programma chiamato compilatore. Analizzando i linguaggi di programmazione, bisogna
distinguere l'interfaccia del linguaggio dalla sua implementazione (funzionamento).
L'interfaccia è ciò che si può vedere di un'applicazione,
mentre l'implementazione è il funzionamento di questa.
Objective C è un sovrainsieme del C, cioè esso contiene al suo
interno l'intero C, uno dei più importanti linguaggi di programmazione
di tutta la storia dell'informatica; Objective C è una versione ad oggetti
del linguaggio C sviluppata nel 1984 da Brad Cox e adottata come strumento di
sviluppo dai sistemi NEXT (sistemi operativi basati su Unix). I file scritti
in linguaggio C ed i file scritti in linguaggio Objective C si distinguono per
l'estensione del file: un file in C ha estensione .c, mentre un file in Objective
C ha estensione .m. Ma, ovviamente, questa non è l'unica differenza.
La superiorità di Objective C è data dalla caratteristica di essere
un linguaggio di programmazione ad oggetti, il che lo rende molto più
potente. Il principio su cui si basa la programmazione ad oggetti è quello
di raggruppare informazioni relative al funzionamento di un'entità presente
nel programma, con le funzioni che vengono utilizzate da questa; il tutto prende
il nome di oggetto. All'interno di un oggetto sono definite, o meglio sono richiamate,
tutte le funzioni necessarie al suo funzionamento e queste sono unite all'interno
dell'oggetto stesso dalle informazioni (relative al suo funzionamento), che
lo caratterizzano. Il risultato di tale modo di costruire il programma è
quello di avere più oggetti creati uno distintamente dall'altro, con
ognuno la sua zona di memoria; tali oggetti possono essere messi in relazione
l'uno con l'altro attraverso sistemi gerarchici che possono essere molto articolati
e quindi permettono di strutturare e ricreare fenomeni reali complessi che altrimenti
sarebbe molto difficile gestire. La difficoltà di gestione che, attraverso
la programmazione ad oggetti viene superata, è dovuta al fatto che l'oggetto
viene creato dal programmatore con tutte le informazioni e le funzioni necessarie,
però tale oggetto, collegato con altri oggetti del programma, viene gestito
dall'ambiente stesso e non necessita del controllo del programmatore il quale
si deve limitare a costruirne la struttura ed a relazionarlo con le altre parti
del programma.
Un programma costruito con un linguaggio di programmazione ad oggetti è
sostanzialmente composto da un insieme di oggetti, ognuno dei quali ha un preciso
compito; il sistema di relazione tra i vari oggetti è gestito da messaggi
che i vari oggetti si scambiano comunicando tra loro; l'attivazione di tali
messaggi è operata grazie ai metodi che sono l'espressione informatica
di un funzionamento o di una funzione. Poiché ogni oggetto ha il suo
funzionamento, può interpretare differentemente dagli altri ogni messaggio
che riceve, il tutto sulla base della struttura propria di ogni oggetto.
In un linguaggio di programmazione tutti gli oggetti della stessa tipologia
appartengono a quella che viene denominata classe; la classe rappresenta un
prototipo di oggetto che può essere generato più volte per creare
tanti oggetti quanti si vuole. Gli oggetti facenti capo ad una stessa classe
devono possedere le stesse caratteristiche di comportamento ed utilizzare le
stesse funzioni; secondo questa logica, è possibile generare classi e
sottoclassi che importino le funzioni ed i comportamenti della classe origine
e poi si caratterizzino per ulteriori funzioni e comportamenti.
La programmazione ad oggetti ha quattro proprietà essenziali:
1) astrazione: il programma che descrive un oggetto è scritto in una
classe, poi nel programma principale, gli oggetti sono creati come esempi (instances)
della classe.
2) incapsulamento: gli oggetti nascondono i loro metodi e dati, separano l'interfaccia
dell'implementazione. Il codice contenente le istruzioni dirette all'oggetto
possono essere modificate senza dovere cambiare i programmi che usano l'oggetto.
I valori delle variabili nell'oggetto sono propri dell'oggetto. Devono essere
scritti per passare questa informazione all'esterno dell'oggetto.
3) eredità: ogni classe di oggetti può essere derivata da altre
classe già scritte. In questi casi, la classe "figlia" eredita
tutte le variabili e i metodi della classe "madre", li può
modificare e può aggiungerne altri.
4) polimorfismo: si possono avere metodi con lo stesso nome, ma che hanno parametri
diversi (si chiama anche overloading). Si noti, però, che Swarm non permette
il polimorfismo. I metodi creati in Swarm devono dunque avere nomi unici.
Vi sono alcune particolarità del linguaggio Objective C rispetto agli
altri linguaggi di programmazione ad oggetti. Innanzitutto la sintassi che lo
contraddistingue è molto simile a quella del linguaggio da cui è
originato, e questo ne rende più facile l'avvicinamento per chi già
conosce C (o C++, che è un altro linguaggio ad oggetti nato dopo Objective
C). Le proprietà degli oggetti descritte precedentemente valgono per
Objective C come per tutti gli altri linguaggi ad oggetti, ma usando il linguaggio
Objective C, le classi godono della proprietà additiva, e cioè
le classi che derivano da altre classi ne ereditano le funzioni ed i metodi.
Le classi sono definite in due differenti file (anche se i compilatori non lo
richiedono si segue questa convenzione per mantenere ordine e chiarezza nel
codice) che rappresentano aspetti differenti della stessa classe: l'interfaccia
che dichiara tutti i metodi e le variabili della classe (estensione .h), e l'implementazione,
tramite la quale si definiscono metodi e le variabili della classe (estensione
.m). Il file con estensione .h contiene i nomi di tutte le variabili e di tutti
i metodi che si intende richiamare nella classe in questione, mentre nel file
.m si inseriscono le regole di comportamento dell'oggetto stesso.
Il progetto Swarm (http://www.swarm.org),
termine che in italiano significa sciame (di consumatori, investitori, o di
formiche, pesci,
), è nato nel 1995, nel Santa Fe Institute (New
Mexico, U.S.A.). L'obiettivo era di creare un insieme di programmi e librerie
standard, da usare per simulare ed analizzare sistemi complessi di comportamento,
nell'ambito delle scienze naturali e sociali.
L'idea era di avere uno strumento che permetta ai ricercatori di sviluppare
le loro applicazioni senza dovere spendere tempo su problemi tipici di programmazione
informatica (per esempio, la generazione di grafici o di un'interfaccia grafica,
o i modi di salvare i risultati delle simulazioni). Inoltre, Swarm prevede una
struttura per simulazioni, un linguaggio comune che le rende riproducibili da
altri ricercatori.
Si tratta non tanto di un programma, quanto di una biblioteca di funzioni, sviluppate
tramite classi e metodi, secondo l'impostazione della programmazione a oggetti,
che utilizza classi astratte per realizzare esemplari (instances) specifici,
esemplari che reagiscono a ordini/messaggi (i metodi). Il tutto corredato da
un protocollo utile per utilizzare le classi in modo ben formato, scrivendo
in Objective C, ma è possibile anche in Java, le proprie applicazioni.
Da http://savannah.gnu.org/projects/swarm/
si legge che "Swarm è un nucleo informatico e una biblioteca di
codici informatici per la simulazione multi-agente di sistemi complessi. L'architettura
di base di Swarm consiste in una collezione di agenti interattivi in modo parallelo:
all'interno di tale architettura può quindi essere sviluppata una varietà
molto ampia di modelli basati su agenti."
Utilizzare Swarm per costruire un modello di simulazione significa scrivere
il codice di programmazione in un linguaggio di programmazione (Java, oppure
Objective C, come nel caso di Sum), dunque non Swarm, ma seguire un preciso
schema operativo che permetterà di sfruttare le potenzialità di
Swarm. Il primo oggetto ad essere creato deve essere l'Observer, il quale crea
a sua volta l'interfaccia utente ed inizializza le istances del ModelSwarm;
il ModelSwarm a sua volta crea i livelli sottostanti e la creazione delle azioni
e delle attività. L'oggetto ModelSwarm è generalmente definito
come una sottoclasse dell'oggetto Swarm e rappresenta l'oggetto al quale è
attribuito il compito di costruire gli agenti. Il ModelSwarm è anche
in grado di fornire a ciascun agente un indirizzo di memoria e di programmare
le proprie attività.
Php (http://www.php.net) è
un linguaggio di programmazione che permette agli sviluppatori web di scrivere
velocemente pagine web dinamiche, pagine il cui contenuto viene, almeno in parte,
generato nel momento in cui le stesse vengono richieste al web server. Php (che
significa "Php: Hypertext Preprocessor" secondo alcuni, "Personal
Home Pages" secondo altri), è un linguaggio di scripting general-purpose
Open Source, può essere integrato nell'HTML, ed è server-side,
cioè opera sul lato server:
Il Php è un linguaggio di scripting. I programmi scritti in linguaggio
Php, denominati brevemente script, vengono eseguiti tramite un apposito software,
l'interprete Php. Quest'ultimo si occupa di leggere il codice Php e, interpretandone
le istruzioni, esegue le operazioni corrispondenti (ad esempio la lettura di
un file o un calcolo aritmetico). Dunque il Php è quello che tecnicamente
si definisce un linguaggio interpretato ed in questo esso si differenzia da
altri linguaggi di programmazione, come ad esempio Objective C e Java, il cui
codice sorgente, per poter essere eseguito, deve prima essere compilato (tradotto
cioè in codice macchina).
E' "HTML-embedded". Questa caratteristica si riferisce al fatto che
il codice Php è "immerso" nell'HTML; gli script sono inseriti
nelle pagine HTML in cui devono produrre i loro effetti. Il web server riconosce
le pagine Php, distinguendole da quelle "statiche", sulla base dell'estensione,
che non è .htm o .html ma piuttosto .php, o .phtml; quando il server
riconosce una estensione associata a Php, lascia che sia l'interprete ad occuparsene
(come descritto al punto precedente).
Opera server-side. Un punto cruciale: il PHP opera lato server. Ciò significa
che tutta l'elaborazione di uno script avviene sul server, prima che questi
invii la pagina al browser (il client). Di conseguenza, chi accede ad una pagina
Php non ha la possibilità di leggere le istruzioni in essa contenute:
ciò che il client vedrà sarà il risultato dell'elaborazione
(il client vedrà cosa fa lo script ma non come lo fa).
La sintassi del linguaggio ricalca in gran parte quella di altri popolari linguaggi
di programmazione quali C, C++, Java e Perl.