Programmazione Avanzata

Primo Semestre 2005/2006

 

Professore

Assistente

Giuseppe Attardi

Francesco Nidito

mail: attardi@di.unipi.it

mail: nids@di.unipi.it

Ufficio: 292

Ufficio: 341

Ricevimento: mercoledí ore 10:30

Ricevimento: mercoledí ore 15:00

Obiettivi

L’evoluzione dei sistemi software verso il Web Computing coinvolge una varietà di tecniche e strumenti articolati e complessi, dalla programmazione a oggetti, alla programmazione a componenti, alla programmazione di Web Services. Per poter sfruttare a pieno le potenzialità di queste tecniche, occorre avere una comprensione approfondita della loro struttura e del loro funzionamento.

Il corso presenta i modelli di esecuzione, le tecniche e gli strumenti di programmazione avanzati. Si pone particolare attenzione al supporto necessario per il funzionamento di questi strumenti, in modo che lo studente abbia una visione chiara delle conseguenze che le scelte di design possono comportare a tutti i livelli del sistema.

Il corso è tra i fondamentali della Laurea Specialistica in Tecnologie Informatiche.

Orario

Giorno

Ora

Aula

Martedí

11-13

A1

Martedí

16-18

A

Giovedí

11-13

A1

Venerdí

11-13

E

Syllabus

Rassegna concetti di base di LP

  1. Syntax (Regular Expressions, Context-free Grammars)
  2. Scope
  3. Parameter Passing
  4. Stack, Heap
  5. Runtime
  6. Type Systems (System F, Kind)

RunTime

  1. Memory Management
  2. Execution Engine
  3. Verification
  4. Interoperability
  5. Link/Load
  6. Thread
  7. PAL
  8. Inheritance, Polymorphism, Virtual Functions, Overloading
  9. JIT
  10. Delegates, Closures

Generic Programming

  1. C++ templates
  2. Java Pizza
  3. Generics C#

Class Libraries and Frameworks

  1. .NET Framework Class Library
  2. Java Class Library

Generative Programming

  1. MetaProgramming
  2. Reflection
  3. Template C++
  4. Aspect Oriented Programming, Subject Oriented Programming
  5. Intentional Programming
  6. Generators

Interoperability

  1. socket
  2. linguaggio: CORBA/IDL
  3. oggetti: COM+

Componenti

  1. COM
  2. JavaBeans
  3. .NET (Assembly, Reflection, Interfaces, Attributes)

Web Services

  1. XML, XML-Schema
  2. SOAP, RPC, Rest
  3. WSDL
  4. UDDI

Web Frameworks and Applications

  1. Asp.Net
  2. ADO.Net
  3. J2EE
  4. Java Server Faces
  5. AJAX

Scripting

  1. Perl, Python, Jscript, PHP, Guile, Rebol

 

Lezioni

Data

Materiale

Argomento

22/09

 

Presentazione degli argomenti del corso.

23/9

Introduzione

Introduzione al corso

27/9

Names, Scopes, Binding

Binding

27/9

 

Allocazione: statica, stack, heap

29/9

 

Esercitazione: implementazione malloc e free

30/9

Scoping delle variabili. Passaggio dei parametri

4/10

GC Overview

Garbage Collection

4/10

Passato, presente e futuro dei linguaggi di programmazione

6/10

Types I

Tipi, Classificazione, Tipi Composti, Equivalenza, Conversione, Cast, Ereditarietà, Inferenza, Layout memoria struct e union.

7/10

Types II

Moduli, Abstract Data Type, Classi, Oggetti, Late-binding, Ereditarietà singola/multipla/mixin, Implementazione vtable.

11/10

Object Thinking

Pensare a oggetti.

11/10

Sospensione didattica.

13/11

Esercitazione su progettazione a oggetti: esempio di un Instant Messenger.

14/10

Sospensione per lauree.

18/10

Esercitazione: algoritmo di Waite-Schnorr.

18/10

Building a Runnable Program

