- 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.
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
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, 2° 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). Valutazione con voto in trentesimi 18-30/30. 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 ed è necessaria per l'ottenimento della lode.
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).
La media aritmetica (eventualmente pesata) dei voti conseguiti nelle due parti definisce il voto proposto allo studente, che, se sufficiente, ha la facoltà di accettarlo o modificarlo attraverso lo svolgimento di un orale integrativo (eventualmente peggiorandolo nel caso la prova orale non sia soddisfacente). La prova orale può essere sostenuta solo in caso di sufficienza piena. 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 o sostenere la prova orale integrativa nel mese di giugno. La partecipazione alle prove parziali è subordinata allo svolgimento e consegna dei compiti assegnati durante i laboratori pratici svolti durante il corso.
Orario di ricevimento
Giovedì, dalle 11 alle 12 o su appuntamento.
Aims
To design and implement software systems integrating different problem solving methods. This course aims at introducing the basic knowledge of software systems from the object-oriented paradigm perspective. Moreover, the course will provide competencies to model simple domains through the UML language and code them into the Java Programming Language, according to the object-oriented paradigm.
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
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, 2nd edition, Pearson
Semester
Second semester
Assessment method
Examination type
Written and Oral examination; the oral examination is not mandatory, but necessary to obtain a "cum laude" merit. The mark range is 18-30/30. The oral examination is about both theoretical questions and practical exercises and can increase the result of written examination by at most 4 points.
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 arithmetic mean (possibly weighted) of the two marks defines the final mark proposed to the student: in case it is sufficient, the student can accept it as is or modify it by means of an oral examination (possibly decreasing the final mark). Oral examination is possible if and only if written examination is sufficient. 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 studets during the course. Partial examinations can be attended if and only if the student has accomplished the tasks proposed during practical laboratories.
Office hours
Thursday, between 11 a.m. and 12 a.m., or by appointment.