CODICE 48382 ANNO ACCADEMICO 2024/2025 CFU 6 cfu anno 2 MATEMATICA 9011 (LM-40) - GENOVA 6 cfu anno 3 MATEMATICA 8760 (L-35) - GENOVA 7 cfu anno 2 STATISTICA MATEM. E TRATTAM. INFORMATICO DEI DATI 8766 (L-35) - GENOVA 6 cfu anno 1 MATEMATICA 9011 (LM-40) - GENOVA SETTORE SCIENTIFICO DISCIPLINARE INF/01 LINGUA Italiano SEDE GENOVA PERIODO 1° Semestre MATERIALE DIDATTICO AULAWEB PRESENTAZIONE L'insegnamento introduce: I concetti di algoritmo, tipo di dato (valori + operazioni), implementazione, tecniche per valutare la complessita' di un'implementazione; I principi fondamentali della programmazione orientata a oggetti. I linguaggi Java e Python con esercitazioni pratiche in laboratorio. OBIETTIVI E CONTENUTI OBIETTIVI FORMATIVI Introduzione a: tipi di dato; algoritmi, strutture dati e valutazione della loro complessita'; programmazione orientata a oggetti sull'esempio del linguaggio java; implementazione di tipi di dato in Java. OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO Un tipo di dato, comprendente valori e operazioni che vi agiscono, e' la controparte concettuale di un modulo software. Il processo che porta dal tipo di dato al modulo software comprende la definizione di strutture dati (per la memorizzazione dei valori) e algoritmi (procedimenti per eseguire le operazioni). Un algoritmo e' la descrizione a passi di un procedimento che, dato un input, produce un output. La stessa trasformazione input-output puo' essere realizzata con diversi algoritmi. Per scegliere fra le possibili alternative e' opportuno valutarne prima la complessita' computazionale (occupazione di memoria, tempo di esecuzione) con apposite tecniche. Infine, si procede alla scrittura di codice in un linguaggio di programmazione. L'insegnamento Programmazione 2 fornirà a chi ha già nozioni base di programmazione, gli strumenti per realizzare tutti i passaggi sopra elencati, che portano da un tipo di dato fino ad un'implementazione realizzata nei due linguaggi selezionati, Java e Python. In particolare, Java è un linguaggio orientato a oggetti, con struttura organizzata in classi, particolarmente adatto alla realizzazione di moduli software che sono classi e impementano un tipo di dato. Python è un linguaggio con sintassi molto leggera, simile al linguaggio naturale inglese, molto versatile e adatto alla protitipazione rapida. L'attività di laboratorio, pari a quasi la metà delle ore di didattica, è fondamentale per imparare a programmare nei due linguaggi scelti e per mettere in pratica quanto visto a lezione. Anche le parti apparentemente "teoriche" sono finalizzate a fornire gli strumenti concettuali utili per lo sviluppo di soluzioni software di buona qualità. Chi avrà seguito l'insegnamento: Sara' in grado di valutare la complessita' di strutture dati ed algoritmi semplici. Conoscera' alcuni algoritmi classici e alcuni tipi di dato classici e sara' in grado di implementarli. Conoscera' il paradigma di programmazione orientato a oggetti e le parti fondamentali dei linguaggi Java e Python. Sara' in grado di scrivere programmi strutturati in linguaggio Java e semplici programmi in linguaggio Python. PREREQUISITI Conoscere i concetti basilari della programmazione con linguaggio imperativo: istruzione, variabile, ciclo, funzione, argomento, risultato, tipaggio delle variabili. Conoscere concetti matematici e logici di base: operazione, argomento, risultato, dominio, codominio, operatori logici, ecc. MODALITA' DIDATTICHE L'insegnamento prevede lezioni in aula e in laboratorio coordinate fra loro, con circa meta' delle ore in laboratorio. Include lo svolgimento di esercitazioni in Java e in Python, che costituiscono parte della prova d'esame (ved. modalita' di esame e di accertamento). PROGRAMMA/CONTENUTO Concetti di Tipo di dato, algoritmo, implementazione. Introduzione alla complessita' spaziale e temporale, tecniche di valutazione della complessita' (per algoritmi iterativi e algoritmi ricorsivi). Alcuni tipi di dato classici: pila, coda, dizionario. Alcuni algoritmi per problemi classici: ordinamento e/o operazioni sui grafi. Paradigma di programmazione object-oriented e linguaggio Java: Classi e oggetti, uguaglianza e copia di oggetti, costruttori, clientship, ereditarietà, overriding, eccezioni. Linguaggio Python: Interprete interattivo, tipaggio dinamico, tipi contenitori (liste, tuple, dizionari) e operazioni, funzioni, classi, ereditarietà, eccezioni. Esercitazioni pratiche nei due linguaggi Java e Python. TESTI/BIBLIOGRAFIA Dispense del corso disponibili su aulaweb (in italiano). Manuali e tutorial on-line (in inglese). Libri in inglese: M.T.Goodrich, R.Tamassia, M.H.Goldwasser, Data structures and algorithms in Java, John Wiley & Sons. (2014) C.Horstmann, R.D.Necaise, Python for everyone, John Wiley & Sons.(2018) Traduzioni italiane: M.T.Goodrich, R.Tamassia, M.H.Goldwasser, Algoritmi e strutture dati in Java, Apogeo (2015) C.Horstmann, R.D.Necaise, Concetti di informatica e fondamenti di Python, Apogeo (2019) DOCENTI E COMMISSIONI PAOLA MAGILLO Ricevimento: Ricevimento su appuntamento concordabile via email (paola.magillo@unige.it) Commissione d'esame PAOLA MAGILLO (Presidente) DAVIDE ANCONA ELENA ZUCCA SCHILLANI (Presidente Supplente) LEZIONI INIZIO LEZIONI Dal 23 settembre 2024 secondo l'orario riportato qui Orari delle lezioni L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy ESAMI MODALITA' D'ESAME L'esame consiste in: esercitazioni pratiche da svolgere in laboratorio e da consegnare durante il semestre, e una prova orale. Le esercitazioni valgono per tutto l'anno accademico, dalla sessione di gennaio fino a quella di settembre compresa. Per gli studenti con disabilità o con DSA si rimanda alla sezione Altre Informazioni. MODALITA' DI ACCERTAMENTO Durante il semestre sono date delle esercitazioni pratiche di laboratorio, una in Java e una in Python. Tali esercitazioni sono da svolgersi a gruppi di due studenti e prevedono la consegna del codice e di documentazione scritta. Sara' valutata la correttezza e la qualita' del codice e della documentazione, producendo una scala di livelli del tipo sufficiente-benino-bene-ottimo. La scadenza ultima per la consegna e' di norma entro la fine del semestre. Alla consegna dell'esercitazione segue una breve discussione informale nella quale i due membri del gruppo dovranno presentarne i punti salienti. L'orale consiste in domande sul contenuto dell'insegnamento e puo' includere la scrittura di esempi in codice (Java o Python) o pseudocodice. Per superare l'esame bisognera' mostrare di aver compreso i concetti e di essere in grado di applicare le tecniche viste a lezione, e di padroneggiare la sintassi dei due linguaggi di programmazione Java e Python. Il voto finale tiene conto della prova orale e della valutazione delle esercitazioni di laboratorio. Calendario appelli Data appello Orario Luogo Tipologia Note 08/01/2025 09:00 GENOVA Orale 05/02/2025 09:00 GENOVA Orale 19/09/2025 09:00 GENOVA Esame su appuntamento ALTRE INFORMAZIONI E' fortemente consigliato avere gia' seguito l'insegnamento Programmazione 1. Si ricorda alle studentesse e agli studenti con disabilità o con disturbi specifici dell'apprendimento (DSA) che per poter richiedere adattamenti in sede d'esame occorre prima inserire la certificazione sul sito web di Ateneo alla pagina servizionline.unige.it nella sezione “Studenti”. La documentazione sarà verificata dal Settore servizi per l’inclusione degli studenti con disabilità e con DSA dell’Ateneo, come indicato sul sito federato al link: STATISTICA MATEMATICA E TRATTAMENTO INFORMATICO DEI DATI 8766 | Studenti con disabilità e/o DSA | UniGe | Università di Genova | Corsi di Studio UniGe Successivamente, con significativo anticipo (almeno 10 giorni) rispetto alla data di esame occorre inviare una e-mail al/alla docente con cui si sosterrà la prova di esame, inserendo in copia conoscenza sia il docente Referente di Scuola per l'inclusione degli studenti con disabilità e con DSA (sergio.didomizio@unige.it) sia il Settore sopra indicato. Nella e-mail occorre specificare: • la denominazione dell’insegnamento • la data dell'appello • il cognome, nome e numero di matricola dello studente • gli strumenti compensativi e le misure dispensative ritenuti funzionali e richiesti. Il/la referente confermerà al/alla docente che il/la richiedente ha diritto a fare richiesta di adattamenti in sede d'esame e che tali adattamenti devono essere concordati con il/la docente. Il/la docente risponderà comunicando se sia possibile utilizzare gli adattamenti richiesti. Le richieste devono essere inviate almeno 10 giorni prima della data dell’appello al fine di consentire al/alla docente di valutarne il contenuto. In particolare, nel caso in cui si intenda usufruire di mappe concettuali per l’esame (che devono essere molto più sintetiche rispetto alle mappe usate per lo studio) se l’invio non rispetta i tempi previsti non vi sarà il tempo tecnico necessario per apportare eventuali modifiche. Per ulteriori informazioni in merito alla richiesta di servizi e adattamenti consultare il documento: Linee guida per la richiesta di servizi, di strumenti compensativi e/o di misure dispensative e di ausili specifici Agenda 2030 Istruzione di qualità Parità di genere