Strumenti Utente

Strumenti Sito


Questa è una vecchia versione del documento!

Advanced Programming

Teacher: Giuseppe Attardi Question Time: Wednesday, 11:00 AM

Assistant: Antonio Valerio Miceli Barone

Master (Laurea Magistrale): Informatics and Networking and Informatics.

Day Hour Room
Tuesday 11-13 C, Polo Fibonacci
Wednesday 14-16 B1, Polo Fibonacci
Friday 9-11 A, Polo Fibonacci

Tests and Exams

Midterm Test: Mid Term, deadline 21/11/2011.

Final Test: Final Term, deadline 12/02/2012.

Final Test: Final Term, deadline 21/07/2012.

Final Test: Final Term, deadline 11/09/2012.


The text of the project has been posted illegally to the site Freelancer, violating both the rules of the test as well as copyright laws. As a consequence all submissions will be carefully scrutinized for authenticating their author and it is possible that the whole test will be canceled. Any further attempts to illegally post the project in similar ways will be monitored.


The evolution of software systems towards Web Computing involves a variety of complex techniques and tools, from object-oriented programming, to component-based programming, to Web Service programming. A deep understanding of these techniques and their capabilities is required in order to fully exploit their potential.

The objectives of this course are:

  • to provide the students with a deep understanding of how high level programming concepts and metaphors map into executable systems and which are their costs and limitations
  • to acquaint the students with modern principles, techniques, and best practices of advanced software construction
  • to introduce the students to techniques of programming at higher abstraction levels, in particular generative programming, component programming and web computing
  • to present state-of-the-art frameworks incorporating these techniques.

This course will provide a deep understanding of modern software technologies, so that the students will be able to evaluate the effects of each design choice through all levels of a software architecture, in terms of performance, reliability, adaptability and integrability into larger systems.

The course is a required course for the Laurea Magistrale in Informatica as well of the Laurea Magistrale in Informatica e Networking, and contributes to prepare professionals for the role of software architect.


  1. Programming Language Foundations
    1. Syntax, Parsing, Abstract Syntax Tree, Parser Generators
    2. Names, Scope, Binding
    3. Parameter Passing
    4. Static and Dynamic Allocation: Stack, Heap
    5. Types, Inheritance, Polymorphism, Virtual Functions, Overloading
    6. Delegates, Closures
    7. Exception Handling
  2. Run-Time Systems
    1. Virtual Execution Environment
      1. Memory Management
      2. Thread Management
      3. Exception Handling
      4. Security
      5. Debugging Support
      6. AOT and JIT Compilation
      7. Dynamic Link/Load
      8. Reflection
    2. Examples
      1. JVM
      2. CLR
    3. Verification
    4. Language Interoperability
  3. Generic Programming
    1. C++ templates
    2. Java Generics
    3. C# Generics
    4. Bounded Polymorphism
  4. Class Libraries and Frameworks
    1. Object-Oriented Programming and Frameworks
      1. Use of polymorphism in framework design
      2. Extensibility, adaptability, performance of OOP
    2. Inversion of control
    3. .NET Framework Class Library
    4. Java Class Library
  5. Generative Programming
    1. MetaProgramming
    2. Reflection
    3. Template C++
    4. Aspect Oriented Programming
    5. Runtime code generation: LINQ
    6. Generators
    7. Program optimization and transformation
    8. Partial evaluation
  6. Interoperability
    1. Process level: interprocess communication
    2. Language level: CORBA/IDL
    3. Object level: DCOM
  7. Component Based Programming
    1. COM
    2. JavaBeans
    3. .NET (Assembly, Reflection, Interfaces, Attributes)
    4. OSGi
  8. Web Services
    1. XML, XML-Schema
    2. SOAP, RPC, Rest
    3. WSDL
    4. UDDI
  9. Web Frameworks and Applications
    1. Asp.Net
    2. ADO.Net
    3. J2EE
    4. Java Server Faces
    5. AJAX: XHR, YUI, GWT
    6. Mashup and Service Oriented Architecture
  10. Scripting
    1. Perl, Python, JavaScript, PHP, Ruby, Guile

Lecture Notes

Date Lecture Notes
13/9/2011 Programming Preliminaries
14/9/2011 Programming Preliminaries
16/9/2011 Programming Preliminaries
20/9/2011 Programming Preliminaries
21/9/2011 Programming Preliminaries
23/9/2011 Programming Preliminaries
27/9/2011 Introduction to the course Intro.ppt
28/9/2011 Parsing Parsing.ppt
30/9/2011 LL(1) Languages
4/10/2011 Recursive Descent Parsing
5/10/2011 Regular Languages and Expressions
7/10/2011 Names, Scopes, Binding name-scopes-binding.ppt
11/10/2011 Memory management malloc.pdf
11/10/2011 Garbage Collection gcoverview.ppt
12/10/2011 Scoping: static, lexical, dynamic
14/10/2011 Parameter Passing parameterpassing.pdf
Static and Dynamic Linking buildingrunnableprogram.pdf
19/10/2011 Introduction to COM COM Fundamentals
Types types.ppt
21/10/2011 Web Services Web Services
25/10/2011 The Java Virtual Machine JVM
26/10/2011 CLI and the Common Language Runtime CLR
28/10/2011 Delegates, Lambdas and Closures in CLR
8/11/2011 Generic Programming polymorphism.ppt
9/11/2011 Parametric Polymorphism
11/11/2011 Bounded Parametric Polymorphism Generative Programming
15/11/2011 C++ Template Metaprogramming templatemetaprogramming.pdf
16/11/2011 Generators Generators
18/11/2011 Apect Oriented Programming AspectJ Tutorial
22/11/2011 Correction to Mid Term
23/11/2011 Introduction to C# Introduction to C#
29/11/2011 LINQ Introduction to LINQ
30/11/2011 Dynamic Web Pages ASP .NET
2/12/2011 AJAX, Json Ajax Overview Json
6/12/2011 jQuery Introduction to jQuery
7/12/2011 HTML 5 HTML 5

Text books

Previous Editions

magistraleinformatica/pa/start.1345987000.txt.gz · Ultima modifica: 26/08/2012 alle 13:16 (11 anni fa) da Giuseppe Attardi