Il C++ e` un linguaggio di programmazione "all purpose", ovvero
adatto alla realizzazione di qualsiasi tipo di applicazione, da quelle real time a
quelle che operano su basi di dati, da applicazioni per utenti finali a sistemi
operativi. Il fatto che sia un linguaggio "all purpose" non vuol comunque dire che
qualsiasi cosa va fatta in C++, esistono moltissimi linguaggi di programmazione
alcuni dei quali altamente specializzati per compiti precisi e che quindi possono
essere in molti casi una scelta migliore poiche` consentono di ottenere un rapporto
"costi di produzione/prestazioni" migliore per motivi che saranno chiari tra poche
righe.
Negli ultimi anni il C++ ha ottenuto un notevole successo per diversi motivi:
- Conserva una compatibilita` quasi assoluta (alcune cose sono diverse)
con il suo piu` diretto antenato, il C, da cui eredita la sintassi e la
semantica per tutti i costrutti comuni, oltre alla notevole flessibilita`
e potenza;
- Permette di realizzare qualsiasi cosa fattibile in C senza alcun
overhead addizionale;
- Estende le caratteristiche del C fornendo i meccanismi per l'astrazione
dei dati e la programmazione orientata agli oggetti, introducendo
costrutti innovativi (modelli, Run Time Type Information...) e fornendo
uno dei migliori sistemi di tipi mai realizzato (cosa che manca nel C);
- Possibilita` di portare facilmente le applicazioni verso altri sistemi;
Comunque il C++ presenta anche degli aspetti negativi (come ogni linguaggio),
in parte ereditate dal C:
- La potenza e la flessibilita` tipiche del C e del C++ non sono gratuite.
Se da una parte e` vero che e` possibile ottenere applicazioni in generale
piu` efficienti (rispetto ad agli altri linguaggi), e anche vero che tutto
questo e` ottenuto lasciando in mano al programmatore molti dettagli e
compiti che negli altri linguaggi sono svolti dal compilatore; e` quindi
necessario un maggiore lavoro in fase di progettazione e una maggire attenzione
ai particolari in fase di realizzazione, pena una valanga di errori spesso
subdoli e difficili da individuare che possono far levitare drasticamente
i costi di produzione;
- Il compilatore e il linker del C++ soffrono di problemi relativi
all'ottimizzazione del codice dovuti alla falsa assunzione che programmi
C e C++ abbiano comportamenti simili a run time: il compilatore nella
stragrande maggioranza dei casi si limita ad eseguire le ottimizzazioni
tradizionali, sostanzialmente valide in linguaggi come il C, ma spesso
inadatte a linguaggi pesantemente basati sulla programmazione ad oggetti;
il linker poi da parte sua e` rimasto immutato e non esegue alcun tipo di
ottimizzazione che non possono essere effettuate a compile-time;
- Infine manca ancora uno standard per il linguaggio, cosa che crea problemi
in fase di porting su altre piattaforme. Fortunatamente uno standard e
ormai in avanzata fase di discussione ed e` possibile consultare i
primi draft;
Obiettivo di quanto segue e` quello di introdurre alla programmazione in C++,
spiegando sintassi e semantica dei suoi costrutti anche con l'ausilio di opportuni
esempi. All'inizio verranno trattati gli aspetti basilari del linguaggio (tipi,
dichiarazioni di variabili, funzioni,...), quando poi il lettore sara` in grado di
comprendere, analizzare e realizzare un programma si procedera` a trattare gli
aspetti peculiari del linguaggio (classi, template, eccezioni); alla fine verranno
analizzate alcune librerie relative all'input/output.
Il corso e` rivolto a persone che non hanno alcuna conoscenza del linguaggio, ma
potra` tornare utile anche a programmatori che possiedono una certa familiarita`
con esso. L'unico requisito richiesto e` la conoscenza dei principi della
programmazione orientata agli oggetti (OOP), tuttavia non essendo un corso di
programmazione, la capacita` di programmare in un qualsiasi altro linguaggio e`
ritenuta dote necessaria alla comprensione di quanto segue.
Per chi non avesse conoscenza di programmazione ad oggetti si rimanda a
"I principi della programmazione
orientata agli oggetti", Mondo Bit N.1 - Giugno 1995.
Salvo rare eccezioni non verranno discussi aspetti relativi a tematiche di
implementazione dei vari meccanismi e altre note tecniche che esulano dagli
obiettivi del corso. Per eventuali domande e osservazioni sui contenuti di
quanto segue potete fare riferimento al mio e-mail:
Marotta@CLI.DI.UniPi.It, le vostre
domande e le relative risposte (se ritenute di interesse generale) saranno ospitate
in un apposito spazio.
Un ultimo avvertimento: quanto segue cerca di trarre i massimi benefici da una
concezione stile ipertesto, in alcuni casi ci saranno dei link a pagine che
dovranno ancora essere rese disponibili; mi scuso pertanto fin da ora per i disagi
che cio` comportera`.
Pagina precedente - Pagina successiva