====== Programmazione (Modulo di Teoria) ======
----
===== News =====
* 26 Settembre 2018: calendario delle prove orali del secondo appello di settembre pubblicato (in fondo alla pagina).
* 19 Luglio 2018: calendario delle prove orali del 20 Luglio pubblicato.
* 4 Luglio 2018: calendario delle prove orali pubblicato.
* 14 Giugno 2018: calendario delle prove orali pubblicato.
* 09 Marzo 2018: calendario delle prove orali pubblicato.
* 05 Marzo 2018: risultati prova scritta secondo appello pubblicati; per sostenere la prova orale è necessario iscriversi su esse3 all'appello "Appello 2 - ORALE" del 8/3/2017. Sarà comunicato agli iscritti, via email, il calendario delle prove orali.
* 2 Marzo 2018: è stato aggiunto un appello straordinario il 7 Marzo ore 11:00, solo per coloro, che causa partecipazione seggi in qualità di scrutatori o spostamenti in altre regioni per votazioni, non possono partecipare alla prova del 5 Marzo. A tal fine, gli studenti dovranno produrre idonea documentazione, ovvero documentazione da cui risulti l'attività di scrutatore, oppure documento/tessera elettorale con timbratura che attesti l’avvenuta votazione.
* 23 Febbraio 2018: la prova scritta del secondo appello d'esame è stata posticipata al 5 Marzo, ore 10:00.
* 11 Febbraio 2018: calendario degli esami orali aggiornato.
* 10 Febbraio 2018: calendario degli esami orali aggiornato.
* 09 Febbraio 2018: calendario degli esami orali pubblicato.
* 05 Febbraio 2018: risultati prova scritta primo appello pubblicati; orali a partire da martedì 13 (vedi in fondo a questa pagina per istruzioni di prenotazione). Il calendario degli esami orali verrà comunicato giovedì pomeriggio a seguito delle indicazioni date dagli studenti che hanno superato lo scritto.
* 10 Gennaio 2018: lezioni di Programmazione Teoria terminate.
* 10 Gennaio 2018: ultima lezione di Programmazione Teoria, durata 3 ore (ore 14-17).
* 8 Gennaio 2018: prima lezione di Programmazione Teoria (ore 11-13) dopo la pausa delle festività natalizie.
* 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)
----
===== Informazioni Generali =====
**Docente**:
* [[http://docenti.unicam.it/pdett.aspx?ids=N&tv=d&UteId=990&ru=PA|Francesco Tiezzi]]
**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)
----
===== Obiettivi del Corso =====
D1 - CONOSCENZA E CAPACITÀ DI COMPRENSIONE\\
Al termine di questa attività formativa, lo studente dovrà dimostrare di essere in grado di:
- Conoscere i concetti base della programmazione procedurale.
- Conoscere i concetti base della programmazione orientata agli oggetti, con particolare riguardo al linguaggio Java.
- 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:
- Programmare secondo il paradigma di programmazione procedurale.
- 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:
- 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:
- 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:
- Comprendere e imparare ad usare autonomamente sintassi e semantica di altri linguaggi di programmazione, imperativi o ad oggetti, nonché librerie aggiuntive e tecnologie analoghe.
----
===== Contenuti del Corso =====
* 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.
----
===== Progetto =====
* 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 [[https://it.wikipedia.org/wiki/Gioco_della_vita|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.
----
===== Materiale =====
**Slide del Corso**
* {{ :didattica:triennale:programmazione:ay_1718:intro_17-18.pdf |Informazioni generali}}
* {{ :didattica:triennale:programmazione:ay_1718:capitolo01_17-18.pdf |Calcolatori e programmi}}
* {{ :didattica:triennale:programmazione:ay_1718:capitolo02_17-18.pdf |Tipi di dato primitivi}}
* {{ :didattica:triennale:programmazione:ay_1718:capitolo03_17-18.pdf |Selezione e ripetizione}}
* {{ :didattica:triennale:programmazione:ay_1718:capitolo04_17-18.pdf |Metodi e ricorsione}}
* {{ :didattica:triennale:programmazione:ay_1718:capitolo05_17-18.pdf |Programmazione a oggetti}}
**Riferimenti utili**
* [[https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html|Parola chiave "this"]]
* [[https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html|Interfacce]]
* [[https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html|Classi e metodi astratti]]
**Testi di Riferimento**
* Pierluigi Crescenzi. Gocce di Java. Un'introduzione alla programmazione procedurale ed orientata agli oggetti (2a edizione, nuova edizione 2014). FrancoAngeli.
**Strumenti**
* [[https://github.com/LorenzoBettini/javamm | Java--]]
* [[http://www.vogella.com/tutorials/Eclipse/article.html | Eclipse Tutorial]]
----
===== Esami =====
**Fac-simile prova scritta**
* {{ :didattica:triennale:programmazione:ay_1718:fac-simile.pdf |Fac-simile}}
**Date Esami A.A. 2017/2018**
* Appello I: 05/02/2018 ore 10:00 - Polo Lodovici - Aula LA1/LA2
* 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 **
* {{ :didattica:triennale:programmazione:ay_1718:calendario_v1.pdf |Calendario prove orali del 1 Ottobre 2018}}