- Oggetto:
- Oggetto:
Programmazione II
- Oggetto:
Programming II
- Oggetto:
Anno accademico 2022/2023
- Codice dell'attività didattica
- MFN0585
- Docenti
- Viviana Bono (Corso A)
Ferruccio Damiani (Corso A Turno 1 + Corso A Turno 2 + Corso C)
Stefano Berardi (Corso B + Corso B Turno 2)
Gianluca Torta (Corso B Turno 1)
Fabio Ciravegna (Corso C + Corso C Turno 1)
Diego Magro (Corso C Turno 2)
Alessandro Mazzei (Corso A + Corso B) - Corso di studi
- [008707] Laurea in Informatica
- Anno
- 1° anno
- Periodo didattico
- Secondo semestre
- Tipologia
- Di base
- Crediti/Valenza
- 9 CFU - Numero di ore - Number of hours: 48 (in aula) + 30 (in laboratorio)
- SSD dell'attività didattica
- INF/01 - informatica
- Modalità di erogazione
- Tradizionale
- Lingua di insegnamento
- Italiano
- Modalità di frequenza
- Facoltativa
- Tipologia d'esame
- Scritto
- Prerequisiti
-
Alle studentesse e agli studenti è richiesta la conoscenza delle nozioni fondamentali di programmazione imperativa nel linguaggio Java (comandi di assegnamento, condizionali e iterativi, tipi di dato semplici e array, nozioni di astrazione procedurale e ricorsione).
Insegnamenti propedeutici (forniscono le competenze attese in ingresso): Programmazione IStudents are expected to be knowledgeable about the fundamental notions of imperative programming in Java (assignment, conditional and iterative constructs, simple data types and arrays, procedural abstraction, and recursion).
Preparatory Courses (providing the expected entry skills): Programmazione I - Oggetto:
Sommario insegnamento
- Oggetto:
Obiettivi formativi
L’insegnamento ha l'obiettivo di approfondire concetti di informatica di base acquisiti con Programmazione I e in particolare di fornire una introduzione al paradigma di programmazione a oggetti. L'obiettivo di insegnare la programmazione fa parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare è tra quelli relativi all'area informatica di base. Si propone quindi di raffinare le capacità di programmare nel linguaggio Java apprese in Programmazione I e di introdurre le nozioni fondamentali della programmazione orientata agli oggetti. In particolare, l'insegnamento illustrerà le astrazioni fondamentali per la progettazione del software (classi e oggetti), la definizione di semplici strutture dati (liste, alberi, pile, code) e operazioni corrispondenti, i meccanismi di base per favorire riuso e modularità del software (ereditarietà, polimorfismo, tipi generici), la specifica degli invarianti di classe e gestione delle loro violazioni (asserzioni ed eccezioni), così come alcune classi fondamentali della libreria Java. Si darà particolare enfasi agli aspetti di buona progettazione del software, utilizzando concetti presi a prestito dall'ingegneria del software e formalismi grafici quali UML.
This course has the objective of refining the Java programming skills acquired in the course Programmazione I and of introducing the fundamental notions of object-oriented programming. The objective of teaching how to program is part of the "Obiettivi formativi specifici del CdS in Informatica (L31)", area "informatica di base". In particular, the course will illustrate the fundamental abstractions for software design (classes and objects), the definition of simple data structures (lists, trees, stacks, queues) and corresponding operations, the basic mechanisms to foster software reuse and modularity (inheritance, polymorphism, generic types), the specification of class invariants and the handling of their violation (assertions and exceptions), as well as some fundamental classes in the Java library. The course will stress the aspects of good software design using software engineering concepts and graphical formalisms such as UML. .
- Oggetto:
Risultati dell'apprendimento attesi
La studentessa/lo studente acquisirà la capacità di progettare e realizzare piccolo/medie applicazioni in Java sfruttando gli strumenti di base della programmazione a oggetti, imparerà a utilizzare e a realizzare alcune strutture dati fondamentali e approfondirà la conoscenza della libreria standard di Java.
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di metodologie di progettazione e implementazione di piccolo/medie applicazioni in Java.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione dell'uso di strumenti linguistici dei linguaggi orientati agli oggetti per affrontare l'applicazione alla programmazione di linguaggi, metodologie e strumenti multiparadigma.
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per stabilire come impostare una corretta progettazione e una solida implementazione delle applicazioni.
ABILITÀ COMUNICATIVE. Acquisizione e sviluppo di elementi del lessico informatico finalizzati al lavoro di progettazione e implementazione delle applicazioni tramite linguaggi multiparadigma.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica.
The student will acquire some skills for designing and implementing small/medium Java applications by exploiting the basic concepts of the object-oriented programming, will learn and build some fundamental data structures and will increase their knowledge of the Java standard library.
KNOWLEDGE AND UNDERSTANDING. Acquisition of methodologies of design and implementation of small/medium Java applications.
APPLYING KNOWLEDGE AND UNDERSTANDING. Acquisition of the use of linguistic instruments of the object-oriented jargon to tackle the application of multi-paradigm languages, methodologies and tools to programming.
MAKING JUDGMENTS. Acquisition of the basic criteria to establish how to set up a correct design and a solid implementation of applications.
COMMUNICATION SKILLS. Acquisition and development of a Computer Science vocabulary finalised to the design and implementation of the applications via multi-paradigm languages.
LEARNING SKILLS. Acquisition of autonomous learning and auto-evaluation skills of their own compentences, theoretical and practical.
- Oggetto:
Modalità di insegnamento
L’insegnamento consta di una parte teorica (48 ore) e una pratica (30 ore), eventualmente completate da ore di esercitazione decise anno per anno. La parte teorica si svolge in aula con l'ausilio di lavagna e gesso (o di alternative come tablet e tavoletta grafica) e eventualmente di un calcolatore usato dal/la docente per la proiezione di lucidi e/o lo sviluppo passo a passo dei programmi. La parte pratica si svolge nei laboratori didattici in cui il docente illustra esercizi di programmazione che le studentesse e gli studenti risolvono al calcolatore. La/il docente (ed eventualmente i tutor) supportano le studentesse e gli studenti nella risoluzione degli esercizi assegnati.
The course is organised in a theoretical part (48 hours) and a practical one (30 hours). Some extra exercise hours may be added, depending on the year. The theoretical part is in the classroom and the teaching is supported with the use of a board (or alternatives such as tablets and graphical pads) and of a computer to possibly show slides and step-by-step development of programs. The practical part is in the labs: the teacher proposes exercises to the students, which, in turns, must solve them on the computer. The teachers (and, sometimes, the tutors) help the students in their task.
- Oggetto:
Modalità di verifica dell'apprendimento
L’esame sarà SCRITTO e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito, anche se le studentesse e gli studenti potranno essere divisi in turni, per gli appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati nei giorni immediatamente precedenti il giorno ufficiale dell'esame.
- Non ci saranno differenze per le studentesse e per gli studenti dei corsi A,B,C che effettueranno l’esame insieme.
- L’iscrizione all'esame su MyUnito è obbligatoria: le studentesse e gli studenti non iscritti NON saranno in alcun caso ammessi a sostenere l’esame (attenzione: le iscrizioni chiudono una settimana prima dell’appello).
- La prova consisterà in una serie di domande a risposta chiusa e aperta sul programma dell'insegnamento, erogate tramite la Piattaforma Esami Moodle in laboratorio e/o con esercizi su carta.
- La prova scritta avrà la durata indicativamente di 120 minuti.
- All’inizio della prova verranno comunicati il link (e le eventuali password) di accesso alla pagina Moodle dell’esame, da cui si potrà accedere al testo della prova, e/o il testo degli esercizi da svolgere su carta.
- Nel caso di prova su Moodle, prima della scadenza del tempo prefissato per la prova la soluzione dovrà essere inviata tramite il bottone apposito dell'applicazione. Alla scadenza, non sarà più possibile inserire nuove risposte o modificare le vecchie.
- I risultati dell’esame scritto verranno comunicati con le consuete modalità per gli esami scritti. Si noti che il punteggio indicato da Moodle è solo indicativo e la commissione si riserva di cambiarlo riguardando le consegne.
The exam is WRITTEN and wil take place in the date/time slots published on the MyUnito website. However, depending on the number of students, there may be more than one shift, distrubuted also on days following the official date. The schedule of the shifts, if present, will be communicated some days before the official date.
- There will be no difference among the students of the A, B, C course, that will take the exam all together.
- The registration to the exam on MyUnito is mandatory and the non-registered students will not be admitted to the exam (be careful: the registrations close one week before the exam).
- The exam comprises a series of open and closed questions of the course program, presented on the Piattaforma Esami Moodle in the labs and/or exercise to be developed on paper.
- The exam is about 120 mnutes-long.
- At the beginning, there will be given the link (and the password, if needed) to acess the Moodle page where the exam text is and the text of the on-paper exercises (if any).
- In the case of a Moodle exam, the solutions must be sent by pressing the spefici button of the application before the time limit. After, there will be no possibility to add or change the answers.
- The results of the exams will be commnicated with the costumary modalities for the written examinations. Note that the points assigned automatically by Moodle are onle an indication of the final mark: the Programmazione II panel has the right to change it by examining the answers in detail.
- Oggetto:
Programma
Il programma è basato sul testo di riferimento, eventualmente integrato da dispense e/o altro materiale fornito dal/la docente e reso disponibile sulla pagina Moodle dell'insegnamento. Segue un sommario degli argomenti trattati e dei capitoli relativi sul testo di riferimento. Tale sommario non riflette necessariamente l’ordine di esposizione degli argomenti.
- Ripasso dei concetti di base della programmazione imperativa e di Java (Cap. 1-7).
- Incapsulamento, definizione di una classe, creazione e uso di oggetti (Cap. 8 e 9).
- Specializzazione di una classe, ereditarietà (Cap. 10)
- Relazioni tra classi, polimorfismo, classi parzialmente definite, interfacce (Cap. 11).
- Generalizzazione di una classe, classi parametriche, tipi generici (Cap. 12).
- Invarianti di classe, asserzioni, eccezioni e loro gestione (Cap. 13)
- progettazione e implementazione di strutture dati (liste, alberi, pile, code) (Cap. 15).
- Collezioni e iteratori (Cap. 16).
- Cenni su progettazione a oggetti e UML.
The course program is based on the reference textbook, possibly integrated with lecture notes and/or supplementary material provided by the teacher and published on the Moodle page of the course. Below is a summary of the treated topics and the corresponding chapters in the reference textbook. Such summary does not necessarily reflect the order in which these topics will be covered.
- Recap on the basic notions of imperative programming in Java (Chap. 1-7).
- Incapsulation, class definitions, creation and use of objects (Chap. 8 and 9).
- Class specialization, inheritance (Chap. 10).
- Relations among classes, polymorphism, partially defined classes, interfaces (Chap. 11).
- Class generalization, parametric classes, generic types (Chap. 12).
- Class invariants, assertions, exceptions and exception handling (Chap. 13).
- Design and implementation of data structures (lists, trees, stacks, queues) (Chap. 15).
- Collections and iterators (Chap. 16).
- Brief introduction to object-oriented design and UML.
Testi consigliati e bibliografia
- Oggetto:
- Libro
- Titolo:
- Programmazione di base e avanzata con Java, Seconda edizione (anche la prima va bene/also the first one is fine)
- Anno pubblicazione:
- 2018
- Editore:
- Pearson
- Autore:
- W. Savitch
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- Java Generics and Collections
- Anno pubblicazione:
- 2006
- Editore:
- O'Reilly
- Autore:
- M. Naftalin, P. Wadler
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- Dai fondamenti agli oggetti, Terza edizione
- Anno pubblicazione:
- 2008
- Editore:
- Pearson - Addison Wesley
- Autore:
- G. Pighizzini, M. Ferrari
- Obbligatorio:
- No
- Oggetto:
Dispense delle/dei docenti, disponibili sui siti I-learn di Programmazione II (A, B, C). Si noti che questo è uno dei testi fondamentali per questo insegnamento.
Teachers' lecture notes, available on the I-learn sites of Programming II (A, B, and C). Note that this is one of the main texts for this course.
- Oggetto: