Programmazione (Modulo di Teoria)


  • 18 Dicembre 2017: lezione di Programmazione Teoria (ore 11-13) è annullata.
  • 11 Dicembre 2017: lezione di Programmazione Teoria (ore 11-13) è annullata.
  • 29 Novembre 2017: lezione di Programmazione Teoria (ore 14-16) è annullata.
  • 20 Novembre 2017: lezione di Programmazione Laboratorio (ore 14-16) rimpiazzata da Logica Matematica; la lezione di Programmazione Laboratorio sarà recuperata Mercoledì 22 Novembre ore 9-11.
  • 15 Novembre 2017: lezione di Programmazione Teoria (ore 14-16) rimpiazzata da Programmazione Laboratorio.
  • 6 Novembre 2017: lezione posticipata a seguito della sospensione delle attività didattiche in occasione della cerimonia di Inaugurazione dell'Anno Accademico.
  • 30-31 Ottobre 2017: lezioni di Programmazione Laboratorio del 30 e 31 Ottobre sono posticipate.
  • 17 Ottobre 2017: prima lezione di Programmazione Laboratorio (ore 9-11); alle ore 14-16 si svolgerà la lezione di Programmazione Teoria al posto di Logica Matematica
  • 16 Ottobre 2017: le lezioni di Programmazione Teoria e di Logica Matematica (in sostituzione a Programmazione Laboratorio) sono annulate
  • 11 Ottobre 2017: la lezione di Programmazione Teoria in Aula AA1, terminerà alle ore 15:00.
  • 10 Ottobre 2017: al posto della lezione di Programmazione Laboratorio verrà svolta la lezione di Programmazione Teoria in Aula AA1, ore 9-11
  • 09 Ottobre 2017: non verrà svolta la lezione di Programmazione Laboratorio, ma soltanto la lezione di Programmazione Teoria in Aula AA1, ore 11-13
  • 04 Ottobre 2017: pubblicato primo draft della traccia del progetto.
  • 04 Ottobre 2017: al posto della lezione di Programmazione Laboratorio verrà svolta la lezione di Programmazione Teoria in Aula AA1, ore 9-11
  • 03 Ottobre 2017: Non c'è lezione (Giornata di Ambientamento)

Docente:

Orario delle Lezioni:

  • Lunedì 11 - 13 (AA1)
  • Lunedì 14 - 16 (LA1) - Laboratorio
  • Martedì 9 - 11 (LA1) - Laboratorio
  • Mercoledì 14 - 16 (AA1)

Ricevimento studenti:

  • su appuntamento (via email)

D1 - CONOSCENZA E CAPACITÀ DI COMPRENSIONE
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:

  1. Conoscere i concetti base della programmazione procedurale.
  2. Conoscere i concetti base della programmazione orientata agli oggetti, con particolare riguardo al linguaggio Java.
  3. Conoscere le principali funzionalità dell'ambiente di sviluppo Eclipse.

D2 - CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:

  1. Programmare secondo il paradigma di programmazione procedurale.
  2. Programmare secondo il paradigma di programmazione ad orientata agli oggetto, tramite il linguaggio Java.

D3 - AUTONOMIA DI GIUDIZIO
Risultati attesi:
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:

  1. Identificare il modello a oggetti che descrive meglio un semplice problema.

D4 - ABILITÀ COMUNICATIVE
Risultati attesi:
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:

  1. Documentare il codice in forma chiara e comprensibile usando lo standard del linguaggio usato.

D5 - CAPACITÀ DI APPRENDIMENTO
Risultati attesi:
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:

  1. Comprendere e imparare ad usare autonomamente sintassi e semantica di altri linguaggi di programmazione, imperativi o ad oggetti, nonché librerie aggiuntive e tecnologie analoghe.

  • Algoritmi, programmi e linguaggi di programmazione.
  • Compilatori, interpreti e approccio Java.
  • Tipi di dato primitivi in Java.
  • Costrutti base di programmazione procedurale.
  • Iterazione e ricorsione.
  • Programmazione ad oggetti in Java.
  • Ambiente di sviluppo Eclipse.

  • Il progetto dovrà essere realizzato in gruppi di massimo 3 persone. La valutazione del progetto avverrà però singolarmente.
  • Eventuali dubbi sulla traccia possono essere discussi con il Prof. Culmone durante le lezioni di laboratorio.

TRACCIA DEL PROGETTO (DRAFT)

Si vuole realizzare un gioco simile al Gioco della vita.

Il gioco si svolge su una griglia bidimensionale in cui vi sono animali di due specie differenti e alimenti di un solo tipo. Una cella può contenere un solo animale o un solo alimento.

