Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoAlfonsina Cara Modificato 9 anni fa
1
Programmazione Avanzata Giuseppe Attardi
2
Introduzione Preoccupazioni per il programmatore del 21 secolo Preoccupazioni per il programmatore del 21 secolo Software complesso come mai Software complesso come mai Command line non basta più Command line non basta più Dati vanno strutturati in DB Dati vanno strutturati in DB Un singolo computer non basta Un singolo computer non basta Sviluppo di software diventa lavoro di gruppo Sviluppo di software diventa lavoro di gruppo
3
Requisiti Non si può partire da zero Non si può partire da zero Necessari componenti riusabili Necessari componenti riusabili OS più librerie non bastano OS più librerie non bastano
4
Controllo sull’esecuzione Evitare danni Evitare danni Installare/disinstallare è un incubo Installare/disinstallare è un incubo Component software? Component software?
5
Ambienti RunTime Java Virtual Machine Java Virtual Machine.NET Common Language Runtime.NET Common Language Runtime Forniscono ambiente virtuale Forniscono ambiente virtuale –Espone una struttura organizzata di elementi –Non semplice astrazione risorse fisiche
6
Vantaggi Programmatori Programmatori –Uso di strumenti e librerie –Minor tempo di integrazione –Maggiore produttività Sviluppatori di tool Sviluppatori di tool –Elimina necessità di occuparsi di infrastruttura e interoperabilità Amministratori e utenti Amministratori e utenti –Vantaggio di soluzioni packaged –Indipendenza da processore o OS
7
Common Language Infrastructure Espone tutti elementi in sistema tipi unificato Espone tutti elementi in sistema tipi unificato Impacchetta elementi in unità self- describing Impacchetta elementi in unità self- describing Carica e risolve interdipendenze a runtime Carica e risolve interdipendenze a runtime Espone informazioni che consentono verifica della type-safety Espone informazioni che consentono verifica della type-safety Execution Engine assicura politiche Execution Engine assicura politiche Metadati disponibili a runtime consentono soluzioni dinamiche e estendibili Metadati disponibili a runtime consentono soluzioni dinamiche e estendibili
8
Scopi del corso Capire le tecnologie dei linguaggi di programmazione: Capire le tecnologie dei linguaggi di programmazione: –Modelli di esecuzione –Runtime Analizzare metafore di programmazione: Analizzare metafore di programmazione: –Oggetti –Componenti –Pattern Conoscere tecniche di programmazione avanzate Conoscere tecniche di programmazione avanzate Capire i limiti e come superarli Capire i limiti e come superarli
9
Tecniche Avanzate Programmazione generica Programmazione generica –C++ templates –C# Generics –Java Generics Programmazione generativa Programmazione generativa –Metaprogrammazione –Reflection –Template –Aspect Oriented –Generators
10
Programmazione Web Web Services, SOA Web Services, SOA Web Frameworks Web Frameworks –J2EE –ASP.Net –AJAX Web 2.0 Web 2.0
11
Scripting Languages Perl Perl Python Python JavaScript JavaScript PHP PHP
12
Domanda È veramente possibile realizzare un runtime comune a tutti i linguaggi di programmazione? È veramente possibile realizzare un runtime comune a tutti i linguaggi di programmazione?
13
Più in dettaglio Prolog Prolog –Come si implementano le variabili logiche? –Si può usare la Warren-Abstract- Machine? PHP 3 PHP 3 –Perché l’assegnamento ha un comportanto insolito? LISP LISP –Come si trattano i multiple-values?
14
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]
15
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
16
PHP Assignement $str = ‘Ciao.’; $str2 = $str; $str{strlen($str) – 1} = ‘!’; echo $str2; $var = $othervar $var = $othervar –Effettua copia del valore di $othervar $var = &$othervar $var = &$othervar –Assegnamento per reference
17
Controllo Si può implementare la tail-recursion in C? Si può implementare la tail-recursion in C? Come si tratta la sincronizzazione? Come si tratta la sincronizzazione? Puntatori a funzione? Puntatori a funzione? Come chiamare una funzione arbitraria data la lista dei suoi argomenti? Come chiamare una funzione arbitraria data la lista dei suoi argomenti?
18
invoke(fun, argn, arglist) { if (n==0) return f(); return f(); else if (n==1) return f(arg[0]); return f(arg[0]);else return fun(arg[0], arg[1],.., arg[n-1]); return fun(arg[0], arg[1],.., arg[n-1]);}
19
Tipi dato elementari Stringhe C, Pascal e C++ sono diverse Stringhe C, Pascal e C++ sono diverse Array in ordine di riga o di colonna? Array in ordine di riga o di colonna?
20
Language Interoperability C# e Cobol si abbaiano a vicenda C# e Cobol si abbaiano a vicenda
21
C# dog using System; public class Dog { public virtual void RollOver () { Console.WriteLine("Scratch my tummy."); Bark(); } public virtual void Bark () { Console.WriteLine("WOOF WOOF (C#)"); public virtual void Bark () { Console.WriteLine("WOOF WOOF (C#)"); }}
22
Cobol BigDog 000010 CLASS-ID. BigDog 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 WOOF (COBOL)". 000210 END METHOD Bark. 000220 END OBJECT. 000230 END CLASS BigDog.
23
Barfing dogs public class Demo { public static void Main() { Dog d = new Dog(); BigDog b = new BigDog(); d.RollOver(); b.RollOver(); } }
24
Final Paper Scopo di mettere alla prova capacità complessive di concezione e realizzazione di soluzioni articolate Scopo di mettere alla prova capacità complessive di concezione e realizzazione di soluzioni articolate Esempi: Esempi: –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
25
Home Work Proporre una semplice implementazione delle primitive: Proporre una semplice implementazione delle primitive: –void* malloc(size_t size) –void free(void*) Discutere i limiti della soluzione Discutere i limiti della soluzione
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.