Informatica e dintorni

by Stefano Riccio


Il progetto "Mondo"

("VOGLIO PARAMETRIZZARE IL MONDO !")

Il progetto MONDO ha lo scopo di produrre una libreria software open source in grado di creare una applicazione gestionale completa semplicemente descrivendo la realta' che si intende gestire.

Piu' semplicemente il progetto vuole permettere ad una persona di descrivere, mediante una apposita sintassi, un problema gestionale. Successivamente il software mette a disposizione una serie di funzioni che implementano tutta la applicazione.

Questo progetto fornisce una libreria software, quindi e' sempre possibile ampliare a piacimento le funzionalita' della applicazione semplicemente utilizzando un linguaggio di programmazione.

Questo progetto prende spunto: dal mio lavoro di tesi, dai corsi di ingegneria del software e soprattutto dalla voglia di abbattere i limiti di qualita' che affliggono il software in generale.

Le basi teoriche

Voglio sintetizzare lo stato dell'arte per quanto concerne le metodologie di analisi del software.

Quando si analizza una nuova applicazione si ha sempre l'obiettivo di modellare un aspetto della realta'. Tutti i software di tipo gestionale evidenziano chiaramente questo aspetto. Un po' meno per i software scientifici o di calcolo, i quali tendono a modellare un esperimento o una legge della natura. In alcune applicazioni il software e' in grado di intervenire sulla realta' fisica, come nel caso di software di automazione industriale, ma anche in questo contesto e' necessario modellare la realta' nella quale si sta intervenendo.

Cerchiamo di definire alcuni concetti basilari che ci aiutano a modellare la realta':

  • Nella realta' si muovono e agiscono degli individui che chiameremo "Entita'". Esse sono le persone, gli oggetti ecc..

  • L'entita' ha due aspetti: l'identita' e lo stato, L'identita' identifica univocamente l'entita', quindi essa non cambia durante la vita della entita'; lo stato invece descrive l'entita' in un certo istante ed e' soggetto ad un continuo cambiamento. Ad esempio l'impronta digitale identifica una persona.

  • Noi percepiamo le entita' in base alle loro caratteristiche. Ogni caratteristica e' detta proprieta' (o attributo) della entita'. L'insieme delle proprieta' di una entita' ne definisce lo stato. Ad esempio un computer e' definito dalla marca, la quantita' di RAM, lo spazio disco ecc...

Il modello relazionale, oggi molto diffuso, di fatto si puo' inquadrare in questa teoria: le entita sono i record delle tabelle, l'identita' e' la chiave della tabella mentre lo stato e' rappresentato dall'insieme dei campi del record. Di conseguenza le proprieta' sono i campi.

Ma andiamo avanti definendo altre caratteristiche della realta':

  • Nella realta' accadono degli eventi, ossia delle situazioni che scatenano dei cambiamenti di stato nelle entita'. Gli eventi nei software gestionali sono rappresentati dal data entry, ma possono essere anche routine automatiche di aggiornamento dei dati.

    • Gli eventi hanno delle precondizioni, cioe' delle condizioni sufficienti per scatenare l'evento.

    • Gli eventi hanno delle postcondizioni, cioe' delle condizioni da soddisfare ( e quindi da verificare) dopo l'avvenuto evento.

  • Le entita' sono legate tra loro mediante delle situazioni. Le situazioni definiscono dei legami tra le entita', questi legami possono essere di diverso tipo: Ad esempio:

    • Una situazione di appartenza (il telaio fa parte della bicicletta)

    • Un situazione di relazione (il marito e la moglie)

  • Ogni proprieta' e' soggetta a dei vincoli rappresentati dai possibili valori che essa puo' assumere. ad esempio l'eta' di una persona deve essere maggiore di zero. Esistono anche vincoli di passaggio di stato, ad esempio non e' possibile passare da celibi a divorziati.

Mentre le prime definizioni che abbiamo dato sono implementate egregiamente nel modello relazionale e ancora meglio nel modello ad oggetti, questi ultimi due concetti non sono ancora stati gestiti efficacemente. Di fatto le situazione sono legami tra i record delle tabelle e il modello relazionale ne modella alcuni, ma non si spinge oltre per non creare troppa confusione.

Per quanto concerne gli eventi, essi sono lasciati al programmatore e non fanno parte del modello della realta'. La programmazione ad eventi, la quale ha avuto tanto successo, aiuta molto a modellare questo aspetto della realta', ma non soddisfa di fatto le esigenze degli utenti.

