- Algorithms and Programming
- Summary
Course Syllabus
Obiettivi
Obiettivo principale dell'insegnamento è l'acquisizione da parte dello studente delle competenze, abilità pratiche e strategie di problem solving per la progettazione e implementazione di sistemi software secondo il paradigma della programmazione ad oggetti.
Per il conseguimento di tali obiettivi, verranno fornite le competenze necessarie per la modellazione di semplici domini attraverso il linguaggio UML e la loro codifica secondo il paradigma della programmazione a oggetti con il linguaggio di programmazione Java.
Al termine dell’insegnamento, lo studente:
• Conoscerà i principi della modellazione, progettazione e implementazione di sistemi software secondo il paradigma della programmazione a oggetti (Conoscenza e capacità di comprensione)
• Saprà 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 (Conoscenza e capacità di comprensione applicate)
• Saprà integrare diverse strategie di problem-solving per affrontare criticamente scelte progettuali e implementative in un contesto software orientato agli oggetti (Autonomia di giudizio)
• Saprà descrivere in modo motivato le soluzioni progettuali adottate, utilizzando correttamente il lessico tecnico della programmazione a oggetti e degli strumenti di modellazione (Abilità comunicative)
• Avrà appreso come acqiure in autonomia ulteriori tecniche e strumenti relativi alla progettazione e sviluppo di software object oriented (Capacità di apprendimento)
Contenuti sintetici
Modellazione e programmazione secondo il paradigma orientato agli oggetti e cenni di progettazione del software. Alla fine del corso lo studente sarà in grado di modellare un problema secondo il paradigma a oggetti e di codificarlo in un programma software scritto in un linguaggio object-oriented. Il linguaggio di riferimento è Java.
Programma esteso
- Introduzione ai concetti fondamentali del paradigma a oggetti (incapsulamento, ereditarietà, polimorfismo)
- Introduzione 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
Prerequisiti
Non è prevista la verifica che lo studente abbia superato l'esame di Laboratorio di Matematica e Informatica (primo anno) ma è prerequisito per la comprensione dei contenuti di questo corso avere conoscenza dei contenuti in esso trattati, in particolare della programmazione strutturata con il linguaggio di programmazione Java
Modalità didattica
- Lezione frontale, 4 cfu
- Esercitazione frontale, 1 cfu
- Laboratorio frontale, 1 cfu
Il corso prevede un approccio didattico ibrido che combina didattica frontale erogativa (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)
Materiale didattico
Tutte le informazioni sul corso, le slide presentate a lezione e le esercitazioni di laboratorio saranno disponibili tramite la piattaforma elearning di Ateneo [https://elearning.unimib.it])
Testo di riferimento per il corso:
Programmazione di base e avanzata con Java 3/Ed.
Walter Savitch, Daniela Micucci
ISBN Cartaceo: 9788891916020 – ISBN Digitale: 9788891916037
Link alla pagina di catalogo: https://he.pearson.it/bundle/818?isbn=9788891916037
In particolare i contenuti relativi ai capitoli 8-13 (come prosecuzione dei contenuti dei capitoli 1-7 trattati al corso Laboratorio di Matematica e Informatica, I anno)
Periodo di erogazione dell'insegnamento
Secondo semestre
Modalità di verifica del profitto e valutazione
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 secondo il calendario previsto dal corso di studi. Inoltre, durante il periodo di svolgimento del corso si svolgeranno due prove scritte parziali che, in caso di esito complessivo positivo, permetteranno di verbalizzare il voto al termine del corso (sesta prova d'esame).
Orario di ricevimento
Ricevimento studenti su appuntamento da concordare inviando una email al docente
Aims
The primary objective of the course is to equip students with the skills, practical abilities, and problem-solving strategies for designing and implementing software systems using the object-oriented programming paradigm.
To achieve these objectives, students will be provided with the necessary skills for modeling simple domains using the UML language and coding them using the object-oriented programming paradigm using the Java programming language.
Upon completion of the course, the student will:
• know the principles of modeling, design, and implementation of software systems according to the object-oriented programming paradigm (Knowledge and Understanding)
• be able to apply this knowledge to the modeling of simple domains using the UML language and their implementation in Java, following the principles of object-oriented programming (Applying Knowledge and Understanding)
• be able to integrate various problem-solving strategies to critically address design and implementation choices in an object-oriented software context (Making Judgments)
• be able to justify the design solutions adopted, correctly using the technical vocabulary of object-oriented programming and modeling tools (Communication Skills)
• have learned how to independently acquire additional techniques and tools related to the design and development of object-oriented software (Learning Skills)
Contents
Modeling and programming using the object-oriented paradigm and an introduction to software design. By the end of the course, students will be able to model a problem using the object paradigm and encode it in a software program written in an object-oriented language. The reference language is Java.
Detailed program
- Introduction to fundamental concepts of the object-oriented programming paradigm (encapsulation, inheritance, polymorphism)
- Introduction to UML (Unified Modeling Language)
- Overview of the software life cycle
- Java as a language and as a platform
- Fundamentals elements of object-oriented paradigm in Java context: classes and objects, attributes and methods
- Advanced elements of object-oriented paradigm in Java context: inheritance and polymorphism
- Exceptions, ArrayList, Generics
Prerequisites
It is not verified that the student has passed the Mathematics and Computer Science Laboratory exam (first year), but it is a prerequisite for understanding the contents of this course to have knowledge of the contents covered therein, in particular of structured programming with the Java programming language
Teaching form
- Lecture, 4 credits
- Classroom exercises, 1 credit
- Classroom lab, 1 credit
The course uses a hybrid teaching approach that combines classroom teaching (DE) and interactive teaching (DI). DE includes the presentation and detailed explanation of theoretical content. DI involves active student participation, both through questions and requests during in-person practical exercises and through exercises and problems solved during practical labs, supported by a tutor/tutor.
Lectures are held in person and are taught in Italian, for 32 hours (4 credits).
Classroom exercises are held in person and are taught in Italian, for 12 hours (1 credit).
Laboratories are taught remotely and are taught in Italian, for 12 hours (1 credit).
Textbook and teaching resource
All course information, lecture slides, and laboratory exercises will be available on the University e-learning platform [https://elearning.unimib.it].
Reference text for the course:
Programmazione di base e avanzata con Java 3/Ed.
Walter Savitch, Daniela Micucci
ISBN Cartaceo: 9788891916020 – ISBN Digitale: 9788891916037
Link alla pagina di catalogo: https://he.pearson.it/bundle/818?isbn=9788891916037
Specifically, the content of chapters 8-13 (as a continuation of the content of chapters 1-7, covered in the Mathematics and Computer Science Laboratory course, first year)
Semester
Second semester
Assessment method
Written exam and optional oral exam (upon request by students who have obtained at least a 26/30 grade in the written exam). Grades will be awarded out of 30 (18-30 cum laude). The oral exam, which may include both theoretical questions and practical programming exercises, carries less weight than the written exam, resulting in a maximum increase of 4 points over the written exam score.
The written exam is divided into two parts: the first, through a series of closed-ended questions, assesses knowledge of the theoretical foundations of object-oriented programming; the second, through the implementation of a simple software system, assesses the student's ability to practically create a program capable of correctly solving a simple application problem, meeting the specifics of the problem at hand and adhering to the principles of object-oriented programming presented in class, without generating errors (compilation, runtime, or logic).
The instructor reserves the right to require additional investigation, through a mandatory oral exam, in cases where the written exam, while rated sufficient, presents critical issues: for example, a failure in the theoretical part but a very satisfactory practical part, or vice versa.
Five exam sessions are scheduled throughout the year, according to the program schedule. Additionally, two partial written exams will be held during the course. If the overall result is positive, the grade will be recorded at the end of the course (sixth exam).
Office hours
Student reception by appointment to be agreed by sending an email