Metodologie di Programmazione

Canale A-D
2° semestre  A.A. 2009-2010



PAGINA AGGIORNATA PERIODICAMENTE



Docente
:   Francesco Parisi-Presicce
Studio :  Via Salaria 113, terzo piano, stanza 345a    
telefono 06 4991 8514
Email : parisi (AT) di   (DOT) uniroma1 (DOT) it  (inserire nel Subject  MetodProgr)
Orario ricevimento studenti: martedì e giovedì   16:30 - 18:00 (fino al 12 giugno) e per Appuntamento
Esercitazioni:  dott. Gianni Franceschini     francesc (AT) di (DOT) uniroma1 (DOT) it 
Studio :  Via Salaria 113, terzo piano, stanza 318


AVVISI



E’ un insegnamento integrato con il corso di Fondamenti di programmazione per portare lo studente a sviluppare programmi di buona qualità

 PROGRAMMA BREVE

Le basi della programmazione orientata agli oggetti e il linguaggio Java: classi e oggetti, ereditarietà, polimorfismo.
Tipi astratti di dato. Implementazione di strutture dinamiche di dati lineari e non lineari. Ricorsione base ed avanzata (generazione di sequenze ed enumerazione).
Gli strumenti di sviluppo: librerie e frameworks. Introduzione alle metodologie di base della progettazione software tramite linguaggi orientati agli oggetti.
Le attività di laboratorio comprendono la familiarizzazione con l'ambiente di programmazione ad oggetti e l'implementazione di progetti guidati di piccole/medie dimensioni.

 MODALITÀ D'ESAME

L'esame consiste in una prova scritta e un progetto.

  Prova scritta

In aprile è prevista una prova scritta intermedia relativa a tutti gli argomenti del corso svolti fino a quel punto. Negli appelli di giugno, luglio, e settembre, la prova scritta è divisa in due parti. La prima parte riguarda gli stessi argomenti della prova intermedia e la seconda parte riguarda gli argomenti del corso svolti dopo la prova intermedia. In ognuno di questi appelli si può scegliere se sostenere solo una delle due parti o entrambe. Quindi, chi ha superato la prova intermedia può completare la prova scritta sostenendo solamente lo scritto relativo alla seconda parte. Chi non ha superato la prova intermedia, oppure intende migliorarne il voto, ha la facoltà di sostenere, in ognuno di questi appelli, una sola delle due parti (o la prima o la seconda). Se alla fine della sessione autunnale si è superata una sola delle due parti allora il relativo voto è perso perchè nella sessione invernale la prova scritta non è più divisa in due parti.

  Progetto

Durante il mese di aprile verrà comunicata la specifica del progetto (cioè, tutte le informazioni relative a come svolgere il progetto).
Il progetto può essere svolto da un gruppo di uno, due o tre studenti.
Il superamento del progetto richiede, oltre alla consegna di tutto ciò che è richiesto dalle specifiche, anche una discussione individuale circa il progetto consegnato. Il voto dipende dal materiale consegnato, dalla struttura del progetto ed i suoi dettagli implementativi, e dalla discussione orale.
Se ci sono significativi indizi che portano a credere che il progetto consegnato sia stato copiato in tutto o in parte, il progetto è considerato nullo.

  Superamento dell'esame

Per superare l'esame bisogna aver superato sia la prova scritta che la prova di progetto, entrambe con almeno la sufficienza (18/30).
Il voto finale è la media ponderata dei voti ottenuti: 60% prova scritta e 40% progetto.
Non ci sono vincoli circa l'ordine in cui le due prove devono essere superate. Tuttavia la validità dei voti ottenuti nelle due prove termina con l'ultima sessione dell'a.a. 2009-2010, e se tali voti non danno luogo alla verbalizzazione dell'esame entro la sessione invernale gennaio-febbraio 2011, sono persi.


 DIARIO delle LEZIONI

