Vinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.xVinaora Nivo Slider 3.x

ADVANCED COMPUTER PROGRAMMING

SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05

LAUREA TRIENNALE IN INGEGNERIA INFORMATICA

ANNO ACCADEMICO: 2022-2023

 

INFORMAZIONI GENERALI - DOCENTE

DOCENTE: RAFFAELE DELLA CORTE

TELEFONO: 0817683820

EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

 

INFORMAZIONI GENERALI - ATTIVITÀ

INSEGNAMENTO INTEGRATO (EVENTUALE): 
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): III
SEMESTRE (I, II): II
CFU: 9

 

INSEGNAMENTI PROPEDEUTICI

(se previsti dall'Ordinamento del CdS)

Programmazione

 

EVENTUALI PREREQUISITI

...................................................................................................................................................

 

OBIETTIVI FORMATIVI

Il corso ha l'obiettivo di fornire conoscenze e competenze di programmazione avanzata in ambito concorrente e distribuito, introducendo gli strumenti per la programmazione ed il debugging di applicazioni multithreading e su rete in linguaggio Java e Python, e fornendo le basi del concetto di middleware e delle diverse soluzioni adottate in ambito industriale, soffermandosi principalmente sul modello orientato ai messaggi e sul modello a servizi, con applicazioni su tecnologie reali. Il corso introduce inoltre gli strumenti per la programmazione di web-application, sia front-end che back-end.

 

RISULTATI DI APPRENDIMENTO ATTESI

(Descrittori di Dublino)

Conoscenza e capacità di comprensione

Lo studente deve dimostrare di conoscere e saper comprendere i problemi di programmazione concorrente e distribuita, principalmente nell'ambito di applicazioni in linguaggio Java e Python, nonché le caratteristiche delle differenti tecnologie middleware. Il percorso formativo intende fornire agli studenti le conoscenze e gli strumenti metodologici, teorici e pratici necessari per riconoscere, analizzare e risolvere problemi legati allo sviluppo di applicativi multithreading e su rete, consentendo agli studenti di padroneggiare lo sviluppo di progetti software avanzati in Java e Python.

 

Capacità di applicare conoscenza e comprensione 

Lo studente deve dimostrare di essere in grado di risolvere problemi concernenti la programmazione concorrente e distribuita, utilizzando le competenze metodologiche, teoriche e pratiche di programmazione avanzata presentate al corso per la realizzazione di progetti software, multithreading e su rete, in linguaggio Java e Python.

 

PROGRAMMA-SYLLABUS

Programmazione concorrente e su rete in Java.

Richiami sul linguaggio Java e classi contenitore. Programmazione concorrente in Java. Threads in Java, stati di un thread, pool di threads. Sincronizzazione in Java. Monitor Java e il package java.util.concurrent di Java 1.5. Build automation tool e debugging in Java. Programmazione generica, reflection ed annotazioni in Java.

Programmazione su rete in Java. Il package java.net. Socket TCP in Java: classi Socket e ServerSocket. Socket UDP in Java: classi DatagramSocket e DatagramPacket. Server multithread. Astrazione di oggetto remoto. Proxy-Skeleton.

 

Modelli di middleware.

Definizione e proprietà del livello middleware. Enterprise Application Integration (EAI). Chiamata di procedura remota (RPC), scambio di messaggi (MOM), elaborazione transazionale (TP), spazio delle tuple (TS), accesso a dati remoti (RDA), oggetti distribuiti (DOM), modello a componenti (CM), web services, microservizi.

 

Modello a scambio di messaggi.

Specifica Java Message Service (JMS), client e provider. Comunicazione point-to-point e publish-subscribe. Modello di programmazione JMS. Messaggi JMS ed aspetti avanzati.

 

Modello a servizi ed implementazione web-app application.

Cenni a SOAP e ai servizi RPC. RESTful Web Services, risorsa e Uniform Resource Identifier (URI). Servizi RESTful e metodi HTTP. Implementazione di RESTful Web Services con framework Java ed implementazione di web-app con HTML, Javascript e framework per lo sviluppo front-end.

 

Il linguaggio Python.

Tipi di dato, costrutti di controllo, passaggio parametri, data collection, file, funzioni, moduli e debugging in Python. Programmazione object-oriented in Python: classi, oggetti, ereditarietà, polimorfismo, classi astratte. Programmazione concorrente e su rete in Python: multithreading, sincronizzazione, socket. Esempi di integrazione multi-linguaggio. Data Science in Python

 

MATERIALE DIDATTICO

●        Trasparenze delle lezioni del corso.

●        Libri di testo:

  ○         B. Eckel “Thinking in Java”.

  ○         L. H. Etzkorn "Introduction to Middleware - Web Services, Object Components, and Cloud Computing".

  ○         Semmy Purewal “Learning Web App Development”.

  ○         Craig Walls “Spring in Action”.

  ○         Allen B. Downey “Think Python”.

  ○         Mark Lutz “Programming Python”.

●        Materiale esercitativo.

●        Risorse disponibili in rete.

 

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

Lezioni frontali ed esercitazioni guidate svolte in aula.

 

VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE

a) Modalità di esame:

L'esame si articola in prova:
 Scritta e orale
 Solo scritta o intercorso a metà  
 Solo orale  
 Discussione di elaborato progettuale   
 Altro (prova al calcolatore)

 

In caso di prova scritta i quesiti sono (*):
 A risposta multipla  
 A risposta libera  
 Esercizi numerici  

 

 

b) Modalità di valutazione:

L'esito della prova scritta è vincolante ai fini dell'accesso alla prova orale. Si prevede inoltre la possibilità di pianificare prove intercorso eventualmente a sostituzione della prova scritta.