Programmazione Avanzata - Laboratorio Multimediale
Download
Report
Transcript Programmazione Avanzata - Laboratorio Multimediale
Programmazione Avanzata
Giuseppe Attardi
Introduzione
Preoccupazioni per il programmatore
del 21 secolo
Software complesso come mai
Command line non basta più
Dati vanno strutturati in DB
Un singolo computer non basta
Sviluppo di software diventa lavoro
di gruppo
Requisiti
Non si può partire da zero
Necessari componenti riusabili
OS più librerie non bastano
Controllo sull’esecuzione
Evitare danni
Installare/disinstallare è un incubo
Component software?
Ambienti RunTime
Java Virtual Machine
.NET Common Language Runtime
Forniscono ambiente virtuale
– Espone una struttura organizzata di
elementi
– Non semplice astrazione risorse fisiche
Vantaggi
Programmatori
– Uso di strumenti e librerie
– Minor tempo di integrazione
– Maggiore produttività
Sviluppatori di tool
– Elimina necessità di occuparsi di
infrastruttura e interoperabilità
Amministratori e utenti
– Vantaggio di soluzioni packaged
– Indipendenza da processore o OS
Common Language Infrastructure
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
Capire le tecnologie dei linguaggi di
programmazione:
– Modelli di esecuzione
– Runtime
Analizzare metafore di programmazione:
– Oggetti
– Componenti
– Pattern
Conoscere tecniche di programmazione
avanzate
Capire i limiti e come superarli
Tecniche Avanzate
Programmazione generica
– C++ templates
– C# Generics
– Java Generics
Programmazione generativa
– Metaprogrammazione
– Reflection
– Template
– Aspect Oriented
– Generators
Programmazione Web
Web Services, SOA
Web Frameworks
– J2EE
– ASP.Net
– AJAX
Web 2.0
Scripting Languages
Perl
Python
JavaScript
PHP
Domanda
È veramente possibile realizzare un
runtime comune a tutti i linguaggi di
programmazione?
Più in dettaglio
Prolog
– Come si implementano le variabili
logiche?
– Si può usare la Warren-AbstractMachine?
PHP 3
– Perché l’assegnamento ha un
comportanto insolito?
LISP
– Come si trattano i multiple-values?
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])
X = NIL
Y = [a . b]
X = [a]
Y = [b]
X = [a . b]
Y = NIL
PHP Assignement
$str = ‘Ciao.’;
$str2 = $str;
$str{strlen($str) – 1} = ‘!’;
echo $str2;
$var = $othervar
– Effettua copia del valore di $othervar
$var = &$othervar
– Assegnamento per reference
Controllo
Si può implementare la tail-recursion
in C?
Come si tratta la sincronizzazione?
Puntatori a funzione?
Come chiamare una funzione
arbitraria data la lista dei suoi
argomenti?
invoke(fun, argn, 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
Stringhe C, Pascal e C++ sono
diverse
Array in ordine di riga o di colonna?
Language Interoperability
C# e Cobol si abbaiano a vicenda
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#)");
}
}
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.
Barfing dogs
public class Demo
{
public static void Main()
{
Dog d = new Dog();
BigDog b = new BigDog();
d.RollOver();
b.RollOver();
}
}
Final Paper
Scopo di mettere alla prova capacità complessive
di concezione e realizzazione di soluzioni
articolate
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
Home Work
Proporre una semplice
implementazione delle primitive:
– void* malloc(size_t size)
– void free(void*)
Discutere i limiti della soluzione