(da aggiornare)  


  ESERCIZI

  1. Scrivere un programma che legge (fino a quando incontra un numero negativo) una serie di numeri interi positivi e stampa i tre numeri più grandi della serie. Ad esempio, se la serie di numeri è [ 4, 12, 8, 5, 1, 11, 3 ] allora il programma stampa:
    I tre numeri più grandi sono: 12, 11, 8
  2. Una tripla pitagorica è una tripla di numeri interi a, b, c tali che   1 <= a <= b <= c   e   a2 + b2 = c2. Tali terne a, b, c sono le misure dei lati di un triangolo rettangolo (da qui il nome). Scrivere un programmma che legge un intero M e stampa tutte le triple pitagoriche con c <= M.
  3. Scrivere un programma che legge un intero n e stampa le cifre di n in lettere. Ad esempio, se n = 3427, il programma stampa: tre quattro due sette.
  4. Definire una nuova classe Data per rappresentare date. I campi necessari, tutti di tipo intero, sono giorno, mese e anno.
    Definire
  5. Aggiungere alla classe Employee un campo di tipo Data che contiene la data di nascita del dipendente. Modificarnee il costruttore in modo che prenda come argomento anche la data di nascita espressa tramite una stringa.
  6. Definire delle classi per la gestione (semplificata) di operazioni bancarie, secondo le seguenti indicazioni.
  7. Scrivere un programma che legge dalla linea di comando il pathname di un file di testo e un intero n e stampa a video le n parole più frequenti del file.
    1. Definire una classe ElencoParole che permette di lavorare con elenchi di parole. La classe deve definire almeno i seguenti costruttore e metodi:
      ElencoParole(String pathname)
      Costruisce un oggetto di tipo ElencoParole relativo al file specificato da pathname (che si suppone contenga un elenco di parole).
      int numeroParole()
      Ritorna il numero di parole dell'elenco.
      boolean trova(String par)
      Cerca la parola par nell'elenco e se la trova ritorna true, altrimenti ritorna false.
      String[] trova(String[] parArray)
      Ritorna in un array tutte le parole dell'array parArray che compaiono nell'elenco. Se nessuna parola compare nell'elenco ritorna un array con zero componenti.
    2. Aggiungere alla classe ElencoParole dell'esercizio precedente un metodo String[] ortografia(String par) che se la stringa par non compare nell'elenco allora ritorna in un array tutte le parole dell'elenco che differiscono da par solamente in un carattere. Se invece la stringa par è presente nell'elenco, allora ritorna null. Ecco alcuni esempi:
      STRINGA DI INPUT 	PAROLE RITORNATE
      alvero albero altero alzero avvero
      orologie omologie orologio urologie
      proglamma programma
      porgramma ARRAY VUOTO
      programma NULL
      ostografia optografia ortografia
    3. Aggiungere alla classe ElencoParole dell'esercizio sopra un metodo String[] anagrammi(String par) che ritorna in un array tutte le parole dell'elenco che sono anagrammi della parola par. Ecco alcuni esempi:
      PAROLA DI INPUT 	ANAGRAMMI
      albero albore lobare
      torta ratto rotta trota
      parole polare
      programma NESSUN ANAGRAMMA
      giornale algerino laringeo regalino rigelano rilegano
    4. Implementare un metodo uniElenchi(String path1, String path2, String unipath) che unisce in un nuovo elenco (scritto nel file specificato da unipath) tutte le parole degli elenchi contenuti nei file specificati da path1 e path2. Si assume che ogni linea dei file contiene esattamente una parola e che le parole sono ordinate alfabeticamente. Il nuovo file deve contenere anch'esso le parole una per linea, ordinate alfabeticamente e senza ripetizioni. Ecco un esempio con elenchi molto piccoli:
      ELENCO 1 	ELENCO 2 	ELENCO UNIONE
      albero alba alba
      borsa albero albero
      dirottare botte borsa
      programma programma botte
      zuppa zoppa dirottare
      zuppa programma
      zoppa
      zuppa

  BIBLIOGRAFIA (per consultazione)

  1. C.S.Horstmann, Concetti di Informatica e Fondamenti di Java, Apogeo, 2010
  2. P.J.Deitel, H.M.Deitel Programmazione Java - Fondamenti, Pearson Education Italia, 2008
    P.J.Deitel, H.M.Deitel Programmazione Java - Tecniche avanzate, Pearson Education Italia, 2008
  3. S.J.Metsker, Design Pattern in Java, 2003 Pearson Education Italia
  4. B.Eckel, Thinking in Java 4th ed., Mindview, Inc., QUI
  5. Java for C and C++ Programmers QUI
  6. C.S.Horstmann, OO Design and Patterns 2nd ed. QUI
  7. W.H.Ford, W.R.Topp, Data Structures with Java OutOfPrint
  8. G.Pighizzini, M.Ferrari, Dai Fondamenti agli Oggetti: corso di programmazione in Java , 2008 Pearson Education Italia sito