Da Java al C++
Questo seminario e' il proseguimento di
Java 2 e il suo uso nella simulazione di esperimenti di Fisica .
Esso vuole mostrare come sia facile imparare a programmare in C++ dopo che
si e' imparato a programmare a oggetti usando Java .La complessita' del
linguaggio impone di concentrarci nei dettagli restringendo il campo
alle sole applicazioni essenziali della programmazione object oriented(in
pratica il contenuto delle prime due lezioni del corso su Java).Questo
e' il normale percorso didattico ormai seguito in alcune
universita' americane. Come al solito una serie di 3 lezioni
Imparate C++ in 3 giorni corredata da numerosi esempi di programmi, sara' la base del seminario.
Zito Giuseppe:info@zitogiuseppe.com
Seminari tenuti al Dipartimento di Fisica di Bari in varie occasioni a partire da Marzo 2000
Al seminario
sono collegati i gruppi di esercizi 1,2 .
Materiale usato al seminario disponibile.
Indice
Introduzione
Per dirla in breve:
- La buona notizia:se conoscete Java conoscete gia' il 90% del C++.
Cioe' dopo qualche ora potete gia' scrivere programmi C++.
- La cattiva notizia:quel 10% per cento che non conoscete (cioe' puntatori
e gestione della memoria) e' essenziale per programmare in C++.
Se volete scrivere programmi C++ come un programmatore C++ e capire
i programmi scritti da altri programmatori, dovete capire a fondo le sottigliezze dei puntatori e le delizie della criptica notazione dei programmi C/C++.
La struttura di questo seminario
In questo seminario ci proponiamo di seguire lo stesso schema del precedente
seminario.
Le caratteristiche fondamentali di C++ sono presentate in una serie di lezioni che permettono di
"imparare C++ in 3 giorni". La parte piu' importante di queste lezioni sono i numerosi esempi di programmi presentati.
Cos'e' C++?
- C++ e' un linguaggio di programmazione generale orientato agli oggetti
.
- C++, nato circa 10 anni dopo il C, e' stato scritto da Bjarne Stroustrup in modo da essere
compatibile col C e da essere efficiente come il C.
- C++ non e' ne' portatile ne' sicuro (nel senso di Java) percio' bisogna
scordarsi le applicazioni di rete.Dovete inoltre aspettarvi differenze tra una macchina e l'altra e tra un compilatore e l'altro. Ad esempio,
i programmi che corredano questo seminario sono stati scritti su una
macchina Unix e provati con il compilatore g++ e potrebbero non funzionare
su un'altra macchina/compilatore.
- C++ solo adesso ha una Standard Template Library o STL con una definizione di alcune classi standard come la classe String. Ma
in generale mancano librerie di classi standard per costruire interfacce
grafiche,multiprogrammazione o applicazioni di rete.Per questo
motivo,questi argomenti sono fuori discussione in un corso introduttivo su C++.
In definitiva, molta della complessita' del C++ nasce dalla necessita'
di essere compatibile col C. Ad esempio molte caratteristiche del linguaggio,
come le strutture (struct) e le unioni (union) sono ridondanti ora che ci
sono le classi ma vengono mantenute per questioni di
compatibilita'.Lo stesso vale con i puntatori, anche se qui il discorso e'
piu' delicato: secondo i programmatori C/C++ i puntatori sono l'essenza
del linguaggio.
Un'altra caratteristica del C/C++ che crea complessita'
e' l'uso del preprocessor.Insomma
come dice lo stesso Bjarne Stroutstrup:
Non fatevi prendere dal panico,col tempo tutto diventera' chiaro.
Imparate C++ in 3 giorni!
Per imparare C++ in 3 giorni procedete a provare questa serie di circa 20 programmi presentati in 3 lezioni che vi
permetteranno di capire le piu' importanti
caratteristiche di C++.
Imparare C++ con Cint e Root
ROOT e' un insieme autoconsistente di tools
per l'analisi di dati che puo' essere scaricato gratis dal Cern. Per quanto
ci riguarda, il suo interesse e' nel fatto di contenere CINT una versione interpretata di C++:in pratica
un C++ interattivo che e' uno strumento ideale per il principiante.
Questo anche perche' ROOT contiene tutta una serie di oggetti grafici
utilizzabili da CINT che permettono di fare velocemente delle analisi
statistiche o delle visualizzazioni in C++.
ROOT oltre al manuale, ha degli ottimi tutorial:1 , 2 e 3.
Ma soprattutto,per quel che riguarda l'apprendimento del C++, e'
interessante questo C++ basics for ROOT User che copre all'incirca il materiale della lezione 1 di questo corso.
Tutti gli esercizi di questa lezione possono essere eseguiti con CINT.Interessante anche questo materiale.
Per chi conosce il software del Cern, occorre spiegare che ROOT non e' altro che la versione object-oriented di Paw dove il C++ ha sostituito il Fortran.
Le potenzialita' sono identiche, inclusa l'estrema facilita' di uso, veramente
eccezionale per un'applicazione basata sulla programmazione in C++:anzi
esiste questa paw to root conversion table che permette un rapidissimo apprendimento per
esperti di Paw.
C++ e Python
Se state cercando di imparare C++ e non conoscete Python, allora forse vale la
pena di cercare di imparare anche Python.Ci sono alcuni validi motivi per farlo.
Il primo motivo e' che Python ,anche se non e' un C++ interattivo, permette la creazione
di classi ed oggetti in maniera interattiva, rendendo molto piu' semplice
l'acquisizione di alcuni concetti base della programmazione ad oggetti.
Come esempio consideriamo la realizzazione in Python del programma 1 della
seconda lezione di questo corso:
python
class Counter:
"Un semplice contatore"
value=0
def increment(self,n):
self.value=self.value+n
x = Counter()
print x.value
x.increment(5)
print x.value
CTRL-d
Ecco un esempio di uso didattico
di python : How to Think Like a Computer Scientist
Il secondo motivo e' che voi potete estendere Python con moduli scritti in C.
Il terzo motivo e' che potete includere Python in un vostro programma C++
rendendolo di fatto estendibile e con la possibilita' di scrivere degli
script in Python che realizzano particolari funzioni della vostra applicazione.
Trovate tutta la documentazione sul sito di python.
Puo essere inoltre interessante questa: Numerical Computing in Python:
A Guide for Matlab Users
Aspetti di C++ non trattati
Ecco una lista non esaustiva degli argomenti non affrontati dal corso. Comunque alcuni
di questi aspetti sono affrontati in questa raccolta di
programmi dimostrativi e in questa lezione sullo Sviluppo di applicazioni grafiche in C++ con Qt,OpenGl e OpenInventor
.
- Istruzione
typedef
- Costrutti per la gestione del namespace
- Alcuni costrutti sintattici ereditati dal C come
struct
,enum
,union
.
- L'uso del preprocessor
- Uso di makefile
- Realizzazione di funzioni generiche. Realizzazione di funzioni a cui si passano funzioni come argomento tramite puntatori.
- Run-Time Type Identification(RTTI)
- Ereditarieta' privata e protetta.
- I riferimenti indiretti(
reference
)
- Trattamento delle eccezioni
- Sviluppo interfacce grafiche con Qt e GNOME/GTK+
- Multiprogrammazione con thread
- Programmazione di applicazioni di rete (socket)
- I/O streams
Conclusione
Se guardiamo cosa si usa adesso come linguaggi nelle applicazioni "serie",ad
esempio negli esperimenti delle alte energie, scopriamo che 95% e' in C++
e 5% e' in Java. Non c'e' dubbio che al momento attuale il C++ sia la soluzione
sicura ai problemi piu' difficili come costruire un programma di un milione
di righe. D'altra parte il suo insegnamento come primo linguaggio comporta alcune
difficolta' data la sua complessita'. Il rischio
e' di perdersi nei dettagli. Spero di aver provato
con questa serie di lezioni che la maniera ideale (o quasi) di imparare il C++
e' quella di imparare prima Java e poi di passare al C++. E' questo l'approccio
che viene usato da molte Universita'.
INDIETRO a Materiali del Corso HTML e Java
Ultimo aggiornamento: