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.


4.1 Objective C

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.

4.2 Swarm

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à.


4.3 Php

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.



Capitolo 3
Indice
Capitolo 5