PAJC
Qui trovate tutte le informazioni ed il materiale relativo al mio corso di Programmazione Avanzata Java e C.
Per quanto concerne l’anno accademico 2023/2024 il materiale (slide ed esercizi) verrà messo on-line durante lo svolgimento del corso, trovate il materiale qui.
Se vi perdete una lezione o volete ripassare un argomento vi ricordo che anche il materiale dello scorso anno è disponibile on-line (come sempre il corso si evolve nel tempo ma gli argomenti dello scorso anno sono analoghi a quelli attuali quindi potete sfruttare i video oltre alle dispense dispense_old)).
Programma dettagliato del corso
Il corso affronta aspetti di programmazione avanzata in ambienti Java e C.
Al termine del corso lo studente sarà in grado di progettare e realizzare applicazioni Java grafiche distribuite in grado di funzionare in rete quali: giochi interattivi, sistemi di simulazione, comunicazione, etc. Se da un lato Java è il linguaggio che utilizzeremo per creare sistemi complessi il C sarà fondamentale per comprendere come tali sistemi sono implementati a livello macchina.
Per quanto concerne Java i temi affrontati sono: J1) Ripasso dei prerequisiti:
- approccio Java alla programmazione ad oggetti
- classi, interfacce, ereditarietà, polimorfismo
- gestione delle eccezioni
- accesso al file system
- strutture dati base: ArrayList, Set, HashMap
- la gestione della memoria ed il garbage collector
- i tool di sviluppo: java, javac, eclipse
J2) Programmazione funzionale:
- classi anonime
- lambda expression
- method reference
- interfaccie funzionali
- computing stream
- pattern di sviluppo ad eventi
J3) Sviluppo di GUI tramite Java Swing:
- elementi base di gestione dell’interfaccia grafica
- componenti grafici di Java Swing
- gestione degli eventi base tramite listener
- layout manager
- creazione di componenti custom tramite composition
- le primitive grafiche Java Swing
- il ciclo di eventi in Java AWT/Swing
J4) I Thread
- introdizione: processi e thread
- approccio Java nella gestione dei thread
- classe Thread, le interfacce Runnable e Callable
- executor services e thread pooling
- valori ritornati e oggetti Future
- schedulazione dei task
- gestione della concorrenza: sincronizzazione, semafori, oggetti atomici
J5) Comunicazione Client/Server
- introduzione alla comunicazione in rete TCP/IP
- i Socket in Java
- creazione di un server applicativo multithread
- creazione di un client applicativo miltithread
- creazione di protocolli di comunicazione
- integrazione nel modello MVC della comunicazione client/server
- creazione di sistemi distribuiti
Per quanto concerne il linguaggio C i temi affrontati sono: C1) Ripasso dei prerequisiti:
- tipi base e la loro gestione in memoria
- strutture dati (struct)
- typedef
- strutture di controllo e passaggio dei parametri
- i tool di sviluppo: complilatori C, Visual Studio Code
C2) La gestione dinamica della memoria
- stack ed heap
- passaggio di parametri nello stack
- array, array multidimensionali, stringhe
- puntatori
- dualità puntatori ed array
- allocazione dinamica (malloc, free)
- passaggio di puntatori a funzioni
- creazione di puntatori a funzioni
C3) Strutture dati ed algoritmi
- creazione di strutture dati dinamiche utilizzando puntatori
- algoritmi per la creazione e gestione di code/buffer
- algoritmi per la creazione e gestione di stack
- algoritmi per la creazione e gestione di liste concatenate
- algoritmi di ricerca: sequenziale, binaria
- algoritmi di ordinamento: bubble sort, selezione, inserimento, shell sort, quick sort
Video delle lezioni
Tutti i video delle lezioni e dei lab per l'anno 2020/2021 sono on-line sul canale youtube: Redolfi PAJC 2020/2021 Video