====== Programmazione (Modulo di Teoria) ======
----
===== News =====
* 27/09/2019: Calendario prove orali appello 8 pubblicato.
* 15/09/2019: Calendario prove orali appello 7 pubblicato.
* 03/07/2019: Calendario prove orali appello 6 pubblicato.
* 17/12/2018: date le avverse condizioni meteorologiche, nella giornata di lunedì 17 dicembre TUTTE le lezioni sono sospese nella sede Unicam di Camerino.
* 11/12/2018: martedì 11/12 la lezione di Programmazione LABORATORIO è annullata.
* 10/12/2018: lunedì 10/12 la lezione di Programmazione LABORATORIO è annullata.
* 28/11/2018: mercoledì 28/11 la lezione di Programmazione Teoria è annullata.
* 26/11/2018: lunedì 26/11 la lezione di Programmazione Teoria è annullata per concomitanza con l'inaugurazione dell'anno accademico.
* 06/11/2018: martedì 6/11 la lezione di Programmazione Laboratorio è annullata.
* 31/10/2018: mercoledì 31/10 la lezione di Programmazione Teoria è annullata, perché in aula AA1 si svolgeranno le presentazioni delle tesi di laurea.
* 10/10/2018: mercoledì 10/10 al posto della lezione di Programmazione Teoria verrà svolta la lezione di Programmazione Laboratorio.
* 09/10/2018: martedì 09/10 si svolgerà regolarmente la lezione di Programmazione Laboratorio.
* 08/10/2018: lunedì 08/10 non si svolgerà la lezione di Programmazione Teoria (11:00-13:00), si svolgerà regolarmente la lezione di Programmazione Laboratorio (14:00-16:00).
* 02/10/2018: Al posto della lezione di Programmazione Laboratorio verrà svolta la lezione di Programmazione Teoria.
----
===== Informazioni Generali =====
**Docente**:
* [[http://docenti.unicam.it/pdett.aspx?ids=N&tv=d&UteId=990&ru=PA|Francesco Tiezzi]]
**Link ESSE3**
* [[https://didattica.unicam.it/Guide/PaginaADErogata.do?ad_er_id=2018*N0*N0*S1*14584*8485&ANNO_ACCADEMICO=2018&mostra_percorsi=S|Programmazione - AA 2018/19]]
**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.
* Sistema dei tipi, strutture dati di base e relativi algoritmi.
* Concetti fondamentali di programmazione procedurale.
* Iterazione e ricorsione.
* Programmazione orientata agli 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**.
* Il progetto è disponibile su [[https://drive.google.com/drive/folders/0B82FyP8YKiFocjVrV2dOME9WdFk?usp=sharing]] nel file Progetto2018
----
===== Materiale =====
**Slide del Corso**
* {{ :didattica:triennale:programmazione:ay_1819:intro_1819pdf.pdf |Informazioni generali}}
* {{ :didattica:triennale:programmazione:ay_1819:calcolatori_e_programmi_1819.pdf |Calcolatori e programmi}}
* {{ :didattica:triennale:programmazione:ay_1819:tipi_primitivi_1819.pdf |Tipi di dato primitivi}}
* {{ :didattica:triennale:programmazione:ay_1819:selezione_e_ripetizione_1819.pdf |Selezione e ripetizione}}
* {{ :didattica:triennale:programmazione:ay_1819:metodi_ricorsione_1819.pdf |Metodi e ricorsione}}
* {{ :didattica:triennale:programmazione:ay_1819:programmazione_a_oggetti_1819.pdf |Programmazione ad 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]]
**Lezioni**
* 02/10/2018: informazioni generali ([[https://unicam.webex.com/unicam/ldr.php?RCID=5ceffa522b266e086df9bd0e5049c8f0 |registrazione]])
* 03/10/2018: il metodo algoritmico; problemi indecidibili ([[https://unicam.webex.com/unicam/ldr.php?RCID=0f54ced97219dae388831accd4d9a30b|registrazione]])
* 15/10/2018: complessità; breve storia dei calcolatori; rappresentazione binaria ([[https://unicam.webex.com/unicam/ldr.php?RCID=d6a16a9fd1380c88cb90433fbea36a0f |registrazione]])
* 17/10/2018: algoritmi; diagrammi di flusso; compilatori e interpreti ([[https://unicam.webex.com/unicam/ldr.php?RCID=29e4ab93cc9e761ea320f9aa47764a75 |registrazione]])
* 22/10/2018: introduzione alle funzionalità base di Eclipse; variabili; input e output in Java--; tipi di dato primitivi; assegnazione ([[https://unicam.webex.com/unicam/ldr.php?RCID=b4c8d0110bdd9bde6f5d22ad66620a2a |registrazione]])
* 24/10/2018: perdita di precisione; commenti; conversioni di tipo; precedenze fra operatori; operatori di incremento e decremento ([[https://unicam.webex.com/unicam/ldr.php?RCID=876db5ca14cb58fbb1e6e131473aa4f5 |registrazione]])
* 29/10/2018: array; differenza fra array e tipi primitivi; espressioni booleane ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/373b167eb1fb4903a869233f404d17b6|registrazione]])
* 5/11/2018: metodi; istruzione return; call-by-value e call-by-reference; costrutto if; costrutto if-else, diramazioni multiple ([[https://unicam.webex.com/unicam/ldr.php?RCID=ce8bad09cc4b7b13baf2cfe4b9f23813|registrazione]])
* 7/11/2018: istruzione switch; cicli: while, do-while, for ([[https://unicam.webex.com/unicam/ldr.php?RCID=2eb914a1013ee473a34e211a126d8959 |registrazione]])
* 12/11/2018: Eclipse debugger; parametri formali e argomenti; variabili locali ([[https://unicam.webex.com/unicam/ldr.php?RCID=f9dbb604668050090870966fcc5e6f7d|registrazione]])
* 14/11/2018: array come parametri formali; ordinamento array; paradigma di programmazione procedurale ([[https://unicam.webex.com/unicam/ldr.php?RCID=144bf327676497baf12cc8ca4fe9eb70|registrazione]])
* 19/11/2018: ricorsione e iterazione; paradigma di programmazione orientata agli oggetti ([[https://unicam.webex.com/unicam/ldr.php?RCID=3d36e6d33b2e163f11ee2d32daa1a279|registrazione]])
* 21/11/2018: dichiarazione di classe; creazione e distruzione di oggetti; utilizzo di oggetti ([[https://unicam.webex.com/unicam/ldr.php?RCID=c177dfb48bc76c0cab0ef390c43447e2 |registrazione]])
* 3/12/2018: parametri formali di tipo classe; metodi costruttori; metodo main; accessori e mutatori ([[https://unicam.webex.com/unicam/ldr.php?RCID=710c7a32fca5ec260c5ff1de79b63aa1|registrazione]])
* 5/12/2018: classe String; Sovraccaricamento di metodi; Ereditarietà ([[https://unicam.webex.com/unicam/ldr.php?RCID=b08f11ab2da9a93e5ce1de6d36a70bd3 |registrazione]])
* 10/12/2018: polimorfismo; conversione di tipo classe ([[https://unicam.webex.com/unicam/ldr.php?RCID=acee2c92247a7bf0381b36673db28033|registration]])
* 12/12/2018: Modificatori public e private; Pacchetti: definizione e visibilità; Incapsulamento; Modificatore static ([[https://unicam.webex.com/unicam/ldr.php?RCID=de064eec06bbe04ed11d3f34a56a1e91|registration]])
* 19/12/2018: Modificatore final; Eccezioni: creazione, lancio, gestione; Accesso file di testo ([[https://unicam.webex.com/unicam/ldr.php?RCID=c102c19184cd2080e36d47e2f586dc5c|registration]])
* 7/1/2019: Esempi su modificatore static; esempi di uso di this ([[https://unicam.webex.com/unicam/ldr.php?RCID=7f729d5d3460199cde6a84d8276dde60|registrazione]])
* 9/1/2019: Interfacce e classi astratte ([[https://unicam.webex.com/unicam/ldr.php?RCID=c9176f4158828a60c9b34043bb760086|registrazione]])
* 14/1/2019: Panoramica su concetti di programmazione avanzata non trattati nel corso ([[https://unicam.webex.com/unicam/ldr.php?RCID=c612e81712e8f3bdf93ee8cfe8ab156c|registrazione]])
**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_1819:fac-simile.pdf |Fac-simile}}
**Date Esami A.A. 2018/2019**
* Appello I: 28/01/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello II: 11/02/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello III: 25/02/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello IV: 20/05/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello V: 03/06/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VI: 01/07/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VII: 13/09/2019 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VIII: 27/09/2019 ore 10:00 - Polo Lodovici - Aula LA1
**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.
** Calendario Prove Orali **
* {{ :didattica:triennale:programmazione:ay_1819:orali1819_appello8.pdf |Calendario orali Appello 8}}