- Area di Scienze
- Corso di Laurea Triennale
- Matematica [E3502Q - E3501Q]
- Insegnamenti
- A.A. 2025-2026
- 2° anno
- Algoritmi e Programmazione
- Introduzione
Syllabus del corso
Obiettivi
Scopo di questo insegnamento è rendere lo studente in grado di progettare un sistema software a oggetti, integrando diversi tipi di strategie di problem solving.
Coerentemente con gli obiettivi formativi del Corso di Studio, l'insegnamento si propone di fornire allo studente le conoscenze di base riguardanti la progettazione e implementazione di sistemi software secondo il paradigma della programmazione a oggetti. Verranno altresì fornite le competenze necessarie a modellare semplici domini attraverso il linguaggio UML e codificarli in linguaggio di programmazione Java, secondo il paradigma della programmazione a oggetti.
Al termine dell’insegnamento, lo studente sarà in grado di:
- Conoscenza e capacità di comprensione
Acquisire le conoscenze di base relative alla progettazione e implementazione di sistemi software secondo il paradigma della programmazione a oggetti. - Conoscenza e capacità di comprensione applicate
Applicare tali conoscenze alla modellazione di semplici domini utilizzando il linguaggio UML e alla loro implementazione in linguaggio Java, seguendo i principi della programmazione a oggetti. - Autonomia di giudizio
Integrare diverse strategie di problem solving per affrontare criticamente scelte progettuali e implementative in un contesto software orientato agli oggetti. - Abilità comunicative
Comunicare in modo efficace le soluzioni progettuali, utilizzando correttamente il lessico tecnico della programmazione a oggetti e degli strumenti di modellazione. - Capacità di apprendimento
Sviluppare la capacità di apprendere in autonomia ulteriori tecniche e strumenti relativi alla progettazione e sviluppo di software object oriented
.
Contenuti sintetici
Il corso si prefigge l’obiettivo di insegnare la programmazione ad oggetti e cenni di progettazione del software. Alla fine del corso lo studente dovrà essere in grado di modellare un problema secondo il paradigma a oggetti e di tradurlo in un programma scritto in un linguaggio object-oriented. Il linguaggio di riferimento è Java.
Programma esteso
- Introduzione ai concetti fondamentali del paradigma a oggetti (incapsulamento, ereditarietà, polimorfismo) e al linguaggio UML (Unified Modeling Language)
- Cenni al ciclo di vita del software.
- Java come linguaggio e come piattaforma.
- Il paradigma a oggetti base nel contesto Java: classi e oggetti, attributi e metodi.
- Il paradigma a oggetti avanzato nel contesto Java: ereditarietà e polimorfismo.
- Eccezioni, ArrayList, Generics a Collection Framework
Prerequisiti
Programmazione strutturata (corso di Laboratorio di Matematica e Informatica)
Modalità didattica
- Lezione frontale, 4 cfu
- Esercitazione frontale, 1 cfu
- Laboratorio frontale, 1 cfu
Si utilizza un approccio didattico ibrido che combina didattica frontale (DE) e didattica interattiva (DI). La DE include la presentazione e spiegazione dettagliata dei contenuti teorici. La DI prevede interventi attivi degli studenti sia tramite domande e richieste durante le esercitazioni pratiche in presenza che tramite esercizi e problemi svolti durante i laboratori pratici, supportati da un tutor/esercitatore.
Le lezioni si svolgono in presenza e sono tenute in italiano, per 32 ore (4 CFU).
Le esercitazioni si svolgono in presenza e sono tenute in italiano, per 12 ore (1 CFU).
I Laboratori sono a distanza e sono tenuti in italiano, per 12 ore (1 CFU).
In caso di necessità logistiche, alcune ore potrebbero essere erogate da remoto, in modalità online o offline.
Materiale didattico
Tutte le informazioni sul corso, le slide presentate a lezione e le esercitazioni da svolgere in laboratorio verranno fornite tramite la piattaforma elearning di ateneo all’indirizzo elearning.unimib.it.
Testo di riferimento:
- W. Savitch: "Programmazione di base e avanzata con Java", a cura di Daniela Micucci, 3° edizione, Pearson
Periodo di erogazione dell'insegnamento
Secondo semestre
Modalità di verifica del profitto e valutazione
Modalità dell’esame
Prova scritta e prova orale facoltativa (a richiesta dello studente che abbia ottenuto valutazione dello scritto almeno pari a 26/30). Valutazione con voto in trentesimi 18-30 e lode. La prova orale, che può riguardare sia domande teoriche che svolgimento di esercizi pratici di programmazione, ha peso inferiore alla prova scritta, determinando un incremento massimo di 4 punti rispetto al risultato della prova scritta.
La prova scritta è divisa in due parti: nella prima si valutano, attraverso una serie di domande a risposta chiusa, le conoscenze dei fondamenti teorici della programmazione a oggetti; nella seconda si valuta, attraverso l'implementazione di un semplice sistema software, la capacità di realizzare in pratica un programma in grado di risolvere correttamente un semplice problema applicativo, rispondendo alle specifiche del problema da risolvere e rispettando i principi della programmazione a oggetti presentati a lezione, senza generare errori (di compilazione, a runtime o logici).
Il docente si riserva la facoltà di richiedere un supplemento di indagine, attraverso una prova orale obbligatoria, nei casi in cui la prova scritta, pur essendo valutata sufficiente, presenti delle criticità: ad esempio, insufficienza nella parte teorica e parte pratica molto soddisfacente, o viceversa.
Nel corso dell’anno sono previsti 5 appelli d’esame nei seguenti periodi: uno nel mese di giugno, uno a luglio, uno a settembre, uno a gennaio e uno a febbraio. Durante il periodo del corso si tengono due prove scritte parziali che, in caso di esito complessivo positivo, permetteranno di verbalizzare il voto al termine del corso (6 prova d'esame).
Orario di ricevimento
su appuntamento.
Aims
The aim of this course is to enable students to design object-oriented software systems, integrating different types of problem-solving strategies.
In line with the educational objectives of the degree program, the course is intended to provide students with fundamental knowledge of the design and implementation of software systems following the object-oriented programming paradigm. Students will also acquire the skills needed to model simple domains using the UML language and implement them in the Java programming language, in accordance with the object-oriented paradigm.
By the end of the course, the student will be able to:
- Knowledge and understanding
Acquire fundamental knowledge related to the design and implementation of software systems following the object-oriented programming paradigm. - Applying knowledge and understanding
Apply such knowledge to model simple domains using UML and implement them in the Java programming language, consistently with object-oriented principles. - Making judgements
Integrate various problem-solving strategies and critically assess design and implementation choices within an object-oriented software development context. - Communication skills
Effectively communicate design solutions using appropriate technical terminology related to object-oriented programming and modelling tools. - Learning skills
Develop the ability to independently learn and explore additional techniques and tools for the design and development of object-oriented software systems.
Contents
The course teaches object oriented programming and software engineering principles. The student will be able to model problems according to the object oriented paradigm and translate it into Java programs.
Detailed program
- Introduction to basic principles of object oriented programming (information hiding, inheritance, polymorphism) and UML language (Unified Modeling Language).
- Hints on software cycle of life.
- Java as programming language and platform.
- Object Oriented Programming in Java: classes and objects, attributes and methods.
- Advanced Object Oriented Programming in Java: inheritance and polymorphism.
- Exceptions, ArrayList, Geenrics and Collection Framework.
Prerequisites
Structured Programming (Laboratory of Mathematics and Informatics course)
Teaching form
- Lectures: 4 CFU
- Exercise classes: 1 CFU
- Laboratory: 1 CFU
A hybrid teaching approach is used, that combines lecture-based teaching (DE) and interactive teaching (DI). DE involves detailed presentation and explanation of theoretical content. DI includes active student participation through both questions ans simulations during exercise classes in presence and the problem solving actiovity of exercises and problems, to be accomplished during the practical laboratories under the supervision of a tutor.
Lessons (32 hours) are conducted in person and are delivered in Italian.
Exercise classes (12 hours) are conducted in person and are delivered in Italian.
Laboratories (12 hours) are conducted at distance and are in Italian.
In case of logistical needs, some hours may be delivered remotely, either in online or offline mode.
Textbook and teaching resource
All the information about the course as well as the lessons slides and practical exercises will be available through the learning platform of the University, at the elearning.unimib.it link.
The suggested texdtbook will be:
- W. Savitch: "Programmazione di base e avanzata con Java", a cura di Daniela Micucci, 3rd edition, Pearson
Semester
Second semester
Assessment method
Examination type
Written and Oral examination; the oral examination is not mandatory and is upon request by the student, and is possible if and only if the written examination is sufficient, equal or grater than 26/30. The mark range is 18-30 cum laude. The oral examination is about both theoretical questions and practical exercises and can increase the result of written examination by at most 4 points (but can lower the grade if it is not well done, too).
The written examination is divided into two parts: the first one is devoted to evaluate theoretical skills about object oriented programming, by means of a collection of close-ended questions; the second one concerns the design and implementation of a simple software system, with the aim to demonstrate the student's capability to solve correctly a practical problem, on the basis of object-oriented programming principles considered during the lectures, without generating any kind of error (i.e. compile time, runtime, logical errors).
The teacher has the faculty to establish mandatory oral examinations for those students whose written examinations, although sufficient, present some criticalities: for example, in case of not sufficient theoretical questions whereas pratical exercises are good, or viceversa.
Five exam sessions are stated: June, July, September, January and February; moreover, two partial examinations are proposed to students during the course. (6th exam session).
Office hours
by appointment.