====== Programmazione (Modulo di Teoria) ======
----
===== News =====
* 07/07/2020: pubblicato calendario degli esami dell'appello di luglio (vedi in fondo alla pagina)
* 26/02/2019: Le prove di programmazione del 27-28 febbraio sono rinviate, le date delle nuove prove saranno comunicate appena decise.
* 26/02/2019: Pubblicati voti finali per il primo appello (vedi in fondo alla pagina).
* 23/10/2019: Lezione posticipata, la prossima lezione di Programmazione è giovedì 24 Ottobre.
* 17/10/2019: Lezione sospesa per evento Hacktoberfest 2019.
* 14/10/2019: Lezione posticipata, la prossima lezione di Programmazione è martedì 15 Ottobre.
* 07/10/2019: Prima lezione.
* Canale telegram: PROGRAMMAZIONE1920@Unicam, https://t.me/programmazione1920Unicam
----
===== 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?cod_lingua=ita&ad_er_id=2019*N0*N0*S1*15416*8485&ANNO_ACCADEMICO=2019&mostra_percorsi=S|Programmazione - AA 2019/20]]
**Orario delle Lezioni**:
* Lunedì 14 - 16 (B1) - Laboratorio
* Martedì 9 - 11 (B1) - Laboratorio
* Mercoledì 11 - 13 (B1)
* Giovedì 9 - 11 (B1)
**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.
----
===== Materiale =====
**Slide del Corso**
* {{ :didattica:triennale:programmazione:ay_1920:progr1920_intro.pdf |Informazioni generali}}
* {{ :didattica:triennale:programmazione:ay_1920:prog1920_calcolatori_e_programmi.pdf |Calcolatori e programmi}}
* {{ :didattica:triennale:programmazione:ay_1920:prog1920_tipi_di_dato_primitivi.pdf |Tipi di dato primitivi}}
* {{ :didattica:triennale:programmazione:ay_1920:prog1920_selezione_e_ripetizione.pdf |Selezione e ripetizione}}
* {{ :didattica:triennale:programmazione:ay_1920:prog1920_metodi_e_ricorsione.pdf |Metodi e ricorsione}}
* {{ :didattica:triennale:programmazione:ay_1920:prog1920_programmazione_a_oggetti.pdf |Programmazione ad oggetti}}
**Riferimenti utili**
* Tutorial su Linux Shell ([[http://linuxcommand.org/|LinuxCommand.org]])
* Tutorial Prompt dei comandi Windows ([[https://www.swzone.it/Come-utilizzare-il-Prompt-dei-comandi-di-Windows--42075.html|link]])
* [[https://docs.oracle.com/javase/tutorial/|Java Tutorial di Oracle]]
**Lezioni**
* 07/10/2019: informazioni generali ([[https://unicam.webex.com/unicam/ldr.php?RCID=ffd6c76f88b7fdb67b74d7a720807ff5|registrazione]])
* 8/10/2019: il metodo algoritmico; problemi indecidibili ([[https://unicam.webex.com/unicam/ldr.php?RCID=e7b42a6a3f87671fe3c5f5ae8afc67d9|registrazione]])
* 9/10/2019: complessità; breve storia dei calcolatori; rappresentazione binaria ([[https://unicam.webex.com/unicam/ldr.php?RCID=f08ce35e42f5f8878a0cc73771e1c17e|registrazione]])
* 10/10/2019: algoritmi; diagrammi di flusso ([[https://unicam.webex.com/unicam/ldr.php?RCID=4f753f4ada14981deebcd33dfb285b4f |registrazione]])
* 15/10/2019: compilatori e interpreti; compilazione ed esecuzione da linea di comando; generazione di jar file ([[https://unicam.webex.com/unicam/ldr.php?RCID=62f69ce2b20b42cd978de2ce3e2aca7f|registrazione]])
* 16/10/2019: shell Linux e prompt dei comandi Windows ([[https://unicam.webex.com/unicam/ldr.php?RCID=b7c99f60a6ed4d8a987d3062b741ba95|registrazione]])
* 21/10/2019: introduzione alle funzionalità base di Eclipse; variabili; input e output in Java-- ([[https://unicam.webex.com/unicam/ldr.php?RCID=10e27789c75e42f3b0f22690245e3106|registrazione]])
* 22/10/2019: perdita di precisione; commenti; conversioni di tipo ([[https://unicam.webex.com/unicam/ldr.php?RCID=5bf1d32d5f9f4b19b3e2a2d155e32961 |registrazione]])
* 24/10/2019: conversione di tipo esplicita; precedenze fra operatori; operatori di incremento e decremento ([[https://unicam.webex.com/unicam/ldr.php?RCID=504c7347e4374b079db9fd400f4490e6|registrazione]])
* 30/10/2019: array; differenza fra array e tipi primitivi ([[https://unicam.webex.com/unicam/ldr.php?RCID=a44b800c31814b3487875a2289af16cd|registrazione]])
* 31/10/2019: esempi su array; espressioni booleane ([[https://unicam.webex.com/unicam/ldr.php?RCID=fdafb5b0f0ea4eda863a169ced2bda44|registrazione]])
* 06/11/2019: metodi; istruzione return ([[https://unicam.webex.com/unicam/ldr.php?RCID=96a35bf7ff1a420dbcb03427f9837eb7|registrazione]])
* 07/11/2019: call-by-value e call-by-reference ([[https://unicam.webex.com/unicam/ldr.php?RCID=e426c897ddee49a8976b825ee14551a9|registrazione]])
* 14/11/2019: costrutto if; costrutto if-else, diramazioni multiple; istruzione switch; cicli while e do-while ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/5d61ff3b5b694636994bd8d93ed4849a|registrazione]])
* 20/11/2019: cicli for; array length
* 21/11/2019: variabili locali; paradigma di programmazione procedurale; ricorsione ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/a23885140f944356b4bcb4fe5a14bc3d|regsitrazione]])
* 27/11/2019: Eclipse debugger e ricorsione; paradigma di programmazione orientata agli oggetti ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/08507450a91c48ad98a429962db4d390|registrazione]])
* 28/11/2019: dichiarazione di classe; creazione e distruzione di oggetti; utilizzo di oggetti ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/bd3126d82bdf43fc8d665873e92dac62|registrazione]])
* 4/12/2019: parametri formali di tipo classe; metodi costruttori; metodo main; accessori e mutatori; classe String ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/80f6fc836943468bb6345e64f1bfa57b|registrazione]])
* 5/12/2019: sovraccaricamento di metodi; Ereditarietà; Polimorfismo; Conversione di tipo classe ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/3181f5f4536a4745aa8dda6800e64008|registrazione]])
* 11/12/2019: Modificatori public e private; Pacchetti: definizione e visibilità; Incapsulamento; [[https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html|this]] ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/dbe13a40db0e415f89a1edd3153b8074|registrazione]])
* 12/12/2019: Modificatore static; Modificatore final; Eccezioni: creazione, lancio, gestione; Accesso file di testo; [[https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html|Interfacce]] e [[https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html|classi astratte]] ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/5de9474a0e1f49c4b4b1d255c9cb9833|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]]
**Esercizi**
* {{ :didattica:triennale:programmazione:ay_1920:esercizi.zip |Tipici esercizi da esame}}
----
===== Esami =====
**Fac-simile prova scritta**
* {{ :didattica:triennale:programmazione:ay_1920:fac-simile.pdf |Fac-simile}}
**Date Esami A.A. 2018/2019 **
* Appello I: 13/02/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello II: 27/02/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello III: 29/05/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello IV: 16/06/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello V: 07/07/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VI: 10/09/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VII: 24/09/2020 ore 10:00 - Polo Lodovici - Aula LA1
* Appello VIII: 02/02/2021 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.
* **Prova di programmazione**: esercizi di programmazione svolti singolarmente in laboratorio.
* **Prova orale**: solo se ritenuto necessario dai docenti.
Il voto finale è la media ponderata dei voti della prove.
**Calendario**:\\
* {{ :didattica:triennale:programmazione:ay_1920:calendarioappello5_aa1920.pdf |Calendario esame in modalità telematica dell'appello di Luglio}}