Programmazione Avanzata Giuseppe Attardi Introduzione l Preoccupazioni per

  • Slides: 25
Download presentation
Programmazione Avanzata Giuseppe Attardi

Programmazione Avanzata Giuseppe Attardi

Introduzione l Preoccupazioni per il programmatore del 21 secolo l Software complesso come mai

Introduzione l Preoccupazioni per il programmatore del 21 secolo l Software complesso come mai l Command line non basta più l Dati vanno strutturati in DB l Un singolo computer non basta l Sviluppo di software diventa lavoro di gruppo

Requisiti l Non si può partire da zero l Necessari componenti riusabili l OS

Requisiti l Non si può partire da zero l Necessari componenti riusabili l OS più librerie non bastano

Controllo sull’esecuzione l Evitare danni l Installare/disinstallare l Component software? è un incubo

Controllo sull’esecuzione l Evitare danni l Installare/disinstallare l Component software? è un incubo

Ambienti Run. Time l Java Virtual Machine l. NET Common Language Runtime l Forniscono

Ambienti Run. Time l Java Virtual Machine l. NET Common Language Runtime l Forniscono ambiente virtuale – Espone una struttura organizzata di elementi – Non semplice astrazione risorse fisiche

Vantaggi l Programmatori – Uso di strumenti e librerie – Minor tempo di integrazione

Vantaggi l Programmatori – Uso di strumenti e librerie – Minor tempo di integrazione – Maggiore produttività l Sviluppatori di tool – Elimina necessità di occuparsi di infrastruttura e interoperabilità l Amministratori e utenti – Vantaggio di soluzioni packaged – Indipendenza da processore o OS

Common Language Infrastructure l l l Espone tutti elementi in sistema tipi unificato Impacchetta

Common Language Infrastructure l l l Espone tutti elementi in sistema tipi unificato Impacchetta elementi in unità selfdescribing Carica e risolve interdipendenze a runtime Espone informazioni che consentono verifica della type-safety Execution Engine assicura politiche Metadati disponibili a runtime consentono soluzioni dinamiche e estendibili

Scopi del corso l Capire le tecnologie dei linguaggi di programmazione: – Modelli di

Scopi del corso l Capire le tecnologie dei linguaggi di programmazione: – Modelli di esecuzione – Runtime l Analizzare metafore di programmazione: – Oggetti – Componenti – Pattern Conoscere tecniche di programmazione avanzate l Capire i limiti e come superarli l

Tecniche Avanzate l Programmazione generica – C++ templates – C# Generics – Java Generics

Tecniche Avanzate l Programmazione generica – C++ templates – C# Generics – Java Generics l Programmazione generativa – Metaprogrammazione – Reflection – Template – Aspect Oriented – Generators

Programmazione Web l Web Services, SOA l Web Frameworks – J 2 EE –

Programmazione Web l Web Services, SOA l Web Frameworks – J 2 EE – ASP. Net – AJAX l Web 2. 0

Scripting Languages l Perl l Python l Java. Script l PHP

Scripting Languages l Perl l Python l Java. Script l PHP

Domanda l È veramente possibile realizzare un runtime comune a tutti i linguaggi di

Domanda l È veramente possibile realizzare un runtime comune a tutti i linguaggi di programmazione?

Più in dettaglio l Prolog – Come si implementano le variabili logiche? – Si

Più in dettaglio l Prolog – Come si implementano le variabili logiche? – Si può usare la Warren-Abstract. Machine? l PHP 3 – Perché l’assegnamento ha un comportanto insolito? l LISP – Come si trattano i multiple-values?

Prolog example append(X, Y, Z) : append(NIL, Y, Y) : append([A. X], Y, [A.

Prolog example append(X, Y, Z) : append(NIL, Y, Y) : append([A. X], Y, [A. Z] ) : - append(X, Y, Z). : - append([a. b. c], [d. e], R) R = [a. b. c. d. e]

Prolog backtrack : - append(X, Y, [a. b]) : - append(X, NIL, [a. b])

Prolog backtrack : - append(X, Y, [a. b]) : - append(X, NIL, [a. b]) X = NIL Y = [a. b] X = [a] Y = [b] X = [a. b] Y = NIL

PHP Assignement $str = ‘Ciao. ’; $str 2 = $str; $str{strlen($str) – 1} =

PHP Assignement $str = ‘Ciao. ’; $str 2 = $str; $str{strlen($str) – 1} = ‘!’; echo $str 2; l $var = $othervar – Effettua copia del valore di $othervar l $var = &$othervar – Assegnamento per reference

Controllo l Si può implementare la tail-recursion in C? l Come si tratta la

Controllo l Si può implementare la tail-recursion in C? l Come si tratta la sincronizzazione? l Puntatori a funzione? l Come chiamare una funzione arbitraria data la lista dei suoi argomenti?

invoke(fun, arglist) { if (n==0) return f(); else if (n==1) return f(arg[0]); else return

invoke(fun, arglist) { if (n==0) return f(); else if (n==1) return f(arg[0]); else return fun(arg[0], arg[1], . . , arg[n-1]); }

Tipi dato elementari l Stringhe C, Pascal e C++ sono diverse l Array in

Tipi dato elementari l Stringhe C, Pascal e C++ sono diverse l Array in ordine di riga o di colonna?

Language Interoperability l C# e Cobol si abbaiano a vicenda

Language Interoperability l C# e Cobol si abbaiano a vicenda

C# dog using System; public class Dog { public virtual void Roll. Over ()

C# dog using System; public class Dog { public virtual void Roll. Over () { Console. Write. Line("Scratch my tummy. "); Bark(); } public virtual void Bark () { Console. Write. Line("WOOF (C#)"); } }

Cobol Big. Dog 000010 CLASS-ID. Big. Dog INHERITS Dog. 000020 ENVIRONMENT DIVISION. 000040 CONFIGURATION

Cobol Big. Dog 000010 CLASS-ID. Big. Dog INHERITS Dog. 000020 ENVIRONMENT DIVISION. 000040 CONFIGURATION SECTION. 000050 REPOSITORY. 000060 CLASS Dog. 000070 OBJECT. 000080 PROCEDURE DIVISION. 000090 METHOD-ID. Bark OVERRIDE. 000160 PROCEDURE DIVISION. DISPLAY "WOOF (COBOL)". 000210 END METHOD Bark. 000220 END OBJECT. 000230 END CLASS Big. Dog.

Barfing dogs public class Demo { public static void Main() { Dog d =

Barfing dogs public class Demo { public static void Main() { Dog d = new Dog(); Big. Dog b = new Big. Dog(); d. Roll. Over(); b. Roll. Over(); } }

Final Paper Scopo di mettere alla prova capacità complessive di concezione e realizzazione di

Final Paper Scopo di mettere alla prova capacità complessive di concezione e realizzazione di soluzioni articolate l Esempi: l – Generatore di codice ASP e di matching di espressioni regolari – Implementazione di un DSL per manipolare contenitori di oggetti persistenti – Protocollo SOAP e server SOAP – Generatore di codice per SQL di ricerca su oggetti – Intreprete XPath e XSLT – Linguaggio di generazione di protocolli – Framework AJAX

Home Work l Proporre una semplice implementazione delle primitive: – void* malloc(size_t size) –

Home Work l Proporre una semplice implementazione delle primitive: – void* malloc(size_t size) – void free(void*) l Discutere i limiti della soluzione