Guida degli insegnamenti

Syllabus

Partially translatedTradotto parzialmente
[W001260] - PROGRAMMAZIONE AVANZATAADVANCED PROGRAMMING
Adriano MANCINI
Lingua di erogazione: ITALIANOLessons taught in: ITALIAN
Laurea Magistrale - [IM12] INGEGNERIA INFORMATICA E DELL'AUTOMAZIONE Master Degree (2 years) - [IM12] COMPUTER AND AUTOMATION ENGINEERING
Dipartimento: [040040] Dipartimento Ingegneria dell'InformazioneDepartment: [040040] Dipartimento Ingegneria dell'Informazione
Anno di corsoDegree programme year : 1 - Secondo Semestre
Anno offertaAcademic year: 2023-2024
Anno regolamentoAnno regolamento: 2023-2024
Crediti: 9
Ore di lezioneTeaching hours: 72
TipologiaType: B - Caratterizzante
Settore disciplinareAcademic discipline: ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

LINGUA INSEGNAMENTO LANGUAGE

ITALIANO

Italian


PREREQUISITI PREREQUISITES

Lo studente dovrebbe avere familiarita` con almeno un linguaggio di programmazione, preferibilmente orientato agli oggetti ed una IDE di sviluppo

The student should be familiar with at least one programming language, preferably an object-oriented one, and an IDE for writing code


MODALITÀ DI SVOLGIMENTO DEL CORSO DEVELOPMENT OF THE COURSE

- Lezioni di teoria: 48 ore
- Esercitazioni: 24 ore

- Theory: 48 hours
- Exercises: 24 hours


RISULTATI DI APPRENDIMENTO ATTESI LEARNING OUTCOMES
Conoscenze e comprensione.

L’insegnamento vuole far conoscere allo studente tecniche avanzate per lo sviluppo, testing, deploy di progetti software complessi. Tra le problematiche affrontate vi saranno: (i) utilizzo di framework per la realizzazione di front-end js (Angular + componenti Material Design per Angular); (ii) utilizzo di framework per la realizzazione di back-end in js (Node.js); (iii) applicazione di tecniche di validazione e testing automatico del software (es. unit testing, test di integrazione, system testing, webpack,.); (iv) DevOps: progettazione e implementazione di pipeline automatizzate di continuous-integration/continuous-delivery (mediante bit-bucket / GitHub / git per lo sviluppo collaborativo) e container (docker); (v) back-end serverbased vs serverless con riferimento ad architetture a microservizi comunicanti mediante bus.


Capacità di applicare conoscenze e comprensione.

Lo studente sarà in grado di lavorare in team con altri colleghi al fine di progettare e implementare una applicazione curando aspetti propri del front-end e del back-end anche in contesti cloud con approccio serverless. Al termine del corso lo studente sarà in grado di applicare le acquisite conoscenze per: progettare, sviluppare e testare un front-end utilizzando approcci moderni (es. material design); progettare, sviluppare e testare un back-end utilizzando approcci moderni basati su Node.js anche in contesti serverless; “deployare” software utilizzando strumenti avanzati come pipeline anche ricorrendo a container durante la fase di build; valutare differenti strategie per realizzare sistemi a micro-servizi.


Competenze trasversali.

Il corso svilupperà la capacità di svolgere analisi progettuali che richiedono un approccio multidisciplinare considerando l’elevata trasversalità del corso (full-stack approach). Grazie allo svolgimento di un lavoro di gruppo gli studenti potranno incrementare le loro abilità comunicative inserendosi in un team e presentando il risultato del lavoro in modo strutturato. Questo consente l’approfondimento di un tema specifico con conseguente sviluppo di capacità di analisi e sintesi di un problema anche complesso trattato nell’ambito del corso.


Knowledge and Understanding.

The course introduces the student to advanced techniques for the development, testing and deployment of complex software projects. Main pillars of the course: (i) use of frameworks to develop js front-ends (Angular + Material Design components for Angular); (ii) use of frameworks to develop back-ends in js (Node.js); (iii) application of software validation and automatic testing techniques (e.g. unit testing, integration testing, system testing, webpack,.); (iv) DevOps: design and implementation of automated continuous-integration / continuous-delivery pipelines (using bit-bucket / GitHub / git for collaborative development) and containers (docker); (v) server-based vs serverless back-end with reference to microservice architectures communicating via bus


Capacity to apply Knowledge and Understanding.

The student will be able to work in a team with other colleagues in order to design and implement an application taking care of aspects of the front-end and back-end also in cloud context by using a serverless approach. At the end of the course the student will be able to apply the acquired knowledge to: design, develop and test a front-end using modern approaches (e.g. material design); design, develop and test a back-end using modern approaches based on Node.js also in a serverless context; deploy software using advanced tools such as pipelines, also using containers during the build phase; evaluate different strategies aimed at creating micro-service systems.


Transversal Skills.

The course will develop the ability to perform analysis that require a multidisciplinary approach considering the high transversality of the course (full-stack approach). By carrying out a group work, students will be able to increase their communication skills by joining a team and presenting the result of the work in a structured way. This allows for the in-depth study of a specific topic with the consequent development of the ability to analyze and synthesize even a complex problem dealt with in the course.



PROGRAMMA PROGRAM

Parte 1 - Paradigmi di Programmazione con particolare riferimento alla programmazione funzionale
- Panoramica sui paradigmi di programmazione:
-- imperativo, funzionale, logico, ad oggetti (T)
-- programmazione concorrente: multi-threaded, ad eventi, ad attori, reattiva (T)
- Programmazione Funzionale
-- caratteristiche principali della programmazione funzionale e dei linguaggi funzionali (T)
-- basi di Lambda calcolo - cenni introduttivi (T)
-- Definizioni dei tipi e tipi built-in: numeri, caratteri, stringhe e liste, Currying, Monads, Functors, e Fancy Words, high-order functions come map, filter,deduce (T + E)
-- integrazione con il paradigma ad Oggetti (T)
-- supporto nei linguaggi mainstream moderni (Java, JavaScript/Typescript) (T+E)
- introduzione a Node.js (E)
- programmazione funzionale in Javascript / Typescript (E)
Parte 2 - Hands on Design Pattern
- CREATIONAL DESIGN PATTERN (T+E)
- STRUCTURAL DESIGN PATTERN (T+E)
- BEHAVIORAL DESIGN PATTERN (T+E)
- implementazione dei design pattern in contesti reali (E)
Parte 3 - Programmazione Asincrona
- introduzione - concetti e aspetti principali (T)
- modellazione di un programma/sistema concorrente (T)
- modelli a scambio di messaggi (T)
- programmazione asincrona basata su eventi e event-loop (T+E)
- reactive programming e reactive extension (Rx) (T+E)
-- meccanismo delle promise e correlati (T+E)
- programmazione asincrona in JavaScript / Typescript (E)
- esempi di front-end e back-end in JavaScript / Typescript (E)

Part 1 - Programming paradigms with particular reference to functional programming
- Overview of programming paradigms:
- imperative, functional, logical, object-oriented (T)
- concurrent programming: multi-threaded, event-driven, actor-based, reactive (T)
- Functional programming
- main characteristics of functional programming and functional languages ​​(T)
- foundations - Lambda calculus - introductory notes (T)
- Type definitions and built-in types: numbers, characters, strings and lists, Currying, Monads, Functors, and Fancy Words, high-order functions such as map, filter, infers (T + E)
- integration with the Object (T) paradigm
- support in modern mainstream languages ​​(Java, JavaScript / Typescript) (T + E)
- introduction to Node.js (E)
- functional programming in Javascript / Typescript (E)
Part 2 - Hands on Design Pattern
- CREATIONAL DESIGN PATTERN (T + E)
- STRUCTURAL DESIGN PATTERN (T + E)
- BEHAVIORAL DESIGN PATTERN (T + E)
- implementation of design patterns in real contexts (E)
Part 3 - Asynchronous Programming
- introduction - main concepts and aspects (T)
- modeling of a concurrent program / system (T)
- message exchange models (T)
- asynchronous programming based on events and event-loops (T + E)
- reactive programming and reactive extension (Rx) (T + E)
- mechanism of promises and correlates (T + E)
- asynchronous programming in JavaScript / Typescript (E)
- examples of front-end and back-end in JavaScript / Typescript (E)


MODALITÀ DI SVOLGIMENTO DELL'ESAME DEVELOPMENT OF THE EXAMINATION
Modalità di valutazione dell'apprendimento.

Il livello di apprendimento degli studenti verrà valutato mediante due prove, da sostenere all'interno dello stesso anno accademico:
- un progetto da svolgere in gruppo
- una prova orale individuale


Criteri di valutazione dell'apprendimento.

Lo studente deve mostrare, attraverso la prova orale, di comprendere i principi di progettazione, implementazione e validazione di un software complesso. Attraverso il lavoro di gruppo deve invece dimostrare di (i) saper adattare tali principi al caso di studio e al gruppo di lavoro con cui collabora, e (ii) saperli mettere in pratica per realizzare un prodotto funzionante.


Criteri di misurazione dell'apprendimento.

Viene attribuito un voto in trentesimi, con eventuale lode.
Il voto minimo per il superamento dell’esame è 18/30


Criteri di attribuzione del voto finale.

Perché l'esito complessivo della valutazione sia positivo, lo studente deve conseguire almeno 18/30 sia nel progetto sia in quella orale. Il voto complessivo è dato dalla media dei voti ottenuti nelle due prove


Learning Evaluation Methods.

The proficiency level of the students will be assessed by means of two assignments, to be completed within the same academic year:
- a group project
- an oral examination


Learning Evaluation Criteria.

The student should prove, through the oral examination, that he/she understands the principles of designing, implementing, and validating a complex software system. Through the group work the student should prove that (i) he/she can adapt such principles to the case study and to his/her working team, and (ii) he/she can apply them in order to produce a working software


Learning Measurement Criteria.

The grades are given in thirtieths. The minimum grade for passing the exam is 18/30.


Final Mark Allocation Criteria.

To pass the exam, the student must obtain at least 18/30 both in the group project and in the oral examination. The final grade will be the average of the grades obtained in the project and in the oral examination



TESTI CONSIGLIATI RECOMMENDED READING

Materiale didattico disponibile sul sito https://learn.univpm.it/

-Design Patterns JavaScript, Addy Osmani, ISBN-10: 9781449331818
-Structure and Interpretation of Computer Programs, Harold Abelson and Gerald Jay Sussman with Julie Sussman, MIT Press ( https://web.mit.edu/6.001/6.037/sicp.pdf)
-Concepts, Techniques and Models of Computer Programming (Van Roy, Haridi) - MIT Press, ISBN: 9780262220699
-Concepts in Programming Languages - Mitchell - MIT Press, ISBN: 0521780985

Slide and other supporting material at https://learn.univpm.it/

-Design Patterns JavaScript, Addy Osmani, ISBN-10: 9781449331818
-Structure and Interpretation of Computer Programs, Harold Abelson and Gerald Jay Sussman with Julie Sussman, MIT Press ( https://web.mit.edu/6.001/6.037/sicp.pdf)
-Concepts, Techniques and Models of Computer Programming (Van Roy, Haridi) - MIT Press, ISBN: 9780262220699
-Concepts in Programming Languages - Mitchell - MIT Press, ISBN: 0521780985


E-LEARNING E-LEARNING

NO

NO


Scheda insegnamento erogato nell’A.A. 2023-2024
Le informazioni contenute nella presente scheda assumono carattere definitivo solo a partire dall'A.A. di effettiva erogazione dell'insegnamento.
Academic year 2023-2024

 


Università Politecnica delle Marche
P.zza Roma 22, 60121 Ancona
Tel (+39) 071.220.1, Fax (+39) 071.220.2324
P.I. 00382520427