====== Programmazione (Modulo di Teoria) ====== ---- ===== News ===== * 12/07/2021: Risultati e calendario appello 12 luglio pubblicati. * 29/06/2021: Risultati e calendario appello 28 Giugno pubblicati. * 15/06/2021: Risultati e calendario appello Giugno pubblicati. * 27/04/2021: Risultati e calendario appello Aprile pubblicati. * Turorato a sportello: E' stato attivato un servizio di tutorato a richiesta. Chi fosse interessato su svolgimento di esercizi, prove d'esame, e chiarimenti sul linguaggio Java può contattare i tutor Andrea Piermarteri [[mailto:andrea.piermarteri@unicam.it]] e Lorenzo Matteucci [[mailto:lorenzo.matteucci@unicam.it]] o via telegram [[https://t.me/joinchat/AWwJex0h8z_U-BcMAAe4DA]]. Gli incontri si terranno su piattaforma WebEx [[https://unicam.webex.com/meet/rosario.culmone]] con calendario [[https://calendar.google.com/calendar/u/1?cid=YmluMjlxZTNjZ3ZkbjkzajFwNzE4M25iamtAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ]] da 17 aprile 2021 a 30 giugno 2021. La cartella [[https://drive.google.com/drive/folders/13b44Xxxq0Qoe6CQ2CN_zK78F9N9W9J04?usp=sharing]] verrà utilizzata per la condivisione di esercizi e soluzioni. * 25/02/2021: Risultati secondo appello pubblicati. [[https://unicam.webex.com/unicam/ldr.php?RCID=4df8c2142a0f4cf6b5310f15b5fae2bf|correzione prova di programmazione]] * 11/02/2021: Risultati e calendario primo appello pubblicati. * 15/12/2020: Fine lezioni del modulo di teoria. * 13/11/2020: Da lunedì 16 le lezioni di Programmazione Teoria e Laboratorio riprenderanno secondo l'orario regolare. Le lezioni si svolgeranno, così come tutte quelle del primo anno, in Aula AA1 del Polo Lodovici. * 08/11/2020: Le lezioni di Programmazione Teoria del 10/11 e del 11/11 saranno sostituite da lezioni di Programmazione Laboratorio svolte nello stesso orario dal Prof. Rosario Culmone. Stanza webex: https://unicam.webex.com/meet/rosario.culmone * 03/11/2020: in ottemperanza all'ordinanza n. 41 del 2 novembre 2020 emanata dal Presidente della Giunta Regionale, le attività didattiche di tutti i corsi di laurea in tutte le sedi dell’Ateneo saranno svolte esclusivamente in modalità telematica da domani 4 novembre e fino a nuova comunicazione. * 19/10/2020: Prima lezione di Programmaizone Laboratorio. Stanza webex: https://unicam.webex.com/meet/rosario.culmone * 14/10/2020: Lezione posticipata, la prossima lezione di Programmazione è giovedì 15 Ottobre. * 01/10/2020: Lezione posticipata, la prossima lezione di Programmazione è lunedì 5 Ottobre. * 29/09/2020: Prima lezione di Programmazione Teoria. * Canale telegram: PROGRAMMAZIONE2021@Unicam ---- ===== 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=2020*N0*N0*S1*14695*8485&ANNO_ACCADEMICO=2020&mostra_percorsi=S|Programmazione - AA 2020/21]] **Orario delle Lezioni**: * Lunedì 14 - 16 (BXIII) - Laboratorio * Martedì 14 - 16 (BXIII) * Mercoledì 11 - 13 (BXIII) * Giovedì 9 - 11 (BXIII) - Laboratorio **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_2021:prog2021_intro.pdf |Informazioni generali}} * {{ :didattica:triennale:programmazione:ay_2021:1_prog2021_calcolatori_e_programmi.pdf |Calcolatori e programmi}} * {{ :didattica:triennale:programmazione:ay_2021:2_prog2021_tipi_di_dato_primitivi.pdf |Tipi di dato primitivi}} * {{ :didattica:triennale:programmazione:ay_2021:3_prog2021_selezione_e_ripetizione.pdf |Selezione e ripetizione}} * {{ :didattica:triennale:programmazione:ay_2021:4_prog2021_metodi_e_ricorsione.pdf |Metodi e ricorsione}} * {{ :didattica:triennale:programmazione:ay_2021:5_prog2021_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** Dichiarazione di Copyright ({{ :didattica:triennale:programmazione:ay_2021:dichiarazione_di_copyright.pdf |PDF}}) * 29/09/2020: informazioni generali; il metodo algoritmico ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/d0ddcf675e9c4b2bbf3e3342f4d74031|registrazione]]) * 30/09/2020: problemi indecidibili; complessità; breve storia dei calcolatori ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/df7bf348b21a4f249a93b061f14242e4|registrazione]]) * 05/10/2020: rappresentazione binaria; shell Linux e prompt dei comandi Windows ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/01167ae524f542a6bb80a9b0a30ffc3f|registrazione]]) * 06/10/2020: algoritmi; diagrammi di flusso; compilatori e interpreti ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/54d25af821734cd0b6f3a7dfbfc58cd0|registrazione]]) * 07/10/2020: compilazione ed esecuzione da linea di comando; generazione di jar file ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/0e7f887b025a422aab4f00d63da3dfc5|registrazione]]) * 08/10/2020: introduzione alle funzionalità base di Eclipse; variabili ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/1e55d065a3504c56aba35ce8b563b838|registrazione]]) * 12/10/2020: input e output in Java--; dichiarazione variabili; assegnamento ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/623a0c19d6014a62bdc5bf74403c410f|registrazione]]) * 13/10/2020: perdita di precisione; commenti; conversione di tipo implicita ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/728c49ab2e7d42a1ba9cd7661e768cc8|registrazione]]) * 15/10/2020: conversione di tipo esplicita; precedenze fra operatori; operatori di incremento e decremento ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/90a055dd5efd4bc8aeba01cd6b42b01b|registrazione]]) * 20/10/2020: array ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/548fc36d52be420aa336131c74c66975|registrazione]]) * 21/10/2020: differenza fra array e tipi primitivi; esempi su array ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/a958a95d6cf24d95945aadf0344bd742|registrazione]]) * 27/10/2020: espressioni booleane; metodi ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/c5703cce88c94bd9b8b293e05048a9c2|registrazione]]) * 03/11/2020: istruzione return; costrutto if; costrutto if-else ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/420d2b2b30ae405a9b575f5688cfde31|registrazione]]) * 04/11/2020: diramazioni multiple; istruzione switch; cicli while e do-while ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/2a87aed12c344e3d80d0032809975e16|registrazione]]) * 17/11/2020: cicli for; array length, eclipse debugger ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/6e2cda214022460a869aa920b6ffa7db|registrazione]]) * 18/11/2020: call-by-value e call-by-reference; variabili locali ([[https://unicam.webex.com/recordingservice/sites/unicam/recording/playback/8feef264f2754fc4b1551d823036500e|registrazione]]) * 24/11/2020: paradigma di programmazione procedurale; ricorsione ([[https://unicam.webex.com/unicam/ldr.php?RCID=35e641e1c1ba4e4c982c8be15152d2dc|registrazione]]) * 25/11/2020: paradigma di programmazione orientata agli oggetti; dichiarazione di classe; creazione e distruzione di oggetti ([[https://unicam.webex.com/unicam/ldr.php?RCID=137c76c7e09348c39510a34f32dc5bbb|registrazione]]) * 01/12/2020: utilizzo di oggetti; parametri formali di tipo classe; metodi costruttori; metodo main ([[https://unicam.webex.com/unicam/ldr.php?RCID=1c9307c3a1974ff6ae4969e5ba1f4fe7|registrazione]]) * 02/12/2020: accessori e mutatori; classe String; sovraccaricamento di metodi ([[https://unicam.webex.com/unicam/ldr.php?RCID=332ee5975873427f824773fa8e374325|registrazione]]) * 09/12/2020: Ereditarietà; Polimorfismo; Conversione di tipo classe; ; Interfacce e classi astratte ([[https://unicam.webex.com/unicam/ldr.php?RCID=7a7c0b2eb01f43e2bd50e8ddbb24679a|registrazione]]) * 15/12/2020 (ultima lezione del modulo di teoria): Modificatori public e private; Pacchetti: definizione e visibilità; Incapsulamento; Modificatore static; Modificatore final; Eccezioni: creazione, lancio, gestione; Accesso file di testo ([[https://unicam.webex.com/unicam/ldr.php?RCID=2091d4ccfde84d3da6b0406d10e163f2|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--]] * Installazione Java-- per Windows 10: * Scaricare ed installare JDK versione Java SE 14: * Link: [[https://www.oracle.com/java/technologies/javase/jdk14-archive-downloads.html]] * File da scaricare: jdk-14_windows-x64_bin.exe * Impostare le variabili di ambiente PATH e JAVA_HOME: * Aprire impostazione di sistema (simbolo dell'ingranaggio) * Nella casella di testo "Trova" scrivere "variabili" e quindi selezionare "Modifica variabili di ambiente per l'account" * Selezionare variabile Path e premere il pulsante modifica * Aggiungere il cammino della cartella "bin" all'interno della cartella in cui è stato installato JDK (es. C:\Program Files\Java\jdk-14\bin) * Premere il pulsante "Nuova" e specificare la variabile JAVA_HOME con la cartella in cui è stato installato JDK (es. C:\Program Files\Java\jdk-14) * Testare sul prompt dei comandi se i programmi java e javac funzionano correttamente e controllare che siano aggiornati alla versione 14. * Scaricare ed installare Eclipse con integrato il plugin javamm (ultima versione): * Link: [[https://sourceforge.net/projects/javamm/files/products/1.10.0/]] * File da scaricare: javamm-ide-1.10.0-v20181001-1303-win32.win32.x86_64.zip * In caso sia attivo Windows Defender, l'avvio dell'app potrebbe essere bloccato; cliccare su "Ulteriori informazioni" e poi premere il bottone "Esegui comunque" ---- ===== Esami ===== **Date Esami A.A. 2020/2021 ** * Appello I: 09/02/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello II: 23/02/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello III: 14/06/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello IV: 28/06/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello V: 12/07/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello VI: 13/09/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello VII: 27/09/2021 ore 10:00 - Polo Lodovici - Aula LA1 * Appello VIII: 07/02/2022 ore 10:00 - Polo Lodovici - Aula LA1 **Regole di esame**:\\ Il raggiungimento dei risultati di apprendimento è verificato attraverso le seguenti prove: * **Prova di programmazione**: esercizi di programmazione di 1 ora circa svolti singolarmente in laboratorio (la prova sarà svolta tramite Webex in caso di impedimenti dipendenti dalla emergenza COVID; la motivazione di tale impedimento dovrà essere preventivamente comunicata tramite email ai docenti del corso e al manager didattico). * **Prova orale**: basata sull'elaborato consegnato nella prova di programmazione e sulla teoria. Istruzioni per la prova di esame: * La prova di programmazione consiste nella scrittura di un programma Java da svolgere in 1 ora. La traccia dell'esercizio verrà inviata alle ore 10:00 tramite email da esse3 (la consegna in ritardo implica l'immediato fallimento della prova). * I file .java del programma scritto come soluzione alla traccia assegnata dovranno essere inviati ai docenti (francesco.tiezzi@unicam.it, rosario.culmone@unicam.it) tramite email istituzionale (nome.cognome@studenti.unicam.it). Tale email dovrà avere l'oggetto della forma seguente "programmazione_20210209 - nome cognome matricola", non dovrà contenere testo, ma solo i programmi Java in allegato (non verranno presi in considerazione file .class, .jar o di altro tipo). * Nello svolgimento della prova potrà essere utilizzato il proprio computer e qualunque editor/IDE. E' consentito l'accesso alla rete Internet, ma non è permessa la interazione con altri studenti o persone esterne. L'incapacità durante la prova orale di spiegare adeguatamente il codice consegnato implicherà l'immediato fallimento dell'esame. * Il programma Java consegnato verrà valutato per l'ammissione alla prova orale. Pertanto, la valutazione della prova di programmazione sarà AMMESSO oppure NON AMMESSO. * Terminata la valutazione di tutte le prove di programmazione, verrà pubblicata la lista degli ammessi all'orale con il relativo calendario delle prove orali. Le prove orali avranno inizio a partire da lunedì 15 Febbraio. Potranno essere segnalati tramite email eventuali problemi con la data proposta per l'orale, in base alla quale aggiorneremo nei limiti del possibile il calendario. * Alla prova orale verranno discussi aspetti tecnici e di progettazione del programma Java consegnato. Inoltre, la prova orale verterà anche su nozioni di teoria e aspetti pratici affrontati durante i moduli di Teoria e Laboratorio del corso. * La prova orale può essere sostenuta anche in uno degli appelli successivi. In caso in cui la prova orale non sia superata, o in caso di rifiuto del voto proposto, all'appello successivo lo studente dovrà ripetere anche la prova di programmazione. ** Risultati prova di programmazione ** {{ :didattica:triennale:programmazione:ay_2021:risultati_12_luglio_2021.pdf |Risultati della prova di programmazione del 12 Luglio 2021 e Calendario orali}}