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