Advanced Programming (Programmazione Avanzata)

Fall Semester 2009/2010

Language is an instrument of human reason,
not merely a medium for the expression of thought.
G. Boole, An Investigation of the Laws of Thought, 1854

Professor

Assistant

Giuseppe Attardi

Dong (Haoyuan) Li

mail: attardi@di.unipi.it

mail: li@di.unipi.it

Office: 292

Office: 373

Hours: Thursday 11:30

Objectives

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 the structure and capabilities of these techniques is required in order to fully exploit their potential.

The objectives of this course are:

  1. 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
  2. to acquaint the students with modern principles, techniques, and best practices of advanced software construction
  3. to introduce the students to techniques of programming at higher abstraction levels, in particular generative programming, component programming and web computing
  4. 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 contribuites to prepare professionals for the role of software architect.

Schedule

Day

Time

Room

Wednesday

9-11

B

Thursday

2-4 pm

E

Friday

9-11

B

Syllabus

Programming Language Foundations

  1. Syntax, Parsing, Abstract Syntax Tree, Parser Generators
  2. Names, Scope, Binding
  3. Parameter Passing
  4. Static and Dynamic Allocaltion: Stack, Heap
  5. Types, Inheritance, Polymorphism, Virtual Functions, Overloading
  6. Delegates, Closures
  7. Exception Handling

Run-Time Systems

  1. Virtual Execution Environment
  2. Examples
  3. Verification
  4. Language Interoperability

Generic Programming

  1. C++ templates
  2. Java Generics
  3. C# Generics
  4. Bounded Polymorphism

Class Libraries and Frameworks

  1. Object-Oriented Programming and Frameworks
  2. .NET Framework Class Library
  3. Java Class Library

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

Interoperability

  1. Process level: interprocess communication
  2. Language level: CORBA/IDL
  3. Object level: DCOM

Component Based Programming

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

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: XHR, YUI, GWT
  6. Mashup and Service Oriented Architecture

Scripting

  1. Perl, Python, JavaScript, PHP, Ruby, Guile

 

Lecture Notes

Date

Material

Topics

23/09

Introduction

Introuction to the course

Previous Editions

Year 2002
Year 2003
Year 2004
Year 2005
Year 2006
Year 2008

Text Books

Programming Language Pragmatics, third ed., Michael L. Scott, Morgan-Kaufmann, 2009. Google Books preview.
Generative Programming: Methods, Tools, and Applications, Krzysztof Czarnecki, Ulrich Eisenecker, Addison-Wesley, 2000.
Object Thinking , David West, Microsoft Press, 2004.
Shared Source
CLI Essentials
Shared Source CLI Essentials, David Stutz, Geoff Shilling, Ted Neward, O’Reilly, 2003.

Reference Material

Refactoring
Refactoring: Improving the Design of Existing Code, M. Fowler, K. Beck, J. Brant, W. Opdyke and Don Roberts, Addison-Wesley, 1999
Rotor
Rotor Sources
Java2C#
Introduction to C# for Java programmers
J2EE
J2EE Tutorial
J2EE
C++ Templates and Generic Programming, E. Zueff, ETH

Assessment

Sample Term Paper Subjects

Courses Elsewhere