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
Scarica

Introduzione