- Oggetto:
- Oggetto:
Principi di Programmazione Orientata agli Oggetti
- Oggetto:
Principles of Object-Oriented Programming
- Oggetto:
Anno accademico 2025/2026
- Codice attività didattica
- INF0332
- Docenti
- Liliana Ardissono (Corso A)
Viviana Bono (Corso B)
Jeremy James Sproston (Corso A Turno 1)
Sara Capecchi (Corso B Turno 1)
Luigi Di Caro (Corso B Turno 2)
Elisa Marengo (Corso A Turno 2) - Corso di studio
- [008707] Laurea in Informatica
- Anno
- 2° anno
- Periodo
- Secondo semestre
- Tipologia
- Di base
- Crediti/Valenza
- 9 CFU - Numero di ore - Number of hours: 48 (lezioni/theory) + 30 (esercitazioni/practice)
- SSD attività didattica
- INF/01 - informatica
- Erogazione
- Tradizionale
- Lingua
- Italiano
- Frequenza
- Facoltativa
- Tipologia esame
- Scritto
- Tipologia unità didattica
- corso
- Prerequisiti
-
Alle studentesse e agli studenti è richiesta la conoscenza delle nozioni fondamentali di programmazione imperativa (comandi di assegnamento, condizionali e iterativi, tipi di dato semplici e array, nozioni di astrazione procedurale, ricorsione, strutture dati principali).
Insegnamenti propedeutici (forniscono le competenze attese in ingresso): Programmazione I e Programmazione II.
Students are expected to be knowledgeable about the fundamental notions of imperative programming (assignment, conditional and iterative constructs, simple data types and arrays, procedural abstraction, recursion, main data structures).
Preparatory Courses (providing the expected entry skills): Programmazione I and Programmazione II. - Oggetto:
Sommario insegnamento
- Oggetto:
Avvisi
- Oggetto:
Obiettivi formativi
L’insegnamento ha l'obiettivo di estendere i concetti e la capacità di programmazione acquisiti con Programmazione I e Programmazione II. In particolare, si vuole fornire una introduzione al paradigma di programmazione orientata agli oggetti tramite il linguaggio Java. L'obiettivo di insegnare la programmazione fa parte degli Obiettivi formativi specifici del CdS in Informatica (L31), infatti è tra quelli relativi all'area informatica di base. 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, wild card), la specifica degli invarianti di classe e gestione delle loro violazioni (asserzioni ed eccezioni). 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.
The course aims to extend the programming concepts and skills acquired with Programmazione I and Programmazione II. In particular, we want to provide an introduction to the object-oriented programming paradigm by means of Java language. The objective of teaching programming is part of the specific ”Obiettivi formativi specifici del CdS in Informatica (L31)”, in particular it is among those relating to the “informatica di base” area. 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 promote reuse and modularity of the software (inheritance, polymorphism, generic types, wild cards), the specification of class invariants and handling of their violations (assertions and exceptions). Particular emphasis will be given to aspects of good software design, using concepts borrowed from software engineering and graphical formalisms such as UML.
- Oggetto:
Risultati dell'apprendimento attesi
La studentessa/lo studente acquisirà la capacità di progettare e realizzare applicazioni di piccole e medie dimensioni 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 dei principi e degli strumenti linguistici dei linguaggi orientati agli oggetti. Acquisizione delle metodologie di progettazione e implementazione di applicazioni di piccole e medie dimensioni in Java.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Utilizzo dei principi, degli strumenti e delle metodologie acquisite per progettare e implementare applicazioni di piccole e medie dimensioni in Java secondo un approccio multiparadigma (orientato agli oggetti e imperativo).
AUTONOMIA DI GIUDIZIO. Acquisizione dei criteri di base per comprendere il codice sviluppato da altre persone e 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, implementazione e valutazione delle applicazioni tramite linguaggi multiparadigma.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, teorica e pratica. Alla fine dell’insegnamento, i discenti avranno le conoscenze necessarie per poter apprendere le funzioni avanzate della programmazione ad oggetti, altri linguaggi orientati agli oggetti e per mantenersi aggiornati sugli sviluppi del settore tecnologico.
The student will acquire some skills for designing and implementing small/medium Java applications by exploiting the basic concepts of 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 the principles and of the linguistic instruments of object-oriented languages. Acquisition of the methodologies for the design and the implementation of small/medium Java applications.
APPLYING KNOWLEDGE AND UNDERSTANDING. Usage of the acquired principles, instruments and methodologies to design and implement small/medium Java applications according to a multiparadigm approach (object-oriented and imperative).
MAKING JUDGMENTS. Acquisition of the basic criteria for understanding code developed by other people and for establishing 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 competencies, theoretical and practical. At the end of the course, the students will have the knowledge needed to learn advanced object-oriented programming and to be up-to-date on the technological developments.
- Oggetto:
Programma
Il programma è basato sulle dispense rese disponibili sulla pagina I-learn dell’insegnamento, integrate con il testo di riferimento “Paul J. Deitel - Harvey M. Deitel, Programmare in Java - 11/Ed.” e/o altro eventuale materiale fornito dal/dalla docente. Segue un sommario degli argomenti trattati. Tale sommario non riflette necessariamente l’ordine di esposizione degli argomenti.
- Ripasso dei concetti di base della programmazione imperativa: principali differenze tra C e Java.
- Incapsulamento, definizione di una classe, creazione e uso di oggetti.
- Specializzazione di una classe, ereditarietà.
- Relazioni tra classi, polimorfismo, classi parzialmente definite, interfacce.
- Generalizzazione di una classe, classi parametriche, tipi generici, wild card.
- Invarianti di classe, asserzioni, eccezioni e loro gestione.
- Progettazione e implementazione di strutture dati (liste, alberi, pile, code).
- Iteratori.
- Cenni su progettazione a oggetti e UML.
- Alcuni esempi di design pattern (Composite, Singleton, State).
The course program is based on the teachers’ lecture notes published on the I-learn page of the course, integrated with the reference textbook “Paul J. Deitel - Harvey M. Deitel, Programmare in Java - 11/Ed.” and possibly with supplementary material provided by the teacher. Below is a summary of the treated topics. Such a summary does not necessarily reflect the order in which these topics will be covered.
- Recap on the basic notions of imperative programming: main differences between C and Java.
- Encapsulation, class definitions, creation and use of objects.
- Class specialisation, inheritance.
- Relations among classes, polymorphism, partially defined classes, interfaces.
- Class generalisation, parametric classes, generic types, wild cards.
- Class invariants, assertions, exceptions and exception handling.
- Design and implementation of data structures (lists, trees, stacks, queues).
- Iterators.
- Brief introduction to object-oriented design and UML.
- Some examples of design patterns (Composite, Singleton, State).
- 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, anche tramite lo sviluppo passo a passo dei programmi al calcolatore. 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), possibly integrated with some extra exercise hours, depending on the year. The theoretical part is in the classroom and the teaching is supported with step-by-step development of programs at the computer. The practical part is in the labs: the teacher proposes exercises to the students, which, in turn, 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. Tuttavia, 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 canali A e B che effettueranno l’esame insieme.
- L’iscrizione all'esame su MyUnito è obbligatoria: le studentesse e gli studenti non iscritti NON potranno in alcun caso sostenere l’esame (attenzione: le iscrizioni chiudono approssimativamente una settimana prima dell’appello).
-
Nello specifico, la prova scritta sarà organizzata come segue:
- Pre-test: svolgimento di alcuni esercizi a calcolatore, da effettuarsi in apposito appello in itinere della durata di un’ora. Il risultato del pre-test è un voto tra 0 e 31 (31 vale per la lode). Il superamento del pre-test (si considerano sufficienti i voti ≥18) è condizione necessaria per poter partecipare allo scritto e permette di partecipare a qualunque esame scritto fino a Febbraio 2026.
- Esame scritto della durata di 2 ore. Esame svolto su carta, in aula. Consisterà in tre esercizi sul programma dell'insegnamento. Il voto è un numero intero compreso tra 0 e 31 (31 vale per la lode). Si considerano sufficienti i voti ≥18.
- Il voto finale dell’esame viene calcolato come segue:
voto finale = ¾ * voto dell’esame scritto + ¼ * voto del pre-test
The exam is WRITTEN and will 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, distributed 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 course, who 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 around one week before the exam).
-
The exam will be organized in the following way:
- Pre-test: development of solutions to exercises to be done via computer, which will take place in specific exam sessions lasting one hour. The result of the pre-test is a score between 0 and 31 (31 corresponds to “30 cum laude”). Passing the pre-test (where a score of ≥18 is considered as a "pass") is necessary for admission to the written exam, and allows the participation in any written exam until February 2026.
- Two-hour written exam: paper-based exam, held in the lecture rooms. Consists of three exercises based on the course programme. The exam mark is an integer number between 0 and 31 (31 corresponds to “30 cum laude”). Only marks equal to or greater than 18 are considered as a “pass”.
- The overall exam mark is calculated as follows:
overall exam mark = ¾ * written exam mark + ¼ * pre-test exam mark
Testi consigliati e bibliografia
- Oggetto:
- Libro
- Titolo:
- Programmare in Java - 11/Ed.
- Anno pubblicazione:
- 2020
- Editore:
- MyLab
- Autore:
- Paul J. Deitel - Harvey M. Deitel
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- UML Distilled - 4/Ed.
- Anno pubblicazione:
- 2017
- Editore:
- Pearson
- Autore:
- M. Fowler
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- Java Generics and Collections
- Anno pubblicazione:
- 2006
- Editore:
- O'Reilly
- Autore:
- M. Naftalin, P. Wadler
- Obbligatorio:
- No
- Oggetto:
Dispense delle/dei docenti, disponibili sui siti I-learn di Principi della programmazione orientata agli oggetti (A, B). Si noti che questo è uno dei testi fondamentali per l’insegnamento. Per quanto riguarda gli altri testi consigliati:
- “Programmare in Java - 11/Ed.”: è un testo con un approccio molto pratico alla programmazione in Java.
- “UML Distilled - 4/Ed”: è una guida minimale al formalismo di progettazione UML, che verrà introdotto in questo corso e trattato anche in corsi successivi.
- “Java Generics and Collections”: è un testo che copre aspetti teorici e pratici dei generici e aiuta a usare al meglio questa caratteristica avanzata ma utilissima di Java.
Teachers' lecture notes, available on the I-learn sites of Principles of object-oriented programming (A, B). Note that this is one of the main texts for this course. As for the other recommended texts:
- “Programmare in Java - 11/Ed.”: is a text with a very practical approach to programming in Java.
- “UML Distilled - 4/Ed”: is a minimal guide to the UML design formalism, which will be introduced in this course and also covered in subsequent courses.
- “Java Generics and Collections”: is a text that covers theoretical and practical aspects of generics and helps to make the best use of this advanced but very useful feature of Java.
- Oggetto:
Insegnamenti che mutuano questo insegnamento
- Istituzioni di Principi di Programmazione Orientata agli Oggetti (inf0405)Corso di laurea magistrale in Informatica
- Istituzioni di Principi di Programmazione Orientata agli Oggetti (inf0405)
- Oggetto: