Corso di Programmazione Orientata agli Oggetti (corso bis: J-Z)
Anno Accademico 2004-2005.


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

Docente: Alberto Pettorossi. Il docente riceve dopo le lezioni e per appuntamento.
Professore a contratto: Dr. Fabio Lecca.

Lectures:  from 13.12.04 to 18.02.05        (No lectures from 23.12.04 to 08.01.05)
           Monday   16:00-17:45  Room 4 PP2          
           Tuesday  11:30-13:15  Room T6           
           Thursday 14:00-15:45  Room 4 PP2             

Exams:     22.02.05   15:00  (Room 3 n.e.) Seminario didattico-scientifico in preparazione all'esame
          
24.02.05   09:30  (Room 2 n.e.) Primo appello  
           01.03.05   09:30  (Room 3 n.e.) Secondo appello   

           05.09.05   16:00  (Room 11 n.e.) Seminario didattico-scientifico in preparazione all'esame
          
13.09.05   10:00  (Room 04 n.e.) Primo appello: Scritto   (*)
           20.09.05   14:00  (Room 12 n.e.) Primo appello: Orale
           27.09.05   10:00  (Room 04 n.e.) Secondo appello: Scritto (*)
           29.09.05   14:00  (Room 12 n.e.) Secondo appello: Orale

-------------------------------------
(*) 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 per entrambi gli appelli.

Inviare entro sette giorni dalla data dell'appello a: corsopoobis2005@tiscali.it e a pettorossi@info.uniroma2.it
un messaggio con oggetto:
POObis2005_CognomeNome_Matricola

con testo: Invio in allegato i miei elaborati relativi alle due prove in itinere che ho fatto da solo. Nome e Cognome.
e con allegati due file con i programmi documentati (senza screenshots), fatti dallo studente, relativi
alle prove in itinere con i nomi:
           POObis2005_CognomeNome_Matricola_Treni

           POObis2005_CognomeNome_Matricola_Biblioteca

-> Si invii il messaggio con i due allegati, anche se cio` e` stato fatto per un
appello precedente.

Norme generali di accesso agli esami:
-------------------------------------
1) Non è possibile sostenere un esame che, per conflitto col piano di studi o con l'anno di iscrizione,
non possa esser sostenuto
dallo studente nell'anno in corso.

2) Lo studente dovrà presentarsi all'esame
con il libretto di iscrizione e con una copia approvata del proprio piano
di studi (autentica
rilasciata dalla segreteria studenti) oppure, ove non l'avesse compilato (o non gli fosse stato
approvato), con un certificato dal quale risulti l'anno di
iscrizione e gli esami superati (si applica in questo caso
il piano
specificato dalla Guida dell'anno di immatricolazione e, pertanto, non sono ammesse anticipazioni).
---------------------------------------------------------------------------------------------------------------------

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, Peterson's algorithm.
Serializabilità di transazioni in basi di dati.

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

- First Sequential Programs: Printing a Message, Printing a Message Using an Object, Manipulating Strings.
- Inputting Values, Use of StringTokenizer, ArrayList, and Wrapper Classes: Palindrome Tester.
- Passing Parameters. Constructing and Changing Objects. Using Implementations and Interfaces: BankAccount.
- Elementary Graphics: Time Convertor.
- Iteration and Recursion: Iterative Factorial, Iterative Fibonacci.
- Interfaces and Inner Classes: Bubble Sort.
- The interface Comparable. Iterators and Comparators: Sorting.
- Recursive Programs: Multiplication, Factorial, Fibonacci Numbers.
- Backtracking Program: Dispositions, Permutations, Combinations. N Queens: Dijkstra's version and
   Budd's version (with/without graphics).
- Parsing Strings and Visiting Trees: Depth First Visit. Binary, Unary, and Leaf  Nodes. Stack of Trees. Console Reader.
  Manipulation of a Stack. Exceptions. Version With a Graphical User Interface.
- First Concurrent Programs: Printing Using Threads. Concurrent Counters with/without local fields.
  A concurrent, exponential program for Fibonacci Numbers. A concurrent, linear program for Fibonacci Numbers.
  Matrix Sum.
- Concurrent MergeSort, Concurrent QuickSort.
- Communications using Bounded Buffers: Bounded Buffer Controlled by Semaphores.
  Binary Semaphores, Counting Semaphores. Bounded Buffer Controlled by a Monitor. 
  Concurrent Manipulation of a Stack. Concurrent Manipulation of a Queue.
- Mutual Exclusion: Peterson's Protocol for N (>=2) processes.
- Dijkstra's Dining Philosophers.
- Interfaces: BankAccount.java, BankAccountSpecification.java.
- A Bank Account  System (Dr. Fabio Lecca). (Download transparencies here)
---------
- For other programs you may also visit: Programmazione a Oggetti e Concorrente 2003-04

Prove in itinere: 1: Viaggio in treno 2: Gestione biblioteca.   Criteri di valutazione delle prove.
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] D. Schmidt: Programming Principles in Java: Architectures and Interfaces (free download)
[P1] A. Pettorossi: Elements of Concurrent Programming. Second Edition. Second Reprint. Aracne 2005.
[P2] A. Pettorossi: Sequential and Concurrent Programming in Java. Aracne, 2005.
[PP] Parameter Passing.

Errata-Corrige of [P1] (see ECP-2.2) and [P2] (see SCPJava)

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)

-------------------------------------------------------------