====== 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}}