Here are some courses that I am currently giving at SUPSI. Not all courses are given every year. The courses are given in Italian, so that the titles and each explanation to the courses are written in Italian as well.
I distinguish among courses within the first three years of
formation, courses that one can follow after the diplom, and in general,
old courses that I prepared in the past, which still exist, but are not
given by me anymore, after I began to work for Canoo .
Here is the complete list:
Linguaggi (3. semestre)
Si tratta di un semestre in cui viene insegnato un nuovo linguaggio (Java o C, dipende dal semestre). I prerequisiti sono la buona conoscenza di un linguaggio di programmazione. Siccome gli studenti provengono da un anno di Ada, si tratta soprattutto di mostrare le differenze e le particolarità. Nel caso di C si tratta di enfatizzare soprattutto il meccanismo di input/output, i puntatori e la gestione di stringhe e vettori a basso livello. Nel caso di Java si tratta invece di associare alle spiegazioni sul linguaggio un'introduzione alla programmazione a oggetti.
Progettazione Software (5. + 6. semestre)
Durante l'inizio del corso si riprendono dapprima alcuni elementi di UML trattati nei semestri precedenti, dando particolare enfasi a una singola caratteristica: il class diagram. Analogamente viene proposta un'introduzione generale alla progettazione a oggetti, in cui la fase essenziale viene fatta coincidere con il passaggio dai requisiti del problema alla struttura di classi.
In seguito si passa a un approfondimeto di alcuni aspetti della programmazione a oggetti ritenuti fondamentali, come information hiding e polimorfismo. Questi elementi ricorreranno più volte, durante le fasi di approfondimento dei design pattern ed è quindi importante consolidarne la conoscenza.
Subito dopo questa fase si passa all'introduzione dei concetti di progettazione agile, che faranno da sfondo a tutti gli argomenti che seguiranno: design pattern, metodi di refactoring e test di unità. Il linguaggio utilizzato per gli esempi durante la lezione e, pi in generale, il linguaggio di riferimento, sarà Java.
I design patterns valorizzano e rendono effettivo il riutilizzo del design. Inoltre, se introdotti in modo sistematico in applicazioni complesse, permettono di semplificare, rendere più elegante e documentare meglio sia il design che la programmazione. Sono considerati un concetto fondamentale per la progettazione e per lo sviluppo di sistemi a oggetti.
I metodi di refactoring sono passaggi nello sviluppo software che hanno come scopo la modifica di codice e design, mantenendo però intatta la funzionalità. Servono a rivedere e adattare design e codice per facilitare ulteriori interventi di estensione funzionale. La loro stretta relazione con i design patterns consiste nel fatto che i passaggi di refactoring più complessi hanno molto spesso un pattern come obiettivo finale.
L'introduzione di questi elementi nei corsi di formazione del ciclo di informatica permette agli studenti di approfondire e realizzare meglio i concetti della programmazione a oggetti.
Il contenuto della parte principale del corso è descritto nel libro
Pedrazzini S.: Tecniche di progettazione agile con Java, Design pattern, refactoring, test; Edizioni Tecniche Nuove, 298 pp., ISBN 88-481-1916-6, 2005
il cui riassunto è disponibile nella pagina delle pubblicazioni.Il corso prevede 2 ore di lezioni teoriche e 2 ore di esercitazioni pratiche in laboratorio. Durante la seconda metà dell'ultimo semestre verrà dato il tempo per svolgere un piccolo progetto, che coprir le varie fasi di un progetto, coome affrontate durante il corso.
Elementi di progettazione software: design pattern, refactoring e test
In questo corso vengono presentati tre argomenti di progettazione e sviluppo software solo apparentemente disgiunti.
Con design patterns si intende una serie di modelli e situazioni tipiche nello sviluppo di software a oggetti, già studiate e ben analizzate, a cui possono essere ricondotte molte situazioni nello sviluppo di applicazioni.
I design patterns valorizzano e rendono effettivo il riutilizzo del design. Inoltre, se introdotti in modo sistematico in applicazioni complesse, permettono di semplificare, rendere più elegante e documentare meglio sia il design che la programmazione. Sono considerati un concetto fondamentale per la progettazione e per lo sviluppo di sistemi a oggetti.
I metodi di refactoring sono passaggi nello sviluppo software che hanno come scopo la modifica di codice e design, mantenendo però intatta la funzionalità. Servono a rivedere e adattare design e codice per facilitare ulteriori interventi di estensione funzionale. La loro stretta relazione con i design patterns consiste nel fatto che i passaggi di refactoring più complessi hanno molto spesso un pattern come obiettivo finale.
Il test automatico è un argomento ancora poco trattato in corsi teorici, ma di fondamentale importanza nella realtà dello sviluppo software. Una buona infrastruttura di test di unità permette cicli di refactoring brevi, diminuendo il rischio di inconsistenze, e aiuta ad ottenere una maggiore robustezza del software. Inoltre il suo utilizzo sistematico aumenta la fiducia dello sviluppatore nel proprio codice. Tutto questo ha come conseguenze un incremento della produttività e una migliore gestione dell'evoluzione del software.
Introduzione a Java e alla programmazione a oggetti
Il linguaggio Java, diffusosi inizialmente come supporto per lo sviluppo di pagine interattive e animazioni su Web, è in realtà un linguaggio di programmazione completo, rigorosamente object-oriented. La sua portabilità e la biblioteca di classi fornita con il sistema di sviluppo standard contribuisce a fare del linguaggio uno strumento ideale per applicazioni di ogni tipo: gestionale, tecnico, grafico, real-time, ecc.
Java è inoltre perfettamente adatto come primo linguaggio per l'apprendimento della programmazione a oggetti.
Java Avanzato
Il corso si divide in due parti:
- Interfacce grafiche. L'idea write once, run anywhere fa di Java il linguaggio più adatto per applicazioni multi-piattaforma, applet o applicazioni funzionanti su sistemi diversi e con interfacce grafiche differenti.
- Programmazione distribuita. Socket, serializzazione e oggetti distribuiti permettono la realizzazione semplificata di architetture ripartite sulla rete. Oltre agli elementi base di comunicazione e ad alcune applicazioni, ci sarà una breve introduzione ai concetti che stanno alla base dell'interfaccia di comunicazione con banche dati relazionali.
Informatica di base per elettronici (1993-2002)
Si tratta di un corso della durata di due semestri, durante i quali viene introdotta la programmazione agli studenti del ciclo di elettronica. Il linguaggio usato è il C, per facilitare il compito degli studenti nei semestri superiori, dove avranno modo di utilizzare il linguaggio a più riprese. Lo scopo della lezione non è però quello di insegnare un linguaggio particolare, bensì avere a disposizione un mezzo per imparare la programmazione. Qualsiasi altro linguaggio potrebbe essere utilizzato.
Algoritmi e strutture di dati (1994-2000)
Questo corso di un semestre rappresenta il seguito dei due semestri di informatica di base per gli studenti di elettronica. Dopo aver acquisito i concetti di programmazione diventa necessario insegnare loro a implementare algoritmi particolari, valutare i costi asintotici degli algoritmi e gestire strutture di dati complesse. Elemento fondamentale del corso è il concetto di ADT (abstract data type) realizzato in C.
Banche dati relazionali (1994)
Si tratta di un corso di un solo semestre in cui vengono introdotti i concetti di banca dati relazionale, DBMS, processo di normalizzazione dei dati, linguaggi di queries, con particolare riguardo a SQL.
Sistemi operativi (1998-2001)
In questo corso di un semestre si tratta di introdurre l'utilizzo del sistema operativo Unix, con particolare riguardo allo standard Posix. Vari comandi di shell e utilities vengono spiegati e utilizzati. Nella seconda parte del semestre viene poi introdotto il linguaggio Perl, con particolare riguardo al suo utilizzo come linguaggio di script.