L’insegnamento si propone di completare le capacità di programmazione dello studente, mettendolo in grado di affrontare e risolvere problemi, anche complessi, attraverso la realizzazione di applicazioni software. In particolare il corso si propone di integrare le competenze acquisite nei precedenti insegnamenti, in particolare Programmazione ad Oggetti, Basi di Dati e Ricerca Operativa, permettendo di creare applicazioni complete in grado di presentare interfacce utente interattive, di accedere a basi di dati relazionali e di visualizzare graficamente i risultati dell'elaborazione. Dal punto di vista algoritmico, dopo avere introdotto la ricorsione saranno analizzate le strutture dati più comuni (in particolare i grafi) e saranno studiati alcuni degli algoritmi ricerca ed ottimizzazione, e di simulazione ad eventi discreti, con riferimento ad applicazioni concrete nel campo della logistica, della produzione e dell’organizzazione d’impresa (es: allocazione di risorse, scheduling, simulazione ad eventi, trasporti, …).
The course aims at complementing the programming abilities of the students, allowing them to face and solve application problems, even complex ones, through the development of software applications. In particular, the course integrates the skills acquired in former courses, in particular Object Oriented Programming, Data Bases, and Operations Research, enabling students to create complete applications with interactive graphical user interfaces, that access relational data bases and graphically visualize the computation results. From the algorithmic point of view, after introducing recursion, the most common data structures (in particular, graphs) will be analyzed, and the most research and optiomization, and discrete event simulation algorithms will be studied, in particular with concrete applications to the fields of logistics, production, and enterprise organization (e.g., resource allocation, scheduling, queuing network systems, transports, etc.).
Conoscenza e capacità di comprensione: strutture dati complesse (liste, alberi, grafi, code); paradigma model-view-controller; progettazione di interfacce grafiche in Java (JavaFX); accesso a basi di dati relazionali da applicazioni Java; visualizzazione di dati numerici; ricorsione; problemi di ricerca e di ottimizzazione (tecniche divide et impera); applicazioni in campo logistico e dell’organizzazione; pattern di programmazione.
Capacità di applicare conoscenza e comprensione: realizzazione di applicazioni grafiche in Java, con accesso a basi di dati; risoluzione di problemi di simulazione, ricerca ed ottimizzazione attraverso la realizzazione di programmi software; analisi di problemi di tipo gestionale e definizione di una soluzione algoritmica per la relativa risoluzione, ed implementazione della stessa.
Knowledge and understanding capabilities: complex data structures (lists, trees, graphs, queues); model-view-controller paradigm; design of graphical user interfaces in Java (JavaFX); accessing relational data bases from Java applications; recursion; search problems and optimization problems (divide and conquer and min-max techniques); applications in logistics and organization; programming patterns.
Ability to apply knowledge and understanding: design and implementation of graphical applications in Java, interacting with data bases; problem solving for simulation, search and optimization problems through the implementation of software programs; analysis of typical management problems and definition of algorithmic solutions for their solution, as well as implementation.
Conoscenza delle basi di dati relazionali, ed in particolare della loro interrogazione mediante istruzioni SQL SELECT.
Concetti di programmazione ad oggetti, ed in particolare un linguaggio di programmazione object-oriented (Java o C#, ad esempio), con capacità di programmare in tale linguaggio.
Prior knowledge of relational data base management systems, in particular query and update through SQL instructions.
Concepts of object oriented programming, in particular knowledge of at least one object-oriented programming launguage (Java or C#, for example), and ability to program in that language.
Complementi di programmazione in Java: applicazioni grafiche (JavaFX), richiami sull'accesso a basi di dati (JDBC), connection pooling, principali pattern di programmazione (MVC, Singleton, Factory, DAO).
Strutture dati: liste, alberi, grafi, code prioritarie, librerie Java per la gestione delle strutture dati complesse (jGraphT), basi dati (JDBC) e connection pool (HikariCP).
Algoritmi: ricorsione, ottimizzazione ricorsiva, procedure di visita e di ricerca, nei grafi, simulazione ad eventi discreti.
Problem solving: problemi di ricerca e problemi di ottimizzazione; tecniche di ricerca di tipo esaustivo (ricorsivo); applicazioni a casi di interesse gestionale (simulazione di eventi, problemi di scheduling, problemi di ottimizzazione delle risorse, di ricerca trasporti, ecc); tecniche di visualizzazione dei risultati.
Java programming: JavaFX graphical interfaces, data base access (JDBC), some programming patterns (MVC, Singleton, Factory, DAO).
Data structures and algorithms: recursion, collections, lists, trees, graphs, priority queues, Java libraries for managing complex data structures (jGraphT).
Algorithms: recursive optimization, visit and search algorithms, discrete event simulation.
Problem solving: search and optimization problems; techniques for exhaustive (recursive) search; applications to problems of interest for management students (event-driven simulation, scheduling problems, resource optimization problems, transportation search problems, etc.).
Lezioni ed esercitazioni in aula: presentazioni teoriche e sviluppo di esercizi di programmazione in aula. Le ore di lezione ed esercitazione non sono formalmente distinte, ma la trattazione teorica e l'applicazione pratica sono integrate. Gli studenti sono invitati a seguire la lezione con il proprio PC portatile e svolgere l'esercizio in parallelo al docente. Le esercitazioni in aula comprenderanno lo svolgimento di programmi, sia al fine di comprendere i concetti teorici esposti, sia al fine di approcciare l'analisi e la progettazione di esempi applicativi realistici.
Tutto il materiale didattico è fornito liberamente on-line, e consiste di: slide delle lezioni, testi e soluzioni degli esercizi svolti in aula ed in laboratorio, registrazioni (screencast) delle lezioni, materiale di approfondimento. Tutti gli esercizi saranno disponibili sulla piattaforma GitHub.
Esercitazioni informatiche (presso il laboratorio LEP oppure con i PC personali in aula): sviluppo di programmi di ricerca ed ottimizzazione. Testi, data-set di riferimento, e soluzioni sono rese disponibili sulla piattaforma GitHub.
Classroom lectures and exercises: theoretical lectures and development of exercises in classroom. The lecture and exercise hours are not formally identified, but theory and practice are intermixed. Students are encouraged to attend the class with their notebooks and develop the exercise in parallel to the teacher. In-class exercises will include the development of software applications, both to understand the theory, and to have a first approach to analysis and design of realistic application examples.
All learning material is freely available on-line, and includes: lecture slides, text and solution of exercises developed in class and in the lab, recordings (screencasts) of all lectures, in-dept material. All exercises will be published on the GitHub platform.
Laboratory exercises (in the LEP laboratory): development of search and optimization applications. Texts, related data-sets, and solutions will be available on the GitHub platform.
Lucidi e dispense forniti dai docenti (in inglese).
Disponibilità completa delle video-registrazioni (screencast) di tutte le lezioni ed esercitazioni.
Disponibilità completa delle soluzioni di tutti gli esercizi proposti in aula ed in laboratorio.
Testi ausiliari:
K. Sierra, B. Bates, Head First Java (O’Reilly); R. Sedgewick, Algoritmi in Java (Addison-Wesley)
Pro JavaFX 2 - A Definitive Guide to Rich Clients with Java Technology, by James Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, Johan Vos, ISBN13: 978-1-4302-6872-7, http://www.apress.com/9781430268727/
Algorithms in a Nutshell, By George T. Heineman, Gary Pollice, Stanley Selkow, O'Reilly Media, ISBN: 978-0-596-51624-6, http://shop.oreilly.com/product/9780596516246.do
Slides and documents distributed by the teachers (in English).
Full availability of screen recordings of all classes.
Full availability of all solutions to the exercises proposed in class and in laboratory.
Optional reference:
K. Sierra, B. Bates, Head First Java (O’Reilly); R. Sedgewick, Algoritmi in Java (Addison-Wesley)
Pro JavaFX 2 - A Definitive Guide to Rich Clients with Java Technology, by James Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, Johan Vos, ISBN13: 978-1-4302-6872-7, http://www.apress.com/9781430268727/
Algorithms in a Nutshell, By George T. Heineman, Gary Pollice, Stanley Selkow, O'Reilly Media, ISBN: 978-0-596-51624-6, http://shop.oreilly.com/product/9780596516246.do
Modalità di esame: Test informatizzato in laboratorio; Prova pratica di laboratorio;
...
L’accertamento prevede la realizzazione di un programma in grado di risolvere un problema gestionale, secondo le tecniche e le metodologie trattate durante l'insegnamento. La prova verrà svolta in laboratorio informatico e sarà dello stesso tipo delle ultime 2 esercitazioni di laboratorio proposte.
La prova consisterà nella realizzazione in Java+JavaFX di un programma che, analizzando i dati presenti in una base dati e costruendo opportune strutture dati (collection e grafi, principalmente) sia in grado di interrogare la base dati e fornire dei risultati (basandosi su un esercizio ricorsivo o una simulazione ad eventi discreti).
La prova ha la durata di 2 ore, durante le quali gli studenti sviluppano il proprio programma sui PC del laboratorio LEP, oppure sul proprio personal computer. Durante la prova è permesso accedere ad Internet (GitHub, Stack Overflow, repository Javadoc e motori di ricerca, in particolare) ed utilizzare tutto il materiale in possesso dello studente, per mettere lo studente nelle condizioni di lavoro più realisticamente simili a quelle di un effettivo sviluppatore.
La prova è divisa in due parti:
- la prima parte si focalizza sull'interfacciamento con il database, la costruzione di strutture dati (grafi) e la semplice analisi o visita di tali strutture e visualizzazione dei risultati. Questa parte deve essere completata per raggiungere la sufficienza (min 18, max 21). La funzionalità di questa parte sarà verificata in laboratorio, immediatamente al termine della prova, sulla base di una valutazione di tipo on/off sulla correttezza dell'interfaccia e dei risultati calcolati.
- la seconda parte si focalizza sugli aspetti maggiormente algoritmici (ricorsione o simulazioni ad eventi), e si configura come una continuazione della parte precedente. Per gli studenti che abbiano raggiunto la sufficienza nella prima parte, verrà valutata anche la seconda parte, tramite correzione off-line, che potrà apportare fino a 12 punti aggiuntivi.
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
The exam will consist in the implementation of a program able to solve a management problem, according to the techniques and methods studied in the course. The exam will take place in the computer laboratory, and will be of the same type as the last 2 lab exercises, proposed in the last 2 weeks of the course.
The test will consist in the realization of a Java+JavaFX application that, by analyzing data available in a database and building suitable data structures (mainly collections and graphs), is able to query the database and yield useful results (based on the output of a recursive algorithm or a discrete event simulation).
The test duration is 2 hours, during which the students develop their program on the PCs in the LEP laboratory. During the test, students are allowed to use the Internet (in particular GitHub, Stack Overflow, Javadoc repositories and search engines) and to use all material they own, in order to recreate working conditions as realistically close as possible to a real developer.
The test is divided in two parts:
- the first part focuses on interfacing with the database, building data structures (graphs) and a simple analysis or visit of such data structures. This part must be completed to pass the exam (with a score ranging from 18 to 21). The functionality of this part will be verified in Lab, immediately at the end of the test, on the basis of an on-off check on the interface correct behavior and the computed results.
- the second part focuses on the more algorithmic aspects (recursion, or event simulation), and is a continuation of the previous part. For the students who passed the first part, this second part will be evaluated by an off-line correction, that will bring up to 12 additional points.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.