|
C++ Approfondimenti Selezionati - Corso Aziendale |
Il C++ è un linguaggio molto completo, con ampio supporto per paradigmi di programmazione diversi.
Non di rado, però, gli sviluppatori utilizzano solo un sottoinsieme piuttosto ridotto delle possibilità
offerte dal linguaggio. Ciò può portare all'adozione di soluzioni non ottimali, sotto il profilo di
efficienza, semplicità di uso, estendibilità, riusabilità, e così via.
Imparare gli idiomi e le tecniche di programmazione specifiche per un linguaggio flessibile come il C++
richiede tempo e discernimento: ciò che si rivela indispensabile per codice numerico può risultare del
tutto inutile per la realizzazione di business object riusabili, e viceversa. Per questo è utile
prevedere una scelta di argomenti ad ampio raggio, che permette di "comporre" il proprio corso di
approfondimento ideale.
Come sempre, ogni aspetto prescelto viene trattato sia sotto il profilo teorico che pratico, ed in
funzione degli argomenti selezionati può riguardare elementi di utilità immediata o suggerire
soluzioni alternative per il futuro. Più in generale, ogni singolo argomento porterà i partecipanti
a conoscere più a fondo il linguaggio, affinando gli strumenti che consentono di trovare la soluzione
migliore ad ogni problema.
Dettagli sul corso
Durata: La durata del corso dipende dai singoli argomenti prescelti. Indicativamente, una selezione significativa richiede mediamente due giornate di lezioni ed esercizi, mentre una più completa richiede quattro giornate. (con possibilita' di ulteriori giornate di workshop basate sul codice dell'azienda)
Partecipanti: massimo 15
Prerequisiti: Conoscenza del C++. I vari argomenti richiedono una conoscenza operativa del C++ per essere seguiti con profitto. Alcuni possono richiedere la conoscenza di elementi piu' avanzati (es. template).
Argomenti à la carte:
Efficienza
Cause vere e presunte di inefficienza. Costo di ereditarietà, polimorfismo, incapsulazione. Costo della semantica di valore. Eliminazione dei temporanei. Return value optimization, Named value optimization e costruttori operazionali. Tecnica delle classi duali. Incapsulazione intelligente: lazy ed eager evaluation. Classi proxy. Multithreading ed ottimizzazioni.
Design
Uso ed abuso dell'ereditarietà. Principio di Sostituibilità di Liskov. Uso dell'ereditarietà privata. Collezioni, type safety e polimorfismo. OOP Vs. Generic Programming. Modelli di funzione virtuale e problema della fragile base class. Oggetti autonomi e Legge di Demeter.
Multiple Dispatch
Funzioni polimorfe rispetto a più argomenti: un problema ricorrente, esaminato sia nelle sue soluzioni classiche (double dispatch), sia con soluzioni più recenti ed avanzate, basate sui template ed RTTI.
Globali, Singleton ed Altro
Discussione delle varianti possibili agli oggetti globali. Variazioni sul Singleton Pattern e problemi correlati: subclassing, distruzione, ordine di costruzione e rilascio di risorse. Classi Monostato.
Friendship
Come usare friend per rinforzare, e non indebolire, l’incapsulazione. L’importanza di una friendship estendibile: il caso del Visitor pattern. Unire friend ed ereditarietà virtuale per realizzare l'antimorfismo.
Template e Costruttori
Uso creativo dei costruttori. Il problema dello slicing di oggetti e come evitarlo. Template constructor e template assignment operator. Conversioni implicite ed esplicite: confronto tra raw e smart pointers. Smart pointers e politiche di rilascio senza overhead a run-time.
Eccezioni: introduzione
Modelli di gestione e propagazione degli errori. Uso delle Eccezioni in C++. Risorse e stack unwinding. Classi wrapper e smart pointers. Auto_ptr e RefCount_ptr. Eccezioni e costruttori, distruttori e return by value.
Ottimizzazioni Compile-Time
Ovvero: un po' di template magic. Affrontiamo due argomenti decisamente avanzati. Uno smart pointer portabile che "risparmia spazio" quando possibile, usando i template in modo sofisticato. Con l'occasione si riprendono argomenti di portabilita' tra CPU e compilatori diversi. Expression template ed eliminazione dei temporanei da espressioni complesse; produzione di codice ultra-ottimizzato. Esempi con classe stringa e classi numeriche.
C++ Traps&Pitfalls
Errori comuni di design e programmazione. Esempi: array e polimorfismo, funzioni virtuali e costruttori, costruttori e conversioni implicite, ecc.
Se siete interessati a questo seminario aziendale, potete compilare la
seguente
richiesta di contatto per fissare un possibile incontro.