Corso di Programmazione a Oggetti e Concorrente. Anno Accademico 2003-2004.

Dipartimento di Informatica, Sistemi e Produzione. Computer Science Department.

Docente: Alberto Pettorossi. Il docente riceve dopo le lezioni e per appuntamento.

Lectures:  from 09.12.03 to 14.02.04         Corso Bis: from 09.12.03 to 14.02.04
           Monday   14:00-15:15  Room 1 PP2              Monday    9:30-11:15   Room 4 PP2
           Tuesday  11:30-13:15  Room 1 PP2              Tuesday  11:30-13:15   Room T6
           Thursday 11:30-13:15  Room 1 PP2              Thursday 14:00-15:45   Room 4 PP2

Exams:     17.02.04   15:00  (Room 3 n.e.) Primo appello
           25.02.04    9:30  (Room 2 n.e.) Secondo appello
           04.05.04   15:00  (Room 16 Ingegneria Industriale) Seminario didattico-scientifico

           06.05.04   15:00  (Aula di disegno n.e.) Appello Straordinario

           14.09.04   10:00  (Room  6 n.e.) Seminario didattico scientifico su argomenti di esame
           16.09.04   10:00  (Room  6 n.e.) Primo Appello (*)
           23.09.04   10:00  (Room 12 n.e.) SEMINARIO DIDATTICO SCIENTIFICO SU ARGOMENTI DI ESAME
           28.09.04   14:30  (Room  6 n.e.) Secondo Appello (*)

           07.12.04   15:00  (Room  11 n.e.)  Appello Straordinario (contattare personalmente il docente)
-----------------
(*)  Prenotarsi nel foglio predisposto all'ingresso dell'edificio
di Ingegneria dell'Informazione (Via del Politecnico 1, 00133 Roma)
entro sette giorni dalla data dell'appello. Non ci si puo` prenotare a entrambi gli appelli.
Inviare entro sette giorni dalla data dell'appello a: corsopoc2004@tiscali.it e ad Alberto Pettorossi
un messaggio con oggetto: POC2004_CognomeNome_Matricola
con testo: Invio in allegato i miei elaborati relativi alle due prove in itinere. Nome e Cognome.
Si alleghino due file con i programmi documentati, fatti dallo studente, relativi
alle prove in itinere con i nomi:
           POC2004_CognomeNome_Matricola_Amebe

           POC2004_CognomeNome_Matricola_Banca

Si invii il messaggio con gli allegati, anche se cio` e` stato fatto per un
appello precedente.
-----------------
Seminar: "
Fibonacci Reveals the Secrets of the Towers of Hanoi" (slides) 19.03.04

Obiettivo del corso.
Il corso intende presentare, facendo uso del linguaggio Java, alcuni concetti fondamentali della programmazione ad oggetti e,
in particolare: objects, classes, abstraction, encapsulation, inheritance, polymorphism, message passing, threads.
Il corso intende presentare anche i concetti di base della programmazione nondeterministica e di quella concorrente,
a memoria condivisa e a scambio di  messaggi. Tali concetti permettono di formalizzare e risolvere vari problemi concernenti:
(i) la mutua esclusione, (ii) le strategie di allocazione di risorse, (iii) la serializzazione di transazioni in basi di dati e
(iv) la correttezza di protocolli di comunicazione tra processi.

Programma del corso:
Programmazione a oggetti in Java. Objects, classes, abstraction, encapsulation, inheritance, polymorphism, overloading,
overriding, message passing, threads. Elementi di graphical user interfaces.
Programmazione concorrente. Programmazione nondeterministica. Vectorization.
Programmazione con shared memory: semaphores, critical regions, monitors, mutual exclusion, distributed termination.
Programmazione con message passing: CCS, alternating bit protocol.
Serializabilità di transazioni in basi di dati.

Programmazione in Java.
Java code of individual programs (.tar.gz). These programs are published in the book:
Pettorossi A.: Sequential and Concurrent Programming in Java. Aracne, 2005.

Preliminaries: Hello.java, Strings.java. Graphical Interface: TimeConvertor.java.
Recursion: Factorial.java.  Backtracking: Dispositions.java, Permutations.java,
 n-Queens: (1) Queens.java. (2) QueensSimpleSolver.java (with queen objects),
         (3) QueensSolver.java (with queen objects and graphic output).
Threads: MerryChristmas.java, CounterThread1.java, CounterThread2.java. Thread.zip.
Fibonacci: (1) Sequential: SeqFibonacci.java. (2) Exponential , parallel: FibonacciExpThread.java .
         (3) Linear, parallel Fibonacci: - ParLinearFibonacci.java, - FibThread.java, - ArrayClass.java.
Parallel MergeSort:- Maximum.java, - ParMergeSort, - MergeSortThread.
Parallel QuickSort:- Maximum.java, - ParQuickSort, - QuickSortThread.
Parallel Sum of Matrix:- FinalSum.java, - MatrixSumMain.java, - RowSumThread.java, - SumQueue.java.
Peterson's Algorithm for Mutual Exclusion: - Lock.java, - Peterson.java, - MutexTester.java.
Monitor for a queue: - QueueMonitor.java, - QueueTester.java.
Monitor for a bounded buffer: - BoundedBufferMonitor.java,  - ProducerConsumerMain.java.
Semaphores for a bounded buffer: - BinarySemaphore.java, - CountingSemaphore.java, - BoundedBuffer.java,
      - ProducerConsumerMain.java.
Monitor for the Dining Philosophers: - Resource.java, - Philosopher.java, - ForkMonitor.java.
Depth First Visit of Trees: - DepthFirstVisitofTrees.zip.
Database Example: DatabaseRAF.zip.
Abstract data types: Adt.zip.
Elements of UML: UML.zip.
Swing e sockets: Tcpchat.zip.
 

Prove in itinere: 1:Cammino minimo di un grafo. 2: Bank Accounts.
Modalità di esame:  Presentazione delle prove in itenere. Prova scritta e orale.
Prerequisiti: Fondamenti di Informatica 1. Fondamenti di Informatica 2. Algoritmi e Strutture di Dati.
Domande d'esame.

Risorse:
Java 2 SDK from http://www.blackdown.org/java-linux/mirrors.html or http://java.sun.com

BlueJ
from http://www.bluej.org/download/download.html

Eclipse from http://www.eclipse.org (textual editor and debugger for Java)

Testi consigliati:
[S] Schmidt, D.: Programming Principles in Java: Architectures and Interfaces (free download)
[P] Pettorossi, A. Elements of Concurrent Programming. Aracne 2004.
[PP] Parameter Passing.

Testi alternativi per consultazione:
[E] B. Eckel: Thinking in Java, 3/e, Prentice Hall. Free version: http://www.mindview.net/Books/TIJ
[T]  Java Tutorial: http://java.sun.com/docs/books/tutorial/
[BK]  D. J. Barnes & M. Kolling: Programmare in JAVA con BLUEJ, Addison-Wesley, 2003. (anche in inglese)
[Se] Sestoft, P.: Java Precisely MIT Press 2002.

Concise description of Java (Java 2 JDK 1.3 and 1.4) in 107 pages.  Downloal all examples here.

Printable text PDF (245 KB) and Postscript (386 KB). Browsable text with hyperlinks: PDF (410 KB)
[B] Budd, A.T.: Introduction to Object Oriented Programming with Java, Wiley, 2001.
[DD] Deitel & Deitel: Java - How to Program, Deitel & Deitel; ISBN 0131016210 (anche in italiano)

-------------------------------------------------------------
This page should be stored in:  /home/adp/www/ProgramCorsoPOC03-04.html