Lo stato del gioco, dato dalla distribuzione degli animali e degli alimenti sulla griglia, evolve con il tempo.

Le due specie animali si differenziano per il meccanismo riproduttivo: o si accoppiano o si clonano.

Le regole che gli animali devono rispettare sono le seguenti:

  • Si spostano di una casella per volta.
  • Quando si spostano su una cella con un alimento, lo mangiano e aumentano la loro capacità di spostarsi (cioè la loro vita) di due unità. Gli alimenti si trovano nella griglia in posizioni casuali e con una densità di al più 50% della griglia.
  • Alla nascita hanno una aspettativa di vita di 10 spostamenti.
  • Una unità di alimentazione aggiunge 2 spostamenti alla vita dell'animale.
  • Un animale in grado di clonarsi, se ha più di 20 spostamenti si clona e la sua vita si riduce a 10 spostamenti.
  • Un animale in grado di accopiarsi, se ha più di 5 spostamenti e meno di 20, si può accoppiare con un altro individuo vicino (cella adiacente).
  • Se un animale ha 0 spostamenti muore.

Scrivere un programma che, distribuiti un certo numero di individui e alimenti casualmente sulla griglia, produca il numero e il tipo degli individui dopo un certo numero di spostamenti.


Slide del Corso

Lezioni

  • 03/10/2017: informazioni generali (registrazione)
  • 04/10/2017: il metodo algoritmico; problemi indecidibili (registrazione)
  • 09/10/2017: complessità; breve storia dei calcolatori; rappresentazione binaria; algoritmi; diagrammi di flusso; compilatori e interpreti (registrazione)
  • 10/10/2017: variabili; input e output in Java–; tipi di dato primitivi; assegnazione (registrazione)
  • 11/10/2017: introduzione alle funzionalità base di Eclipse (registrazione)
  • 16/10/2017: esempio d'uso di Eclipse; perdita di precisione; commenti (registrazione)
  • 18/10/2017: conversioni di tipo; precedenze fra operatori; operatori di incremento e decremento (registrazione)
  • 23/10/2017: array; differenza fra array e tipi primitivi; espressioni booleane (registrazione)
  • 25/10/2017: espressioni booleane; Eclipse debugger (registrazione)
  • 30/10/2017: metodi; istruzione return; costrutto if; costrutto if-else, diramazioni multiple; istruzione switch (registrazione)
  • 08/11/2017: cicli: while, do-while, for; parametri formali e argomenti (registrazione)
  • 13/11/2017: variabili locali; array come parametri formali; ordinamento array (registrazione)
  • 20/11/2017: paradigma di programmazione procedurale, ricorsione (registrazione)
  • 22/11/2017: ricorsione e iterazione; paradigma di programmazione orientata agli oggetti (registrazione)
  • 27/11/2017: dichiarazione di classe; creazione e distruzione di oggetti; utilizzo di oggetti; parametri formali di tipo classe; metodi costruttori (registrazione)
  • 04/12/2017: costruttori; metodo main; accessori e mutatori (registrazione)
  • 06/12/2017: classe String; sovraccaricamento di metodi (registrazione)
  • 13/12/2017: ereditarietà, polimorfismo (registrazione 1,registrazione 2)

Testi di Riferimento

  • Pierluigi Crescenzi. Gocce di Java. Un'introduzione alla programmazione procedurale ed orientata agli oggetti (2a edizione, nuova edizione 2014). FrancoAngeli.

Strumenti


Fac-simile prova scritta

Date Esami A.A. 2017/2018

  • Appello I: 05/02/2018 ore 10:00 - Polo Lodovici - Aula LA1
  • Appello II: 27/02/2018 ore 10:00 - Polo Lodovici - Aula LA1
  • Appello III: 13/06/20178 ore 10:00 - Polo Lodovici - Aula AA1
  • Appello IV: 3/07/2018 ore 10:00 - Polo Lodovici - Aula AA1
  • Appello V: 18/07/2018 ore 10:00 - Polo Lodovici - Aula AA1
  • Appello VI: 12/09/2018 ore 10:00 - Polo Lodovici - Aula AA1
  • Appello VII: 26/09/2018 ore 10:00 - Polo Lodovici - Aula AA1
  • Appello VIII: 27/02/2019 ore 10:00 - Polo Lodovici - Aula AA1

Regole di esame:
Il raggiungimento dei risultati di apprendimento è verificato attraverso le seguenti prove:

  • Prova scritta (questionario a risposta multipla).
  • Progetto software assegnato dai docenti.
  • Prova orale (discussione del progetto e domande di teoria). La prova orale può essere sostenuta solo se è stata superata la prova scritta.

Il voto finale è la media dei voti delle prove scritta e orale.

Risultati Esame