Vai al contenuto| Home page|

   Ti trovi in: HOME »Programmi, progetti e risultati »I progetti »PRIN - Programmi di ricerca di Rilevante Interesse Nazionale»Programma di ricerca
INIZIO_TESTO_DA_INDICIZZARE

PROGRAMMA DI RICERCA

italiano - english
Programmi di ricerca simili:
Classificazione scientifico-disciplinare
Classificazione brevettuale
Classificazione geografica
Bibliografia
[AADDGZ01] D. Ancona, C. Anderson, F. Damiani, S. Drossopoulou, P. Giannini, E. Zucca. An effective translation of Fickle into Java. ICTCS'01, LNCS 2202.
[AADDGZ02] D. Ancona, C. Anderson, F. Damiani, S. Drossopoulou, P. Giannini, E. Zucca. A type preserving translation of Fickle into Java. TOSCA'01, ENTCS 62.
[ABDCD03] C. Anderson, F. Barbanera, M. Dezani, S. Drossopoulou. Can addresses be types? (a case study: objects with delegation). WOOD'03, ENTCS 82.
[AC04] M. Ancona, W. Cazzola. Implementing the Essence of Reflection: a Reflective Run-Time Environment. SAC'04.
[AD02] C. Anderson, S. Drossopoulou. Delta - an imperative object calculus. USE'02.
[AFZ03] D. Ancona, S. Fagorzi, E. Zucca. A calculus for dynamic linking. ICTCS'03, LNCS 2841.
[ALZ00] D. Ancona, G.E. Lagorio, E. Zucca. Jam - a smooth extension of Java with mixins. ECOOP'00, LNCS 1850.
[ALZ02] D. Ancona, G. Lagorio, E. Zucca. A Formal Framework for Java Separate Compilation, ECOOP'02, LNCS 2374.
[ALZ02a] D. Ancona, G. Lagorio, E. Zucca. True Separate Compilation of Java Classes. PPDP'02.
[ALZ03] D. Ancona, G. Lagorio, E. Zucca. Jam - Designing a Java Extension with Mixins. TOPLAS 25 (5), 2003.
[AZ04] D. Ancona, E. Zucca. Principal Typings for Java-Like Languages.POPL'04.
[BB98] V. Bono, M. Bugliesi. Matching for the Lambda Calculus of Objects. TCS 212 (1-2), 1999.
[BBL04] L. Bettini, V. Bono, S. Likavec. A Core Calculus of Mixin-Based Incomplete Objects. FOOL 11, 2004.
[BBV02] L. Bettini, V. Bono, B. Venneri. Coordinating Mobile Object-Oriented Code. Coordination 2002, LNCS 2315.
[BBV03] L. Bettini, V. Bono, B. Venneri. Subtyping Mobile Classes and Mixins. FOOL 10, 2003.
[BBV04] L. Bettini, V. Bono, B. Venneri. O'Klaim: a coordination language with mobile mixins. COORDINATION 2004.
[BC90] G. Bracha, W. Cook. Mixin-based Inheritance. OOPSLA '90.
[BC97] J. Boyland, G. Castagna. Parasitic Methods: Implementation of Multi-Methods for Java. OOPSLA'97.
[BCDC83] H.P. Barendregt, M. Coppo, M. Dezani. A filter lambda model and the completeness of type assignment. J.Symb. Logic 48.
[BCV03] L. Bettini, S. Capecchi, B. Venneri. Extending Java to dynamic object behaviors. WOOD'03. ENTCS 82.
[BDG02] V. Bono, F. Damiani, P. Giannini. A calculus for "environment-aware'' computation. F-WAN'02, ENTCS 66,.
[BF96] P. Di Blasio K. Fisher. A Calculus for Concurrent Objects. CONCUR '96, LNCS 1119.
[BF98] V. Bono, K. Fisher. An Imperative, First-Order Calculus with Object Extension. ECOOP'98, LNCS 1445.
[BLV03] L. Bettini, M. Loreti, B. Venneri. On Multiple Inheritance in Java. TOOLS' 2002, Kluwer.
[CB00] M. Bugliesi ,G. Castagna. Mobile Objects. FOOL'00.
[CCGS02] W. Cazzola, J.O. Coplien, A. Ghoneim, G. Saake. Framework Patterns for the Evolution of Nonstoppable Software Systems. (VikingPLoP'02), Microsoft Business Solutions, 2002.
[CGS04] W. Cazzola, A. Ghoneim, G. Saake. Software Evolution through Dynamic Adaptation of Its OO Design. Objects, Agents and Features: Structuring Mechanisms for Contemporary Software, LNCS.
[CLM03] Jen-Yao Chung, Kwei-Jay Lin, Richard G. Mathieu. Guest editors introduction: Web services computing - advancing software interoperability. IEEE Computer, Special Issue: Web Services, 36(10), 2003.
[Cardelli97] L. Cardelli. Program Fragments, Linking, and Modularization. POPL'97.
[Cazzola03] W. Cazzola. Remote Method Invocation as a First-Class Citizen. Distributed Computing, 16 (4), 2003.
[Chambers93] C. Chambers. Predicate Classes. ECOOP'93.
[DDCG04] S. Drossopoulou, F. Damiani, M. Dezani, P. Giannini. Re-classification and multithreading: Fickle_mt. SAC'04.
[DDDCG01] S. Drossopoulou, Ferruccio Damiani, Mariangiola Dezani- Ciancaglini, Paola Giannini. Fickle: Dynamic object reclassification. ECOOP'01, LNCS 2072.
[DDDCG02] S. Drossopoulou, F. Damiani, M. Dezani, P. Giannini. More dynamic object reclassification:Fickle_II. TOPLAS 24 (2), 2002.
[DDG03] S. Drossopoulou, F. Damiani, P. Giannini. Refined effects for unanticipated object re-classification: Fickle3. ICTCS'03, LNCS 2841.
[DEW99] S. Drossopoulou, S. Eisenbach, D. Wragg. A Fragment Calculus - Towards a Model of Separate Compilation, Linking and Binary Compatibility. LICS'99.
[DFPV00] R. De Nicola, G. Ferrari, R. Pugliese, B. Venneri. Types for Access Control. TCS, 240(1), 2000.
[DG03] F. Damiani, P. Giannini. Alias types for "environment-aware'' computations. WOOD'03, ENTCS 82.
[DLE03] S. Drossopoulou, G. Lagorio, S. Eisenbach. Flexible Models for Dynamic Linking. ESOP'03.
[DM82] L.M.M. Damas, R. Milner. Principal type schemas for functional programs. POPL'82.
[Damiani03] F. Damiani. Rank 2 intersection types for local definitions and conditional expressions. TOPLAS, 25(4), 2003.
[Damiani03a] F. Damiani. Rank 2 intersection types for modules. PPDP'03.
[Drossopoulou01] S. Drossopoulou. Towards an Abstract Model of Java Dynamic Linking and Verification. TIC'00, LNCS 2071.
[FLMR00] C. Fournet, C. Laneve, L. Maranget, D. Remy. Inheritance in the Join Calculus. FSTTCS'00, LNCS 1974.
[FZA04] D. Ancona, S. Fagorzi, E. Zucca. Modeling Multiple Class Loaders by a Calculus for Dynamic Linking. SAC'04.
[Flannanghan99] D. Flannanghan. JavaScript: The definitive guide. O'Reilly, 1999.
[GH98] A. Gordon, P. Hankin. A Concurrent Object Calculus: Reduction and Typing. HLCL'98, ENTCS 16, 1998.
[GHJV95] E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
[Girard72] J.Y. Girard. Interpretation fonctionelle et elimination des coupures dans l'aritmetique d'ordre superieur. Ph.D. thesis..
[HW00] A. Hejlsberg , S. Wiltamuth. C# language reference. Technical report, Microsoft, 2000.
[IV02] A. Igarashi, M. Viroli. On variance-based subtyping for parametric types. ECOOP'02, LNCS 2347.
[Iga00] A. Igarashi. On inner classes. ECOOP'00, LNCS 1850.
[Jim96] T. Jim. What are principal typings and what are good for? POPL'96.
[KLMMVLI97] G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. Videira Lopes, J-M. Loingtier, J. Irwin. Aspect-Oriented Programming. ECOOP'97, LNCS 1241.
[Lagorio03] G. Lagorio. Towards a Smart Compilation Manager for Java. ICTCS'03, LNCS 2841.
[Maes87] P. Maes. Concepts and Experiments in Computational Reflection. OOPSLA'87.
[Mic02] Microsoft. Generic for C# and .NET CLR. Technical report, Microsoft, 2002.
[NorregaardJorgensen04] Bo Norregaard Jorgensen. Language Support for Incremental Integration of Independently Developed Components in Java. SAC'04.
[OWBS98] M. Odersky, P. Wadler, G. Bracha, D. Stoutamire. Making the future safe for the past: Adding Genericity to the Java programming language. OOPSLA'98.
[OZ99] A. Omicini, F. Zambonelli. Coordination for Internet application development. Journ. Autonomous Agents and Multi-Agent Systems, 2(3), 1999.
[PG03] M.P. Papazoglou, D. Georgakopoulos.Comm. ACM, Special Issue: Service-oriented computing, 46(10), 2003.
[PS93] B.C. Pierce, D. Sangiorgi. Typing and Subtyping for Mobile Processes. LICS'93.
[PT95] B.C. Pierce, D.N. Turner. Concurrent Objects in a Process Calculus. TPPP 94. LNCS 907.
[Reynolds74] J.C. Reynolds. Towards a Theory of Type Structure. Colloque sur la Programmation. LNCS 19.
[SA93] Z. Shao, A.W. Appel. Smartest Recompilation. POPL'93.
[SWM00] F. Smith, D. Walker, G. Morrisett. Alias types. ESOP'00, LNCS 1792.
[Serrano99] M. Serrano. Wide classes. ECOOP'99. LNCS 1628.
[Sun00] Sun Mycrosystems. Enterprise Java Beans download & specifications, 2000. http://www.java.sun.com.
[Syme99] D. Syme. Proving Java Type Soundness. Formal Syntax and Semantics of Java. LNCS 1523.
[Vir03] M. Viroli. A type-passing approach for the implementation of parametric methods in Java. The Computer Journal, 46(3), 2003.
[Wells02] J. Wells. The essence of principal typings. ICALP'02, LNCS 2380.
[Woo00] M. Woolridge. Reasoning about Rational Agents. The MIT Press, 2000.
[YH99] N. Yoshida, M.Hennessy. Subtyping and Locality in Distributed Higher Order Mobile Processes. CONCUR'99. LNCS 1664.
Parole Chiave
SISTEMI AD OGGETTI; SISTEMI DI TIPO; ESTENSIONI DI LINGUAGGI; CALCOLI DI MODULI E OGGETTI; MIXIN; ANALISI COMPOSIZIONALE; INTEROPERABILITÀ; EVOLUZIONE IMPREDICIBILE DEL SOFTWARE; RICONFIGURAZIONE DINAMICA

Sistemi ad oggetti estendibili (EOS)

Università degli Studi di Genova
Abstract
Quando è stato introdotto più di venti anni fa, il paradigma object-oriented ha causato un profondo cambiamento nello sviluppo dei sistemi software, attraverso le nozioni chiave di oggetto come unità computazionale e di ereditarietà come meccanismo per lo sviluppo incrementale del software.
Ancora oggi la sua influenza è in crescita: i linguaggi ed ambienti di programmazione più diffusi e le tecnologie emergenti sono basate su questo paradigma, all'interno del quale sono state introdotte altre idee innovative, ad esempio compilazione separata altamente flessibile, loading dinamico, linguaggi intermedi comuni per l'interoperabilità, solo per citarne alcune. Di conseguenza, l'area continua ad essere oggetto di ricerca molto attiva.

L'obiettivo di questo progetto è quello di operare un sostanziale progresso relativamente al design ed ai fondamenti dei sistemi ad oggetti "estendibili", dove con questo termine intendiamo i sistemi ad oggetti che vanno oltre gli ingredienti tradizionali del paradigma, e mirano ad incorporare caratteristiche di sempre maggiore efficacia e flessibilità. Si noti che tale "estendibilità" può essere ottenuta a due livelli complementari, cioè:

- A livello linguistico, attraverso nuovi costrutti linguistici e/o sistemi di tipo più raffinati.
- A livello meta, attraverso operazioni più potenti per la manipolazione di frammenti di codice (considerati come "scatole nere").

Nel progetto considereremo entrambi i livelli, spesso in maniera interdipendente.

La nostra ricerca consisterà nello sviluppo di modelli/calcoli formali che diano una caratterizzazione rigorosa dei sistemi ad oggetti in esame, e nell'applicazione di questi risultati a linguaggi/ambienti di uso prevalente come Java, C++, C-sharp, .NET. Svilupperemo anche dei prototipi e/o delle estensioni a tali linguaggi/ambienti.

Il piano di ricerca sarà strutturato in base a quattro caratteristiche complementari, tutte altamente auspicabili per i sistemi ad oggetti, ed ortogonali alla distinzione tra livello linguistico e metalivello nel senso che tutte possono agire ad entrambi i livelli:

- Analisi composizionale
- Interoperabilità
- Adattabilità
- Strutturazione e riconfigurazione


La prima è la possibilità di analizzare (ad esempio, attraverso il typechecking) singoli frammenti, per poi poterli combinare sulla base dei risultati dell'analisi, senza bisogno di riesame. La seconda è la capacità di permettere coesistenza e cooperazione tra frammenti espressi in linguaggi eterogenei, o in estensioni/versioni dello stesso linguaggio. La terza è la capacità di adattare il comportamento del sistema a richieste diverse e non prevedibili. L'ultima è la disponibilità di meccanismi flessibili per la composizione di frammenti, sia a livello statico, che cioè vengano applicati prima dell'esecuzione ("strutturazione") che dinamico, cioè, applicabili ad un'applicazione già in esecuzione ("riconfigurazione").

Il progetto è composto da quattro gruppi leader nel campo del design e dei fondamenti dei sistemi ad oggetti, attivi anche nell'organizzazione di eventi internazionali dedicati ai temi del progetto. Le quattro unità hanno tutte un solido background teorico, ed esperienza sia in calcoli di oggetti fondazionali che nell'applicazione a linguaggi di uso prevalente; inoltre, sono già in atto collaborazioni fruttuose su diverse attività. D'altra parte, le unità hanno anche competenze di tipo complementare, che permetteranno di raggiungere gli obiettivi del progetto con la massima efficacia; inoltre, il progetto consentirà di migliorare ulteriormente la coesione dei partner sui temi di interesse e di mettere in atto nuove sinergie. In particolare, i ricercatori di U1 hanno competenze sui sistemi basati a componenti, i ricercatori di U2 sui calcoli per processi mobili, i ricercatori di U3 su design e fondamenti di linguaggi modulari, i ricercatori di U4 sulla teoria dei tipi per linguaggi di ordine superiore, concorrenti ed ad oggetti. <<<

Coordinatore Scientifico del Programma di Ricerca
Elena ZUCCA Università degli Studi di GENOVA
Obiettivo del Programma di Ricerca
Quando è stato introdotto più di venti anni fa, il paradigma object-oriented ha causato un profondo cambiamento nello sviluppo dei sistemi software, attraverso le nozioni chiave di oggetto come unità computazionale e di ereditarietà con late binding come meccanismo per lo sviluppo incrementale del software.
Ancora oggi la sua influenza è in crescita: i linguaggi ed ambienti di programmazione più diffusi e le tecnologie emergenti sono basate su questo paradigma, all'interno del quale sono state nel frattempo introdotte altre idee estremamente innovative, ad esempio compilazione separata altamente flessibile, loading dinamico, linguaggi intermedi comuni per l'interoperabilità, solo per citarne alcune. Di conseguenza, l'area continua ad essere oggetto di ricerca molto attiva, volta ad affrontare il bisogno continuo di adattamento dei linguaggi e sistemi esistenti in risposta alla richiesta di nuove caratteristiche.

L'obiettivo di questo progetto è quello di operare un sostanziale progresso relativamente al design ed ai fondamenti dei sistemi ad oggetti "estendibili", dove con questo termine intendiamo i sistemi ad oggetti che vanno oltre gli ingredienti tradizionali del paradigma ad oggetti, e mirano ad incorporare caratteristiche di sempre maggiore efficacia e flessibilità. Si noti che tale "estendibilità" può essere ottenuta a due livelli complementari, cioè:

- A livello linguistico, attraverso nuovi costrutti linguistici e/o sistemi di tipo più raffinati.
- A livello meta, attraverso operazioni più potenti per la manipolazione di frammenti di codice (considerati in questo caso come "scatole nere").

Nel progetto considereremo entrambi i livelli, spesso in maniera interdipendente.

Il piano di ricerca sarà strutturato in base a quattro caratteristiche complementari, tutte altamente auspicabili per i sistemi ad oggetti, ed ortogonali alla distinzione tra livello linguistico e metalivello menzionata sopra nel senso che tutte possono avere effetto ad entrambi i livelli:

- Analisi composizionale
- Interoperabilità
- Adattabilità
- Strutturazione e riconfigurazione

Ognuna di queste caratteristiche costituisce una problematica cardine per i sistemi ad oggetti estendibili di moderna concezione. Esse corrisponderanno a quattro task, per ognuno dei quali vi sarà un'unità responsabile; questo a fini essenzialmente organizzativi, in quanto in molti casi i task saranno condotti in stretta collaborazione da più di un'unità e vi saranno anche alcune connessioni tra i task, come dettagliato nel piano di ricerca.

T1 - Analisi composizionale

L'obiettivo è lo sviluppo di tecniche per l'analisi composizionale (di cui sono casi rilevanti il typechecking e la compilazione separata), che possano essere applicate ai sistemi ad oggetti. Nei sistemi ad oggetti estendibili, può essere necessario riutilizzare frammenti di software in diverse combinazioni, e si deve quindi verificare la consistenza di tali combinazioni. Quindi, è estremamente conveniente utilizzare sistemi di tipo nei quali è possibile assegnare ad ogni frammento un'informazione di tipo che permette di controllare successivamente la compatibilità con altri frammenti senza bisogno di rianalizzare il codice. I sistemi di tipo con "typing principali" hanno questa proprietà (come illustrato, ad esempio, in [Jim96,Wells02]). I sistemi di tipo con typing principali sono stati studiati e proposti da lungo tempo nel contesto funzionale; al contrario, la loro applicazione ai sistemi ad oggetti è una direzione di ricerca recente.
In particolare, svilupperemo sistemi di tipo con typing principali basati sulla tecnologia dei tipi intersezione rank 2 per definizioni ricorsive e classi mixin, e sistemi di tipo con typing principali per la compilazione separata di linguaggi Java-like.

T2 - Interoperabilitày

L'obiettivo è lo studio della possibilità di avere interoperabilità tra tecnologie diverse, possibilità che costituisce un aspetto chiave dei sistemi ad oggetti estendibili. Infatti, l'interoperabilità permette di estendere facilmente un prodotto software, sfruttando strumenti e componenti nuove o legacy per migliorare la flessibilità, il riuso e l'espressività. Studieremo sia l'interoperabilità di linguaggi che l'interoperabilità delle componenti software. Nel primo caso ci concentreremo sull'interoperabilità nel contesto degli strumenti di sviluppo, tra i quali sicuramente il linguaggio di programmazione occupa un posto di particolare importanza nel caso del paradigma object-oriented; nel secondo caso sullo sfruttamento di componenti esistenti e delle loro funzionalità al fine di sviluppare un sistema complessivo a piena funzionalità. Inoltre, affronteremo specificamente il problema di definire un linguaggio di moduli comune basato sugli assembly di .NET.

T3 - Adattabilità

L'obiettivo è lo sviluppo di tecniche per potenziare l'adattabilità dei sistemi ad oggetti, cioè la capacità di adattare il comportamento del sistema a richieste diverse del contesto esterno. In altri termini, possiamo definire l'adattabilità come la capacità di reagire alla cosiddetta "evoluzione impredicibile del software". Prenderemo in esame sia il caso dei linguaggi e calcoli object-based, in genere non tipati o tipati debolmente, in cui la difficoltà principale è quella di affiancare,
mediante sistemi di tipi oppurtuni, l'affidabilità all'elevato supporto all'adattabilità offerto dal paradigma, sia quello dei linguaggi class-based, in genere fortemente tipati, nei quali l'adattabilità è minore e può essere aumentata con l'aggiunta di caratteristiche nuove, ad esempio la riclassificazione dinamica (cioè, la possibilità per gli oggetti di cambiare classe a run-time senza bisogno di controlli dinamici). Inoltre, elaboreremo delle proposte per rendere la tecnologia object-oriented adatta a gestire l'adattamento event-driven del software per mezzo del paradigma riflessivo e di quello aspect-oriented.

T4 - Strutturazione e riconfigurazione

L'obiettivo è lo sviluppo di meccanismi flessibili per la composizione di frammenti, sia a livello statico -che cioè vengano applicati prima dell'esecuzione ("strutturazione") che dinamico, cioè, applicabili ad un'applicazione già in esecuzione ("riconfigurazione"). Entrambi questi aspetti sono fondamentali per i sistemi ad oggetti estendibili. La necessità di avere meccanismi di strutturazione che vadano al di là dell'inheritance è stata riconosciuta da molto tempo, e sono state avanzate le più svariate proposte per aumentare la flessibilità (tra le altre, generici, classi mixin, moduli mixin, trait, design pattern, multimetodi), senza tuttavia arrivare ad una soluzione accettata generalmente: studieremo quindi alcune di queste estensioni sia da un punto di vista fondazionale che per proporre applicazioni a linguaggi di uso prevalente. D'altra parte, per i meccanismi di riconfigurazione dinamica come il loading dinamico delle classi in Java e C-sharp mancano dei chiari fondamenti teorici: proporremo quindi dei calcoli kernel che ne forniscano un modello chiaro e semplice. Infine, l'uso di codice mobile mette alla prova la flessibilità dei sistemi ad oggetti in un contesto più ampio, dove componenti diverse sono sviluppate da provider diversi e possono essere scaricate a richiesta per essere assemblate dinamicamente con applicazioni locali. Di conseguenza, un linguaggio per codice mobile dovrebbe fonire meccanismi nuovi per strutturare il codice object-oriented in modo flessibile, per coordinarne la trasmissione e per controllare la riconfigurazione dinamica locale. Quindi, proporremo tecniche per l'integrazione di meccanismi di strutturazione e riconfigurazione per sistemi ad oggetti con caratteristiche di mobilità. <<<
Risultati parziali attesi
Mese 3
Sito web del progetto.

Mese 12
Workshop di progetto aperto, per valutare i risultati intermedi e raffinare gli obiettivi per la seconda fase. Prevediamo i seguenti contributi per i vari task (se non specificato altrimenti, i risultati consistono in articoli scientifici da sottomettere per la pubblicazione in riviste o atti di convegni internazionali):


Task 1
- Rank 2 intersection type inference per definizioni ricorsive ed interprete prototipale per un semplice linguaggio ML-like [U4,U2]
- (Prototipi) Ricompilazione "smarter" per un sottoinsieme di Java, ricompilazione "smart" per il compilatore Java SDK [U3]
- Framework formale per inter-checking sound e completo e relazione con la nozione di principalità [U3]
- Sistema di tipo per linguaggi Java-like che permette type inference (cioè ha typing principali in senso più forte) [U3,U4]


Task 2
- Framework formale per estensioni di linguaggi [U1,U3]
- Proprietà di compatibilità per generici [U1]
- Framework di coordinazione per sistemi multi-agente [U1]
- Modello formale per linguaggi di orchestrazione [U1]
- Framework formale per il meccanismo di compilazione e loading di .NET [U3]

Task 3
- Semantica operazionale e sistema di tipo basato su tipi alias per un linguaggio object-based con delegation ed "environment awareness" [U4,U2]
- Estensione di Fickle con gestione di metodi sincronizzati ed eccezioni [U4]
- Integrazione di oggetti incompleti e mixin higher-order [BBL03] [U2,U4]
- Confronto funzionale e critica dell'approccio aspect-oriented al problema dell'evoluzione del software [U3]
- Nuovo meccanismo di weaving guidato dall'informazione di design [U3]
- Estensione del sistema Io per permettere la programmazione event-driven attraverso attività riflessive.

Task 4

- Estensioni linguistiche di sottoinsiemi kernel di Java/C++, per aumentare la flessibilità e la divisione delle responsabilità [U2]
- Calcolo kernel per modellare sistemi che permettono interleaving di esecuzione standard e riconfigurazione (approccio stratificato) [U3]

- Integrazione di oggetti incompleti e moduli mixin in un calcolo di coordinamento per il codice mobile, in cui lo scambio di codice è controllato dalla relazione di sottotipazione [U2,U4,U3]
- Confronto della relazione di sottotipazione nominale e quella strutturale in un contesto distribuito e mobile [U2,U3,U4]Mese 24

Workshop finale di progetto aperto, per la presentazione dei risultati più rilevanti del progetto, e la valutazione finale. Prevediamo i seguenti contributi per i vari task (se non specificato altrimenti, i risultati consistono in articoli scientifici da sottomettere per la pubblicazione in riviste o atti di convegni internazionali):

Task 1
- Polimorfismo per tipi intersezione rank 2, da aggiungere al calcolo class-based in [BPSM99] [U4,U2]
- Modello di esecuzione per bytecode polimorfo (eventualmente con prototipo) [U3]

Task 2
- Framework di coordinazione control-driven per componenti [U1]
- Architettura di coordinamento technology-independent [U1]
- Framework formale per interoperabilità di linguaggi [U1,U3]
- Ontologia per compatibilità di linguaggi [U1]
- Linguaggio di moduli comune costruito sulla base degli assembly .NET [U3]

Task 3
- (Prototipi) Implementazione prototipale dei linguaggi sviluppati nella fase 1: sia il linguaggio object-based con delegation ed environment awarness, che l'estensione di Fickle con metodi sincronizzati [U4]
- Integrazione degli oggetti incompleti [BBL04] come componenti di un calcolo unificante per il codice mobile [U4,U2]
- Estensione di uno degli ambienti di sviluppo aspect-oriented esistenti con il meccanismo di weaving sviluppato nella fase 1 [U3]
- Analisi di JVM e CLR per permettere il supporto del nostro approccio alla reflection system-wide [U3]

Task 4
- (Prototipo) Preprocessore per un linguaggio di programmazione esteso che includa i nuovi costrutti linguistici studiati nella prima fase; applicazione ad un caso di studio e valutazione delle prestazioni [U2]
- Estensione dei calcoli kernel per la riconfigurazione dinamica con configurazioni di prima classe e/o operatori più potenti [U2]
- Sistema di tipo con tipi routing e tipi alias: proprietà formali ed applicazione al problema della comunicazione sicura del codice [U2,U4] <<<
Durata
24 mesi
Base di partenza scientifica nazionale o internazionale
Viene di seguito riportato un sommario dello stato dell'arte sulla progettazione e sui fondamenti dei sistemi di oggetti estensibili, suddiviso in quattro aree, corrispondenti ai task del progetto. In particolare, le basi di partenza verranno descritte nei paragrafi contrassegnati da Attività in corso

Analisi composizionale
Il sistema di tipi di Hindley/Milner [DM82] è il nucleo su cui si basano i sistemi di tipi dei linguaggi funzionali di ordine superiore (come ML, OCaml, and Haskell); tuttavia, esso soffre di varie limitazioni che impediscono a programmi corretti di passare la verifica dei tipi. In particolare, non è possibile assegnare tipi diversi a occorrenze diverse di un parametro formale nel corpo di una funzione. In letteratura, sono stati proposti diversi approcci per superare tali limitazioni, basati su opportune estensioni del sistema di Hindley-Milner con tipi universali [Girard72,Reynolds74], con tipi intersezione [BCDC83], con tipi ricorsivi e con loro combinazioni. I sistemi con tipi intersezione sono di particolare interesse, poichè in genere ammettono typing principali [Jim96,Wells02]. Il sistema con tipi intersezione di rango 2 ammette typing principali e riconosce come corretti tutti i programmi corretti rispetto al sistema di Hindley/Milner. Inoltre, il problema dell'inferenza di tipo è decidibile e la complessità del corrispondente algoritmo è dello stesso ordine di quello usato per il sistema di tipi di Hindley/Milner.
Attività in corso Alcuni risultati recenti hanno dimostrato come i tipi intersezione di rango 2 possano essere utilizzati in presenza di alcuni classici costrutti di programmazione, come dichiarazioni di definizioni locali ed espressioni condizionali [Damiani03] e definizioni di moduli con linking simmetrico [Damiani03a].

La compilazione separata è una proprietà importante nei moderni ambienti di programmazione; nella formulazione dovuta a Cardelli [Cardelli97], essa richiede che un frammento di codice sorgente possa essere compilato in isolamento (intra-checking) disponendo solamente delle informazioni di tipo, ma non del codice, dei frammenti da cui esso dipende. Quindi, è possibile costruire un'applicazione eseguibile assemblando un insieme di frammenti binari, a patto che tutti i frammenti necessari siano disponibili e soddisifino le assunzioni di tipo richieste (inter-checking). I linguaggi object-oriented più diffusi, come Java e C-sharp, prevedono solo una forma limitata di compilazione separata, dato che un singolo frammento può essere compilato in assenza del codice sorgente dei frammenti da cui esso dipende, ma solo in un ambiente dove almeno il codice binario di tali frammenti è presente. Infatti, per il controllo dei tipi, i compilatori convenzionali hanno bisogno delle informazioni di tipo complete estratte dai binari. Tale processo di verifica statica è stato formalizzato mediante diversi sistemi di tipi [Syme99,ALZ02].
Attività in corso Di recente, sono stati proposti dei sistemi di tipi innovativi [ALZ02a,AL03,AZ04] che permettono la compilazione separata di una classe rispetto a un ambiente che contiene solo le minime assunzioni necessarie sulle altre classi usate. Contrariamente ai sistemi che modellano i compilatori convenzionali, tali sistemi ammettono typing principali (come è stato provato in [AZ04]), per cui è possibile trarne il ben noto vantaggio dell'analisi composizionale. Inoltre, tale proprietà pone delle solidi basi formali per la progettazione di compilatori dotati di meccanismi di ottimizzazione della ricompilazione [AL03,Lagorio03], poichè è possibile calcolare l'insieme minimo di frammenti che devono essere necessariamente ricompilati in conseguenza di modifiche a qualche sorgente.

Interoperabilità
Negli ultimi anni, il paradigma della programmazione object-oriented sta conoscendo un periodo di grande sviluppo.

Sul fronte linguistico, linguaggi come Java e C-sharp vengono sottoposti a continui processi di estensione mirati a migliorarne l'espressività. Esempi significativi in questa direzione sono l'introduzione delle classi annidate [Iga00], dei delegate [HW00], e delle classi generiche [OWBS98, Mic02]. Correntemente, altre proposte di estensione sono al vaglio della comunità scientifica: tipi parametrici varianti [IV02], classi mixin [ALZ00], riclassificazione degli oggetti [DDDCG01], comportamento dinamico [BCV03], solo per citarne alcuni. In ogni caso, una proposta di estensione è fortemente vincolata da questioni di compatibilità che richiedono uno sforzo non idifferente sia a livello di progettazione che di realizzazione, affinchè sia garantita l'interoperabilità tra le versioni precedenti e quelle più nuove del linguaggio.

Sul fronte dei sistemi, si stanno imponendo ambienti come Microsoft .NET che promuovono l'uso di diversi linguaggi per una stessa applicazione, e permettono, quindi, di scegliere il paradigma più appropriato per lo sviluppo di ogni sotto-componente. In questo caso, l'interoperabilità è un traguardo strategico per garantire l'affidabilità del software e la facilità di integrazione.

Tra i vari aspetti che classicamente possono influire sull'interoperabilità, vi sono le tecniche di compilazione [Vir03], il supporto per la compilazione separata [ALZ02], e il linking dinamico di classi [AFZ03].

L'estensibilità è un'altro aspetto importante che interagisce intimamente con l'interoperabilità; essa consiste nell'abilità di far cooperare diversi componenti software mediante la condivisione delle loro funzionalità, al fine di ottenere un sistema completo. Questo aspetto è ancora più importante se si considerano le caratteristiche tipiche dei sistemi moderni predisposti allo sviluppo di multi-applicazioni che richiedono un insieme comune di servizi ortogonali, come ad esempio, gestione delle transazioni, della persistenza e degli eventi. L'estensibilità è intimamente correlata con l'operabilità, poichè molto spesso la difficoltà di integrazione delle varie componenti può derivare dalle diverse tecnologie utilizzate per il loro sviluppo (ad esempio, differenti linguaggi di programmazione). Nel contesto dei sistemi di oggetti, tale problema consiste nel trovare il giusto collante per legare assieme un certo numero di oggetti. Esistono diversi scenari emergenti in cui l'integrazione tra oggetti è particolarmente importante: l'utilizzo di nuovi oggetti in sistemi basati sulle componenti, come Enterprise JavaBeans [Sun00], o in sistemi orientati ai servizi, come nei servizi Web [PG03, CLM03], o in sistemi multi-agente [Woo00, OZ99]. In tutti questi casi è di cruciale importanza la possibilità di poter riutilizzare funzionalità già esistenti e sviluppate da terzi, per riuscire a definire un nuovo sistema, senza dover riprodurre tutto il codice.

Adattabilità
I calcoli object-based stanno vivendo un periodo di rinascita, poichè permettono di modellare i meccanismi di delegation [AD02] e forniscono una base formale a linguaggi come JavaScript [Flannanghan99,BDG02]. Inoltre, una caratteristica spesso ricercata nella progettazione dei sistemi object-oriented, consiste nella possibilità di aggiungere funzionalità al livello degli oggetti, senza dover modificare la gerarchia delle classi [NorregaardJorgensen04]. Esistono già alcune proposte per definire linguaggi object-based che siano tipati, ma che offrano anche una disciplina dei tipi abbastanza flessibile per permettere l'estensione degli oggetti [BB98,BF98].
Attività in corso Il linguaggio definito in [BDG02] è stato ideato con lo scopo di garantire l'indipendenza dai browser, in modo da definire applicazioni scritte in JavaScript che abbiano lo stesso effetto visivo, quando eseguite in browser dotati di un Domain Object Model (DOM) diverso, come accade per Netscape Navigator and Internet Explorer. In [SWM00] sono stati studiati sistemi basati sui tipi alias [SWM00], per garantire la corretteza statica delle espressioni. I tipi alias sono stati adottati, sia per definire una versione tipata [DG03] del linguaggio definito in [BDG02], sia per controllare la delegation [ABDCD03]. In [BBL04] è stato definito un calcolo di oggetti incompleti basati su classi mixin; un oggetto incompleto viene ottenuto come istanziazione di una classe mixin (una classe incompleta) e, durante l'esecuzione, può essere completato con i metodi mancanti, con una metodologia tipica dei linguaggi object-based.

Nel linguaggi class-based, il comportamento di un oggetto è determinato dalla sua classe, per cui sono state proposte varie soluzioni per evitare questa limitazione. I predicati di classe di Cecil [Chambers93] permettono una sorta di classificazione dinamica, dipendente dal valore degli oggetti durante l'esecuzione. Cecil è un'estensione di Common Lisp, un linguaggio nel quale le classi non permettono di strutturare il codice e l'overloading dei metodi è dinamico. Il meccanismo delle "classi wide" di Serrano [Serrano99] permette a un oggetto di appartenere temporaneamente a una super-classe o a una sotto-classe, in modo da poter essere ristretto o esteso. Questo approccio ricorre a controlli di tipo dinamici che possono sollevare delle eccezioni nel caso in cui si cerchi di accedere a campi o metodi inesistenti.
Attività in corso In [DDDCG01] è stato definito il linguaggio Fickle che permette la riclassificazione dinamica degli oggetti, con lo scopo di dimostrare come un linguaggio object-oriented tipato e imperativo possa essere esteso con la riclassificazione. Diverse estensioni sono state proposte, principalmente nella direzione di estendere la riclassificazione a tutti i tipi di variabile [DDDCG02] (originariamente era ammessa solo per "this"), o di raffinare il sistema degli effetti [DDG03]; recentemente è stato affrontato il problema dell'interazione tra la riclassificazione e la concorrenza [DDCG04]. Infine, diversi traduzioni da Fickle in Java sono state proposte [AADDGZ01,AADDGZ02], ognuna caratterizzata da un diverso invariante.

Oggigiorno, i sistemi event-driven sono diventati un argomento molto interessante per nell'ambito della tecnologia object-oriented. La presenza di eventi (come, ad esempio, interrupt, timer, input esterni o modifiche inattese dell'ambiente di esecuzione) obbliga un sistema software a essere in grado di adattarsi, in modo impredicibile tramite meccanismi di riconfigurazione, adattamento e/o evoluzione. Nonostante che la tecnologia object-oriented sia molto diffusa, essa risulta ancora inadeguata per gestire l'adattamento event-driven dei sistemi software, soprattutto quando tale adattamento deve avvenire dinamicamente. Come provato da precedenti esperienze [CCGS02,Cazzola03,CGS04], la reflection [Maes87] e la programmazione aspect-oriented [KLMMVLI97] sembrano offrire gli strumenti giusti per intercettare gli eventi e adattare dinamicamente il sistema intero.
Attività in corso In [CCGS02,CGS04] è stato realizzato del middleware basato sulla reflection che sfrutta le informazioni sulla struttura del sistema per poter adattare dinamicamente il sistema in reazione a eventi inattesi [CCGS02,CGS04]. Il meta-livello del middleware permette di concretizzare le informazioni sul sistema eseguito a livello base. Il meta-livello intercetta gli eventi esterni e pianifica l'adattamento del sistema a livello base. In [AC04] è stato sviluppato un ambiente run-time con supporto per la reflection per Io, un semplice linguaggio di programmazione. Per mezzo di un sistema di interrupt virtuale, l'ambiente fornisce un semplice meccanismo per la gestione degli eventi.

