Realizzazione di un'estensione di Java verso l'evoluzione dinamica degli oggetti

Candidato: Marco Naldini

Relatore: Prof. Betti Venneri

Correlatore: Dott. Lorenzo Bettini

Il lavoro svolto in questa tesi parte da un'analisi delle problematiche dei linguaggi orientati agli oggetti appartenenti alla categoria dei linguaggi class-based, quali ad esempio Java e C++. In particolare questi linguaggi non riescono ad esprimere pienamente i cambiamenti dinamici e incrementali dei sistemi software: questo e' dovuto alla natura statica delle classi e della relazione di ereditarieta'. Si pone, dunque, il problema di introdurre nuovi meccanismi adatti a rappresentare un maggiore dinamismo del comportamento degli oggetti a run-time. Per risolvere le suddette problematiche e' stata adottata la soluzione presentata nella tesi di laurea di Sara Capecchi. L'idea base di tale soluzione e' quella di estendere il linguaggio con nuovi meccanismi, che permettano l'estensione dinamica del comportamento degli oggetti, ma, al contempo, siano rappresentabili con i meccanismi standard del linguaggio stesso. La soluzione proposta e' ispirata ad un noto design-pattern, il Decorator, che risulta essere una valida alternativa all'ereditarieta' in contesti in cui le logiche del sistema prevedono modifiche dinamiche del comportamento degli oggetti. L'obiettivo di questa tesi e' quello di implementare la soluzione precedentemente citata. E' stata, quindi, sviluppata e formalizzata nei dettagli la suddetta soluzione, definendo la sintassi e la semantica di un'estensione del linguaggio Java, chiamato Dec-Java. Il contesto puramente teorico in cui `e stata sviluppata la precedente proposta presenta delle restrizioni e dei limiti inaccettabili da un punto di vista piu' pratico, per cui sono stati eliminati alcuni vincoli posti sul design delle classi, al fine di poter utilizzare Dec-Java anche in una fase (del ciclo di vita del software) successiva a quella progettuale; sono stati, inoltre, introdotti ulteriori costrutti necessari per supportare completamente l'estensione dinamica degli oggetti. Quindi, e' stato realizzato il preprocessore, che traduce un programma Dec-Java in un programma Java, la cui semantica e' consistente con quella dei nuovi costrutti che caratterizzano Dec-Java. Infine, l'implementazione sviluppata e' stata applicata ad un particolare caso di studio, in cui la logica stessa del problema richiede continuamente di modificare a run-time il comportamento degli oggetti.