La programmazione ad oggetti e ancor di piu' i DBMS ad oggetti tentano di modellare tutti questi aspetti, ma la strada e' ancora lunga.

L'aspetto dinamico

Finora ci siamo concentrati sull'aspetto statico della realta', ossia la descrizione delle informazioni oggetto della applicazione. Esiste tuttavia un aspetto dinamico estremamente importante.

Ogni entita' e' soggetta a degli eventi durante la vita della applicazione, vediamo un primo raggruppamento di questi eventi:

  • Inserimento nella realta' (NASCITA); questo determina le seguenti fasi:

    • determinazione della identita'

    • creazione dello stato inziale

    • creazione di una maschera di inserimento dei dati (se necessaria)

    • salvataggio dei dati

  • Modifica dello stato della entita' (EVOLUZIONE); questo determina le seguenti fasi:

    • creazione di una maschera di modifica dei dati (se necessaria)

    • aggiornamento dei dati

  • Eliminazione della entita' (MORTE); questo determina la cancellazione dei dati.

Questi eventi seguono esattamente le tipiche operazioni che si compiono sui database : inserimento di nuovi record, aggiornamento e cancellazione.

L'architettura del software

L'obiettivo di mondo e' implementare in modo semplice tutti gli aspetti definiti nella parte teorica. Per fare questo e' richiesto al programmatore di DESCRIVERE la realta' attraverso i concetti definiti, utilizzando una particolare sintassi.

Dato in input questa descrizione, mondo fornisce in output i seguenti risultati:

  • il codice sorgente necessario alla gestione delle entita'

  • La maschera di immissione e modifica dei dati

  • I controlli dei vincoli sulle proprieta'

  • La creazione della struttura del database

L'architettura software necessaria a svolgere questo compito e' la seguente:

arch_mon.jpg (62956 byte)

La libreria mondo e' sviluppata su 3 livelli:

  • le funzioni che si interfacciano sulla struttura che descrive la ralta' (denominata metamondo)

  • le funzioni di livello evento, le quali gestiscono l'input e l'output delle pagine grafiche con le quali costruire l'applicazione

  • le funzioni di livello applicazione, le quali implementano completamente una applicazione sulla base della realta' descritta.

Ogni programmatore che utilizza mondo puo' scegliere quale livello utilizzare: se intende costruire una applicazione gestionale standard puo' richiamare le funzioni di livello applicativo; se invece intende costruirsi una applicazione personalizzata puo' richiamare le funzioni di livello evento opportunamente inserite nel codice di gestione della applicazione (software utente).

Infine, per gli utenti piu' esperti, e' possibile entrare nella architettura di mondo e utilizzare l'interfaccia su metamondo.

Descrivo brevemente i dati dei moduli di mondo:

  • metamondo: Questo e' un archivio contenente tutta la descrizione della realta'. Per ora esso e' un file di testo con estensione *.MMO.

  • database: Questo e' il contenitore dei dati, esso e' un DBMS relazionale. Per ora ho utilizzato MySQL, ma si puo' estendere facilmente ad altri dbms relazionali, infatti e' possibile utilizzare il motore database per appoggiarsi ad altre fonte dati.

 

L'implementazione

Per ora il progetto mondo e' stato implementato nelle seguenti condizioni:

  • E' stato pensato per gestire applicazioni gestionali sul web. Queto poiche' ritengo oggi l'ambiente piu' innovativo e vantaggioso nel quale sviluppare le nuove applicazioni.

  • E' stato sviluppato in linguaggio Python. Un linguaggio di scripting per sviluppo rapido compatibile con gli ambienti linux e Windows.

  • E' stato sviluppato per utilizzare il server web medusa. Medusa e' un http server sviluppato in python. E' stata scelta questa piattaforma poiche' si integra perfettamente con python.

  • E' stato utilizzato MySQL come dbms deposito dei dati poiche' rappresenta la soluzione di maggiori prestazioni per applicazioni sul web.

Concludendo, il progetto mondo puo' essere molto utile per tutti coloro che devono costruire una applicazione gestionale sul web multipiattaforma in tempi brevi.La piattaforma proposta e' il server web medusa con il linguaggio python per lo sviluppo del software.

Stefano Riccio 6-1-2001