Strutturazione e riconfigurazione
Qualche anno fa è stata introdotta la nozione di design pattern [GHJV95], per poter fornire uno strumento adeguato a superare la limitazione imposta dall'uso dell'inheritance come unico meccansimo di strutturazione del codice. Nonostante ciò, i design pattern non permettono nè la generazione automatica di codice, nè la verificare statica di un loro uso corretto. Recentemente, sono state proposte molte estensioni di C++ e Java, mirate a migliorarne la flessibilità tramite l'introduzione di nuovi meccanismi, come le classi generiche [OWBS98], le classi incomplete [ALZ00] e i multi-metodo [BC97]. Tra queste proposte, quelle più interessanti per questo progetto sono le estensioni linguistiche che possono essere tradotte nel linguaggio di origine, come per esempio in [OWBS98]. In questo caso, uno dei problemi principali deriva dalla rigidità dei sistemi di tipi comunemente adottati dai linguaggi class-based.
Attività in corso In [BLV03] è stato proposta un'estensione di Java, chiamata M-Java, con l'inheritance multipla [BLV03], basata su uno schema di pre-compilazione che permette di tradurre programmi M-Java in programmi Java che sono staticamente corretti. In [BCV03] è stata proposta un'estensione di Java, parzialmente ispirata dal decorator pattern, che permette la specializzazione dei metodi, per modellare il comportamento dinamico degli oggetti.

