Università degli Studi di Bologna Facoltà di scienze matematiche, fisiche e naturali Corso di Laurea in Informatica Per un nuovo orientamento nella progettazione dei linguaggi di programmazione Tesi di Laurea di: RICCARDO SOLMI Relatore: Prof. ANDREA ASPERTI Sessione II Anno Accademico 1998-’99 Obiettivi • Mostrare che esiste una funzionalità generale non supportabile dagli attuali linguaggi • Mostrare la rilevanza di questa funzionalità • Individuare gli aspetti fondazionali responsabili di questo limite • Indicare un nuovo punto di partenza per la progettazione dei linguaggi di programmazione 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 2 Adattabilità e ristrutturazione classi • Programmazione OO obbliga a fissare composizione delle classi e parametri dei metodi • Esigenza di ristrutturare le classi accomuna diverse tendenze di sviluppo attuali (SOP, AOP, IP, classi di specializzazione dinamica del comportamento) • Convinzione: rigidità struttura non limita adattabilità • Introduco operazione di differenziazione in una forma limitata e adattata al paradigma OO • La differenziazione evidenzia rigidità nel dominio dell’applicazione 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 3 Operazione di differenziazione OO object differenziato da var (object.differentiate(o.var)) client 1 client 2 client m object Oggetto da differenziare obj 1 target 1 obj 2 target 2 obj n target n Oggetti destinatari Copie differenziate 16 Dicembre 1999 o.var Variabile di differenziazione • Si applica ad un oggetto scegliendo una variabile di differenziazione • Coinvolge quattro soggetti • Un oggetto differenziato ha stati diversi per ogni valore della variabile • Ha effetti sul comportamento dei clienti • Sposta un campo dalle classi cliente alla classe destinazione Tesi di Laurea di Riccardo Solmi 4 Esempi di applicazione Mail & News reader GRUPPI admin Clelia seminars students PREFERENZE v Mostra mittente v Mostra destinatario v Mostra oggetto Carattere: Arial Dimensione: 10 punti Mittente Riccardo Clelia Clelia INTESTAZIONI Destinatario Oggetto Clelia Ricetta torta Sacher Riccardo Re: Ricetta torta Sacher Riccardo Orari dei treni MESSAGGIO Ciao, eccoti la ricetta della Sacher. Questa volta vedi di non perderla. Clelia Sacher torte Mettere il burro a pezzi in una ciotola; versare la maggior parte dello zucchero nella ciotola e lavorare a crema Versare lo zucchero restante in una seconda ciotola. Spezzettare la cioccolata; metterla in un resipiente nel forno e farla fondere. Versare la cioccolata fusa nella ciotola. Rimescolare. Per ogni uovo: separare rosso da albume. Versare 16 Dicembre 1999 Ogni gruppo deve poter avere le proprie preferenze di visualizzazione Ogni messaggio deve poter avere il proprio font Ogni gruppo deve poter avere la propria vista messaggi Ogni vista messaggi deve poter avere le proprie preferenze di visualizzazione Tesi di Laurea di Riccardo Solmi 5 Ricerca di una soluzione OO Requisiti soluzione: Usabile dai programmatori e dagli utenti Generale (semplice da usare) • Trasformazione persistente del programma 16 Dicembre 1999 Soluzioni esplorate: • Design Pattern • Progr. a soggetti Progr. ad aspetti • Progr. basata su oggetti • Modelli con predicati Modelli ad attori Riflessività Tesi di Laurea di Riccardo Solmi 6 Implementazioni possibili Caratteristiche comuni: • Ridefiniscono interamente il comportamento degli oggetti • Ridirigo tutti i metodi sulla copia differenziata object differenziato da var (aspetti, attori) client 1 object client 2 client m o.var map obj 1 target,obj obj 2 target 1 obj n target 2 target n 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 7 Insufficienza della riflessività Fornisce operazioni sufficienti nelle mani di un programmatore ma introduce conflitti di responsabilità • La ristrutturazione richiede di definire nuovi percorsi di inizializzazione/instradamento per i dati • Esistono diverse soluzioni ragionevoli • I programmatori sono gli unici garanti della linearità dello sviluppo di nuove versioni e della compatibilità dei formati dei file 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 8 Fatti che orientano la ricerca • È possibile implementare l’operazione di differenziazione (seppure limitatamente) • Una singola operazione può localizzare scelte progettuali che solitamente vengono disperse nella struttura del programma Ipotesi: la programmazione ad oggetti sovraspecifica la struttura dei programmi. Non è necessario assumersi la responsabilità di definire i percorsi di inizializzazione dei dati e la composizione delle classi 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 9 Sovraspecificazioni obbligate • Sono interessato al risultato di una funzione; non ho bisogno, in generale, di vincolare tutti i parametri attuali • Spesso mi basta fissare il vincolo che il chiamante e la funzione chiamata usino lo stesso oggetto senza precisare quale 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 10 Domande funzionali alla soluzione Posso ripartire la responsabilità della determinazione dei parametri attuali tra la chiamata a funzione e la funzione chiamata? • Posso trovare un sostituto ai puntatori che lasci aperta la determinazione dell’oggetto puntato? • E posso come programmatore sottrarmi alla responsabilità di definire la struttura per rappresentare una entità complessa? 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 11 Programmazione procedurale Paradigma imperativo: Paradigma funzionale: • Dominato dal flusso del controllo • I dati hanno esclusivamente un ruolo passivo • Le funzioni non cercano di produrre i parametri attuali • Dominato dal flusso del controllo però si può scegliere la strategia di valutazione • I dati possono propagarsi verso il risultato • Le funzioni possono propagare la richiesta del risultato verso i parametri attuali 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 12 Programmazione dataflow e logica Paradigma dataflow: Paradigma logico: • Dominato dal flusso dei dati • I dati si propagano sul grafo dataflow verso tutte le operazioni che possono contribuire a calcolare • Dominato dal flusso della domanda • La richiesta di un dato si propaga verso tutte le funzioni che possono contribuire a calcolarlo 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 13 Una nuova unità funzionale: Step Entry Call Step Action Done EntryCall Idle Done EntryDone Action • Due linee di ingresso/uscita: entry-call e done-action • Una richiesta (entry) si propaga (call) solo se il risultato (done) non è disponibile • Un risultato (done) si propaga (action) solo quando viene richiesto (entry) • La propagazione del risultato (action) è una continuazione della richiesta (entry) e non dipende dalla persistenza del risultato (done) Entry Action 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 14 Soluzione prospettata • Programmazione esplicita dei flussi della domanda e dei dati • Funzioni definite a partire dal risultato, lungo la sequenza inversa • Chiamante e chiamato legati da una comune richiesta non da un comune valore • Rappresentazione disaggregata delle entità. Per ogni attributo definisco un albero di funzioni per determinare il valore in diversi contesti 16 Dicembre 1999 dato A disponibile richiesta dato B Tesi di Laurea di Riccardo Solmi 15 Conclusioni • I linguaggi attuali obbligano il programmatore a fare delle scelte vincolanti per l'utente finale • Tutti gli identificatori legati a valori (parametri, campi) sovraspecificano gli algoritmi • L'Obiettivo di Adattabilità si può raggiungere sottraendo delle responsabilità al programmatore 16 Dicembre 1999 Tesi di Laurea di Riccardo Solmi 16