Introduzione
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 implica comunque dire che qualsiasi
applicazione debba essere realizzata 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, rimediando almeno in parte alle carenze
del suo predecessore (che manca soprattutto di un buon sistema dei tipi).
In particolare l'introduzione di costrutti quali i Template e le Classi rende
il C++ un linguaggio multiparadigma (con particolare predilezione per il paradigma
ad oggetti e la programmazione generica);
- 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 maggiore 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 non e` cambiato
molto e non esegue alcune ottimizzazioni che non sono fattibili a compile-time.
La sempre maggiore diffusione del C++ sta comunque cambiando questa situazione
ed e` prevedibile nei prossimi anni una sostanziale evoluzione di compilatori
e linker, grazie anche alla recente adozione di uno standard.
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. Verranno inizialmente trattati gli aspetti basilari del linguaggio (tipi,
dichiarazioni di variabili, funzioni,...), per poi passare all'esame degli aspetti
peculiari del linguaggio (classi, template, eccezioni...); alla fine analizzeremo
(almeno in parte) l'input/output tramite stream e la libreria standard del linguaggio.
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. La capacita` di programmare in un qualsiasi altro linguaggio e` invece
ritenuta dote necessaria alla comprensione di quanto segue. Salvo rare eccezioni
non verranno discussi aspetti relativi a tematiche di implementazione dei vari
meccanismi e altre note tecniche che esulano dagli obiettivi di queste pagine.
|