I formalismi come quelli definiti in [Cardelli97,AZ02], permettono di modellare solo situazioni dove la configurazione di un sistema software avviene prima della sua esecuzione e produce del codice chiuso; d'altra parte, nei moderni ambienti di programmazione, come quelli per Java o C-sharp, i frammenti di codice vengono assemblati dinamicamente, per cui le fasi di configurazione e di esecuzione non sono più separate. La letteratura su questo argomento è principalmente dedicata alla modellazione di meccanismi concreti [DEW99,Drossopoulou01,DLE03].
Attività in corso Recentemente sono stati proposti dei semplici modelli formali per il linking dinamico, analogamente a quanto fatto per il linking statico. In [AFZ03] è stato definito un semplice calcolo, chiamato CDL (Calculus for Dynamic Linking), dove il linking dinamico viene modellato indipendentemente dai dettagli di un particolare ambiente di programmazione. Nel calcolo vengono tenute separate, a livello del linguaggio, le due nozioni di configurazione ed esecuzione del sofware, introducendo rispettivamente le due categorie delle espressioni di linkset e dei comandi. In [FZA04] è stata utilizzata una particolare istanziazione di CDL per codificare un semplice linguaggio che fornisce un meccanismo generale di loading dinamico delle classi con loader multipli, come in Java.

