Semestre: Primavera 2020 (A.A. 2019/2020)
Dove e quando: dal 24 febbraio al 29 maggio 2020 nei giorni:
Informazioni sul docente
Docente: Prof. Roberto Navigli
Laboratorio: Prof. Roberto Navigli + Prof. Giuseppe Pirrò
Ufficio: Stanza G24, viale Regina Elena, 295, palazzina G (secondo piano)
Telefono: 06 49255161
Email: cognome chiocciola di più uniroma1 più it (se sei un essere umano, sostituisci più con punto e chiocciola con @)
Ricevimento: dopo la lezione o per appuntamento
Tutor Sapienza: Omar Bayoumi ed Eduardo Rinaldi
Tutor Unitelma: Stefano Faralli
Obiettivi
Il corso di Metodologie di Programmazione ha l'obiettivo di fornire i concetti fondamentali della programmazione orientata agli oggetti (classi e oggetti, incapsulamento, ereditarietà, polimorfismo, binding statico e dinamico, collection, tipi generici, design pattern, ecc.) permettendo allo studente di acquisire strumenti e le metodologie di base della progettazione software tramite un linguaggio orientato agli oggetti. Il linguaggio utilizzato è Java.
Non ci sono propedeuticità formali, tuttavia è consigliabile aver superato o almeno frequentato il corso di Fondamenti di Programmazione.
L'esame consta di una prova scritta e un progetto:
Dove e quando: dal 24 febbraio al 29 maggio 2020 nei giorni:
- lunedì ore 8.00-10.00 (aula Cabibbo - Edificio Fisica Enrico Fermi, piazzale Aldo Moro, 5)
- mercoledì ore 12.00-16.00 (laboratorio aule di Informatica 15-16, via Tiburtina 205)
- venerdì ore 8.00-11.00 (aula Cabibbo - Edificio Fisica Enrico Fermi, piazzale Aldo Moro, 5)
Informazioni sul docente
Docente: Prof. Roberto Navigli
Laboratorio: Prof. Roberto Navigli + Prof. Giuseppe Pirrò
Ufficio: Stanza G24, viale Regina Elena, 295, palazzina G (secondo piano)
Telefono: 06 49255161
Email: cognome chiocciola di più uniroma1 più it (se sei un essere umano, sostituisci più con punto e chiocciola con @)
Ricevimento: dopo la lezione o per appuntamento
Tutor Sapienza: Omar Bayoumi ed Eduardo Rinaldi
Tutor Unitelma: Stefano Faralli
Obiettivi
Il corso di Metodologie di Programmazione ha l'obiettivo di fornire i concetti fondamentali della programmazione orientata agli oggetti (classi e oggetti, incapsulamento, ereditarietà, polimorfismo, binding statico e dinamico, collection, tipi generici, design pattern, ecc.) permettendo allo studente di acquisire strumenti e le metodologie di base della progettazione software tramite un linguaggio orientato agli oggetti. Il linguaggio utilizzato è Java.
Programma di massima
- Introduzione alla programmazione a oggetti
- Hello, World! La REPL in Java 9
- Tipi di dato fondamentali
- Introduzione a JRE, JDK ed Eclipse
- Conversioni di tipo
- Concetti fondamentali di programmazione orientata agli oggetti
- Incapsulamento e inizializzazione di default
- La classe String
- Riferimenti a oggetti, heap & stack, metodi statici
- Strutture di controllo; costrutti iterativi
- Iterazione; array
- Costanti ed enumerazioni
- Ereditarietà, classi e metodi astratti. Le parole chiave this e super nei costruttori
- Overloading e overriding. Visibilità: public, private, protected e default.
- Ereditarietà vs. composizione.
- Polimorfismo. Downcasting e upcasting.
- La classe Object
- La parola chiave final.
- Interfacce. Differenze con le classi astratte. Ereditarietà multipla. Interfacce notevoli.
- Programmazione funzionale: interfacce funzionali ed espressioni lambda. Riferimenti a metodi.
- Stream ed espressioni lambda.
- Classi top-level, annidate statiche e interne
- Introduzione alla modularizzazione Java 9
- Eccezioni: try-catch-finally. Politica catch-or-declare. Parole chiave throw e throws. Le classi Throwable, Exception ed Error. Eccezioni checked e unchecked.
- Collezioni: gerarchia, classi fondamentali e loro metodi. Tre modi per iterare su una collezione. Iterable e Iterator. Interfaccia Comparable. Ordinamento con Comparable e Comparator
- Collezioni: insiemi e mappe senza ordinamento, con ordinamento natural e con ordinamento di inserimento. Metodi. Classi Arrays e Collections. La classe pila Stack e l'interfaccia coda Queue. Implementazione mediante LinkedList
- Input/Output
- Ricorsione in Java. Uso dell'overloading.
- Uguaglianza in Java.
- Tipi generici.
- Design pattern: strategy, observer, factory, decorator, callback, MVC.
- Reflection. La classe Class.
Prerequisiti
Non ci sono propedeuticità formali, tuttavia è consigliabile aver superato o almeno frequentato il corso di Fondamenti di Programmazione.
Testi suggeriti
E' fortemente consigliato lo studio di almeno uno dei seguenti testi:
- Claudio De Sio Cesari. Manuale di Java 9 - Programmazione orientata agli oggetti con Java standard edition 8 Hoepli, 2018.
- Herbert Schildt. Java: The Complete Reference, eleventh edition. Mcgraw-Hill Osborne Media, 2018.
- Cay S. Horstmann. Concetti di informatica e fondamenti di Java. Apogeo, 7a edizione, 2019.
Modalità d'esame
L'esame consta di una prova scritta e un progetto:
- Prova scritta: da svolgere a partire dalla sessione estiva, cui - causa Covid - si affiancherà una prova orale a conferma delle nozioni dimostrate durante la prova scritta svolta da remoto. Potrà essere sostituita da 3 prove intermedie (3 homework). Almeno 2 su 3 delle prove di "esonero" devono essere superate con almeno 18/30 (se non sostenuta, una prova varrà 0 nella media).
- Progetto: le specifiche del progetto saranno rese disponibili durante il corso. Nel caso in cui il progetto permetta lo svolgimento di gruppo, il progetto può essere svolto individualmente o, se il progetto lo consente, da un gruppo di al più 2 studenti. Il superamento del progetto richiede, oltre alla consegna di ciò che è richiesto dalle specifiche, anche una discussione individuale del progetto. Il progetto può essere consegnato 5 giorni prima della data dell'esame SCRITTO (data fissata nel calendario specificato in fondo a questa pagina). Ad esempio, se lo scritto si tiene il 25 dicembre, la consegna deve avvenire entro la mezzanotte del 20 dicembre. Il voto relativo al progetto dipende sia dal materiale consegnato che dalla discussione orale. Se ci sono significativi indizi che portano a credere che il progetto consegnato sia stato copiato in tutto o in parte, il progetto è considerato nullo per tutti gli studenti coinvolti, incluso chi ha permesso di copiare.
Date e appelli
- Scritto di giugno 2020 + homework 3: 24 giugno ore 8.30 (+25 giugno se necessario) + orale su appuntamento. L'homework 3 si svolgerà con domande/esercizi sull'ultima parte del programma secondo un calendario personalizzato che verrà condiviso online con gli studenti, ovvero: collection, generici, Comparable/Comparator, stream, pattern. Lo scritto sull'intero programma sarà invece assegnato alle ore 8.30 su Google classroom e avrà una durata di 5 ore. Prenotazione obbligatoria entro il 19 giugno all'indirizzo: https://forms.gle/nEWnB2azbz2eUj9u6
- Scritto di luglio 2020: 15 luglio ore 11 (non è necessaria la prenotazione) + orale da organizzare sulla base di un calendario. Discussione dei progetti: martedì 28 luglio a partire dalle ore 8.30
- Scritto di settembre 2020: 16 settembre ore 15 sul gruppo classroom (non è necessaria la prenotazione) + orale da organizzare sulla base di un calendario. Discussione dei progetti: martedì 22 settembre a partire dalle ore 9.30 (aggiornato)!
- Scritto del 7 gennaio 2021: ore 9 sul gruppo classroom (non è necessaria la prenotazione) + orale da organizzare sulla base di un calendario. Discussione dei progetti: su prenotazione via mail.
- Scritto di febbraio 2021: 2 febbraio ore 9 sul gruppo classroom (non è necessaria la prenotazione) + orale mercoledì 10 febbraio ore 12-14. Discussione dei progetti: giovedì 11 dalle ore 15.
Nessun commento:
Posta un commento