Compilazione. Architettura e fasi di compilazione.

20/10

Building a Runnable Program

COFF. Linking: statico e dinamico.

21/10

Parsing

Linguaggi formali: grammatiche context-free

25/10

Coco/R
Coco/R - Compiler Generator

25/10

http://dada.perl.it/shootout/

The Great Computer Language Shootout

27/10

COM fundamentals (Part 1), by Don Box

I principi di COM

28/10

COM fundamentals (Part 1), by Don Box
Assegnazione esercizio: generatore IDL in Coco/R

I principi di COM

8/11

Soluzione esercizio su generatore IDL.
Assegazione MidTerm.

8/11

Servizi e tecnologie innovative per 3G/Wireless. Valerio Romano, Accenture.

10/11

Generic Programming in C++

Parametric Polymorphism. C++ templates

11/11

Bounded Parametric Polymorphism

Bounded Polymorphism: GJ, C#

15/11

MetaProgramming.ppt

C++ template meta-programming

15/11

Home page Luca Saiu

Introduzione ai linguaggi funzionali, Luca Saiu.

17/11

Runtime: CLR e JVM

Common Language Runtime. Delegates.

18/11

Estending SSCLI

Estendere Rotor con un'istruzione

22/11

GenerativeProgramming.ppt

Generative Programming

22/11

AspectJ Tutorial

Aspect Oriented Proframming

24/11

Confronto tra linguaggi: esempio calcolo word frequency

25/11

Sciopero

29/11

Soluzione MidTerm

Correzione MidTerm

29/11

Soluzione MidTerm

2/12

Web Services

Web Services

6/12

Web Services

Web Services. Demo

6/12

Growing Twigs

An Introduction to XML::Twig, Michel Rodriguez

9/12

Dynamic Web Pages with ASP.NET, Herbert Praehofer

Architettura di ASP.Net

13/12

J2EE.ppt

A Comparison Between J2EE and .Net, by Peter Ty

Introduzione a J2EE

13/12

Introduction AJAX, Stefano Mustardi.

15/12

Introduction to Java Server Faces

Java Server Faces

15/12

Assegnazione Final Term

16/12

Data Access with ADO.NET, Herbert Praehofer, Dietrich Birngruber

Introduzione a ADO.Net

16/12

Prospettive

Prospettive future sullo sviluppo di componenti

16/06/2006

Assegnazione Final Term (consegna il 17/06).

Edizioni precedenti

Anno Accademico 2002/03
Anno Accademico 2003/04
Anno Accademico 2004/05

Testi di Riferimento

Programming Language Pragmatics, Michael L. Scott, Morgan-Kaufmann, 2000.
(Capitoli 1, 2, 3, 4, 7.7, 9, 10, 11)
Shared Source
CLI Essentials
Shared Source CLI Essentials, David Stutz, Geoff Shilling, Ted Neward, O’Reilly, 2003.
Generative Programming: Methods, Tools, and Applications, Krzysztof Czarnecki, Ulrich Eisenecker, Addison-Wesley, 2000.
(Capitoli 6, 7, 8, 9, 10)
Applied Microsoft .NET Framework Programming , Jeffrey Richter, Microsoft Press, 2002.
Object Thinking , David West, Microsoft Press, 2004.

Materiale di Riferimento

Rotor
Sorgenti di Rotor
Java2C#
Introduzione a C# per programmatori Java
J2EE
J2EE Tutorial
J2EE
C++ Templates and Generic Programming, E. Zueff, ETH
The Great Computer Language Shootout
http://dada.perl.it/shootout/

Modalità di insegnamento

Lunedí e Martedí:
presentazione di argomenti
Giovedí:
We will issue a set of questions to guide your exploration. At the following meeting, a group of people will present their findings for the class and a general discussion will follow.
Venerdí:
seminari o discussione

Modalità di esame

Formulazione del voto:

Homework, seminari, discussioni:     20%

                                MidTerm Paper:     30%

                                       Term Paper:     50%

Lista di Homework

Esercizi