In letteratura si possono trovare diverse proposte per combinare gli oggetti con i processi o gli agenti mobili. In [CB00] è stato presentato un modello generale per integrare calcoli per agenti mobili con caratteristiche object-oriented. Altri lavori [BF96,PT95,GH98,FLMR00] sono più orientati all'integrazione di concorrenza e sistemi object-oriented e non considerano codice mobile e distribuito.
Attività in corso Nel contesto dei calcoli per i proceesi mobili, i tipi sono stati largamente usati per modellare proprietà di sicurezza [PS93,YH99]. Per esempio, è stato progettato un sistema di tipi espressivo per Klaim [DFPV00], dove le proprietà sono garantite per mezzo di una relazione di sotto-tipo. Il lavoro in [BBV02] usa la stessa idea per definire un calcolo per la coordinazione, chiamato MoMi, che permette scaricamento di codice object-oriented (per mezzo di di classi mixin) da siti differenti (Le classi mixins [BC90] sono definizioni di (sotto)classi parametriche rispetto alla super-classe e sono state introdotte come un'alternativa alla inheritance convenzionale tra classi; infatti, la composizione di mixin è uno strumento che permette la riconfigurazione dinamica della gerarchia delle classi). In questo caso viene garantita una migrazione di classi e mixin che rispetta i tipi. Il modello di MoMi è stato usato per estendere Klaim con caratteristiche object-oriented [BBV04]. Inoltre, la relazione di sotto-tipo di MoMi è stata estesa per permettere uno schema di comunicazione più flessibile [BBV03]. <<<