PDA

View Full Version : Da Java a c++


Thunderfox
26-12-2008, 23:15
Ciao a tutti, sono un programmatore Java J2EE e vorrei imparare a programmare in visual c++ così da poter creare applicazioni per windows.

Ho scaricato Visual Studio Express e gli sto' dando un'occhiata....

Conoscete per caso una guida o un tutorial che mi mostrano le differenze tra i 2 linguaggi così da entrare subito nell'ottica del c++ ?

Grazie.

variabilepippo
26-12-2008, 23:30
Il C++ è un linguaggio complesso, più che un tutorial dovresti cercare un buon libro. Per sviluppare applicazioni Windows poi dovrai scegliere un framework (MFC, VCL, QT, wxWidgets, ...) da studiare in parallelo.

Thunderfox
26-12-2008, 23:46
Intanto grazie per la risposta :)

Allora come libro ne ho comprato uno qualche anno fa dell'Apogeo, precisamente questo :

http://www.librinformatica.it/novita/copertine02/a20310.jpg

Come framework qual'è il più consigliato ?

fero86
27-12-2008, 07:23
Come framework qual'è il più consigliato ? veramente se vuoi sviluppare applicazioni per Windows in maniera produttiva il C++ non é il linguaggio piu consigliato: quello si usa piu che altro nella programmazione di sistema.

provenendo da Java una scelta migliore per cominciare in poco tempo a sviluppare applicazioni per Windows sarebbe il C#; a quel punto scompare anche l'imbarazzo della scelta del framework, perché in quel caso IL framework é uno solo.

se proprio vuoi rinunciare agli innumerevoli vantaggi (sotto ogni punto di vista) dello sviluppo in .NET rispetto a quello in C++ allora il framework piu consigliabile é secondo me WTL, che peró non é propriamente gratuito: di per sé lo sarebbe, tuttavia esso si basa su ATL che a sua volta é distribuito solo con le versioni a pagamento di Visual Studio.

degli altri 4 che ti ha consigliato variabilepippo:

MFC é troppo vecchio, WTL é molto meglio;
la VCL non fa parte di Visual Studio ne' puó essere utilizzata con questo IDE;
Qt e wxWidgets sono entrambi gratuiti e opensource e rispetto ai precedenti ti danno il vantaggio della portabilitá, al costo peró di una lieve perdita di performance e di una dipendenza da una libreria esterna.

cionci
27-12-2008, 10:12
Ciao a tutti, sono un programmatore Java J2EE e vorrei imparare a programmare in visual c++ così da poter creare applicazioni per windows.
Impara C# il passaggio sarà veramente molto più semplice.

Thunderfox
27-12-2008, 13:42
Mmmh allora credo che darò un'occhiata al C#, anche se adesso mi incuriosisce il .NET ..... per il .NET va bene Visual Studio come ambiente di sviluppo no ?

cionci
27-12-2008, 13:47
Mmmh allora credo che darò un'occhiata al C#, anche se adesso mi incuriosisce il .NET ..... per il .NET va bene Visual Studio come ambiente di sviluppo no ?
C# usa appunto il framework .Net. Diciamo che è d'obbligo Visual Studio ;)

Thunderfox
27-12-2008, 15:03
Ok mi avete convinto, mi butto sul C# ;)

fero86
27-12-2008, 17:47
Ok mi avete convinto, mi butto sul C# ;) fai benissimo :)
C# é un linguaggio molto piu moderno e potente, e anche solo con Microsoft Visual C# 2008 Express ottieni spesso una produttivitá N volte maggiore di quella che otterresti con la maggior parte di qualunque accoppiata IDE/framework per C++.

il C++ di questi tempi si rende necessario solo in situazioni di legacy per cosi dire: Windows é programmato in C e C++, e tutte le API sono esportate come funzioni C, perció se devi farne uso pesante il C++ é d'obbligo. ma tra qualche tempo spariranno anche questi legami: credo che le versioni future di Windows (forse giá da quella dopo la Seven) saranno basate su Singularity, un sistema operativo opensource (per ora) sviluppato in un linguaggio simile a C#.

Thunderfox
27-12-2008, 19:05
Ok, grazie per le delucidazioni, finora non mi ero mai interessato al C# perchè molto stupidamente credevo si trattasse del C...

Comunque con Visual Studio C# sto creando un programma che fa inserire dei dati anagrafici e ne tira fuori il codice fiscale, giusto per entrare nell'ottica (finora ho sempre programmato in Java per la creazione di portali... quindi tutta roba web).

E' molto simile al Java e infatti non mi trovo spaesato :)

cionci
27-12-2008, 20:03
Non a caso agli albori del C# se ne parlava come di una scopiazzatura di Java da parte di MS ;)
fero86: mi sembra un po' limitato parlare così del terzo linguaggio più usato al mondo :D

cdimauro
27-12-2008, 22:46
http://www.artima.com/intv/csdes.html

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/hejlsberg_0800.html

http://genamics.com/developer/csharp_comparative.htm

http://www.artima.com/intv/anders.html

;)

cionci
28-12-2008, 08:51
http://www.artima.com/intv/csdes.html

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/hejlsberg_0800.html

http://genamics.com/developer/csharp_comparative.htm

http://www.artima.com/intv/anders.html

;)
:confused:

cdimauro
28-12-2008, 12:58
Non a caso agli albori del C# se ne parlava come di una scopiazzatura di Java da parte di MS ;)
:fiufiu: :D

fero86
28-12-2008, 13:16
Non a caso agli albori del C# se ne parlava come di una scopiazzatura di Java da parte di MS ;) erano i soliti troll che non avevano mai utilizzato Visual C# perché loro preferiscono le tecnologie opensource, dove "opensource" qui é da leggersi come "GNU" :asd:
oppure si trattava delle solite rivistacce da edicola :)

C# é veramente molto diverso da Java, assomiglia decisamente di piu ai prodotti della ex-Borland (non a caso alcuni dei progettisti sono gli stessi).


fero86: mi sembra un po' limitato parlare così del terzo linguaggio più usato al mondo :D le statistiche d'uso non fanno testo: anche il C se é per questo é ancora molto usato :D
eppure usare il C quando c'é il C++ non ha senso, sarebbe come usare Windows 95 quando ci sono XP e Vista.

cionci
28-12-2008, 13:23
:fiufiu: :D
Non capisco...ho detto una cosa sbagliata ? Non è forse vero che agli albori molti parlavano del C# come il Java di MS ? Non ho mica detto che lo è :confused:

fero86: chi usa tecnologie opensource è un troll ?
Questa convinzione che il C++ sia un superset del C è davvero dura da eradicare :D E' anche uno dei motivi principali per cui molte persone programmano male in C++ :D

cdimauro
28-12-2008, 13:27
erano i soliti troll che non avevano mai utilizzato Visual C# perché loro preferiscono le tecnologie opensource, dove "opensource" qui é da leggersi come "GNU" :asd:
oppure si trattava delle solite rivistacce da edicola :)

C# é veramente molto diverso da Java, assomiglia decisamente di piu ai prodotti della ex-Borland (non a caso alcuni dei progettisti sono gli stessi).
IL progettista è lo stesso del Turbo Pascal prima e di Delphi poi. :cool:
Non capisco...ho detto una cosa sbagliata ? Non è forse vero che agli albori molti parlavano del C# come il Java di MS ? Non ho mica detto che lo è :confused:
No, ci mancherebbe. Siccome è, appunto, una leggenda metropolitana che circola da tempo, ho soltanto portato un po' di roba per smentirla. :D
Questa convinzione che il C++ sia un superset del C è davvero dura da eradicare :D
Mumble. Non lo sarebbe? :stordita:
E' anche uno dei motivi principali per cui molte persone programmano male in C++ :D
Forse perché provengono dal C. :fagiano:

fero86
28-12-2008, 13:37
Non capisco...ho detto una cosa sbagliata ? Non è forse vero che agli albori molti parlavano del C# come il Java di MS ? Non ho mica detto che lo è :confused: lo fanno ancora se é per questo, ma solo perché sono dei troll, appunto :)
ho visto troppi miei coetanei (addirittura dal vivo anche) enunciare di questi fantomatici teoremi senza argomentazione alcuna solo per cogliere l'occasione per sparlare di Microsoft.


fero86: chi usa tecnologie opensource è un troll ? no, ma lo stereotipo di utente Láinucs di cui parlo io che non si azzarda ad usare tecnologie Microsoft indubbiamente si. ed é uno stereotipo anche ben diffuso.


Questa convinzione che il C++ sia un superset del C è davvero dura da eradicare :D E' anche uno dei motivi principali per cui molte persone programmano male in C++ :D se é per questo nemmeno XP e tantomeno Vista sono sovrainsiemi (perché dire "superset" quando c'é il vocabolo italiano? :D) di Windows 95: sono sistemi operativi completamente diversi. ma mi spieghi quali features ha il C che mancano al C++? la sintassi é praticamente identica fatta eccezione per le classi, i templates, i riferimenti, e tutta la marea di features che mancano al C, e anche le differenze semantiche sono pochissime e si percepiscono solo in situazioni particolari; inoltre la STL del C++ é molto piu potente e piu facile da usare della libreria di I/O del C, senza contare che all'occorrenza (leggasi: in situazioni di legacy) é ancora possibile usare in C++ le librerie standard del C.
e allora dove starebbe tutto questo grande impedimento nell'usare il C++ nel 2009? c'é chi parla di perdite di performance, ma anche qui, tutti teoremi non dimostrati, che equivalgono ad aria fritta.

fero86
28-12-2008, 13:51
senza contare che all'occorrenza (leggasi: in situazioni di legacy) é ancora possibile usare in C++ le librerie standard del C. e aggiungo: le situazioni di legacy in questo caso sono praticamente inesistenti a causa dei problemi di ABI mismatch.

cionci
28-12-2008, 13:53
la sintassi é praticamente identica fatta eccezione per le classi, i templates, i riferimenti, e tutta la marea di features che mancano al C, e anche le differenze semantiche sono pochissime e si percepiscono solo in situazioni particolari;
Semplicemente sono linguaggi diversi, vedi sotto.
Mumble. Non lo sarebbe? :stordita:
Non lo è, i compilatori C++ non possono compilare codice C99. Se si studiasse in modo approfondito il C99 (cosa che io sinceramente non ho fatto), ci sarebbero tantissime differenze, alcune le puoi vedere qui: http://gcc.gnu.org/gcc-4.3/c99status.html
Per riferimento qui: http://std.dkuug.dk/JTC1/SC22/WG14/www/C99RationaleV5.10.pdf
Solo poche sono compatibili con lo standard C++ ;)
Se un compilatore C++ non può compilare codice C allora C++ non è un superset di C ;)
Però io ne facevo più una questione di mentalità. Pensare che C++ sia un superset di C porta inevitabilmente a prendere brutte abitudini nella programmazione.
Forse perché provengono dal C. :fagiano:
Molte volte solo perché chi gli insegna il C++ è convinto che il C++ sia un superset del C :D Quindi insegna il C++ con la mentalità del C, cominciando da subito a mescolare programmazione ad oggetti e procedurale, cosa che anche se permessa, secondo me sarebbe meglio cercare di fare il meno possibile.

cdimauro
29-12-2008, 20:21
Semplicemente sono linguaggi diversi, vedi sotto.

Non lo è, i compilatori C++ non possono compilare codice C99. Se si studiasse in modo approfondito il C99 (cosa che io sinceramente non ho fatto), ci sarebbero tantissime differenze, alcune le puoi vedere qui: http://gcc.gnu.org/gcc-4.3/c99status.html
Per riferimento qui: http://std.dkuug.dk/JTC1/SC22/WG14/www/C99RationaleV5.10.pdf
Solo poche sono compatibili con lo standard C++ ;)
Se un compilatore C++ non può compilare codice C allora C++ non è un superset di C ;)
Però io ne facevo più una questione di mentalità. Pensare che C++ sia un superset di C porta inevitabilmente a prendere brutte abitudini nella programmazione.

Molte volte solo perché chi gli insegna il C++ è convinto che il C++ sia un superset del C :D Quindi insegna il C++ con la mentalità del C, cominciando da subito a mescolare programmazione ad oggetti e procedurale, cosa che anche se permessa, secondo me sarebbe meglio cercare di fare il meno possibile.
Il C++ è nato per essere un superset del C, e lo è stato per un bel pezzo.

Il suo problema è che dopo la sua standardizzazione è rimasto "cristallizzato", mentre per il C, dopo 10 anni, è arrivato l'aggiornamento alla versione '99.

Quindi attualmente hai ragione: al C++ mancano tante funzionalità introdotte col C99. Con versioni più vecchie (che tra l'altro sono le più usate, anche se questo non c'entra col problema che hai giustamente evidenziato) la compatibilità è molto più elevata.

Vedremo se, con la prossima revisione del linguaggio, il C++ ingloberà anche le estensioni del C99, tornando allo status di superset.

tomminno
30-12-2008, 12:36
credo che le versioni future di Windows (forse giá da quella dopo la Seven) saranno basate su Singularity, un sistema operativo opensource (per ora) sviluppato in un linguaggio simile a C#.

Prima di vedere (una evoluzione di) Singularity all'opera in un prodotto commerciale potrebbero passare 10-15 anni, e sicuramente non prima che qualcuno abbia fatto il porting delle Win32 per Singularity.
Un sistema operativo senza software non serve a nessuno.

tomminno
30-12-2008, 12:39
e allora dove starebbe tutto questo grande impedimento nell'usare il C++ nel 2009? c'é chi parla di perdite di performance, ma anche qui, tutti teoremi non dimostrati, che equivalgono ad aria fritta.

Prova a programmare con elettroniche con 4KB di RAM tipo ARM 7 senza MMU e vedrai che devi rinunciare anche a molte funzioni del C, di spazio per le classi nemmeno a parlarne... Eppure parliamo sempre del 2009.
Le perdite di performance sono molto misurabili, ad esempio è arcinota la non efficienza delle classi stream del C++ (che comunque è ancora niente rispetto alla non efficienza del .NET), ultimamente mi è capitato spesso di dover riscrivere in C++ dei parser di log che in C# non terminavano in tempo utile (1 giornata di elaborazione/giorno di log)

cdimauro
30-12-2008, 12:47
Lo spazio occupato dalle classi... dipende come sono fatte le classi. :D

Non è che necessariamente una classe debba occupare più spazio di un'equivalente struct, né tanto meno che debba essere più inefficiente rispetto all'uso di funzioni statiche o puntatori a funzioni. ;)

Per quanto riguarda la programmazione di sistema il C++ è un bel linguaggio perché permette di definire in maniera estremamente precisa quali caratteristiche utilizzare e come usarle.

Per quanto riguarda Singularity, se scrivo un'applicazione .NET molto probabilmente utilizzerò soltanto le classi di questo framework e non le API di Win32, per cui nell'arco di una decina d'anni non vedo perché non si dovrebbe pensare di poter usare un s.o. come questo basato interamente su .NET, che rappresenta il futuro dei s.o. MS. :cool:

tomminno
30-12-2008, 15:09
Lo spazio occupato dalle classi... dipende come sono fatte le classi. :D

Non è che necessariamente una classe debba occupare più spazio di un'equivalente struct, né tanto meno che debba essere più inefficiente rispetto all'uso di funzioni statiche o puntatori a funzioni. ;)


Quando non hai ram nemmeno per usare una sprintf, capisci bene che lo spazio di manovra per le classi è molti ristretto.


Per quanto riguarda Singularity, se scrivo un'applicazione .NET molto probabilmente utilizzerò soltanto le classi di questo framework e non le API di Win32, per cui nell'arco di una decina d'anni non vedo perché non si dovrebbe pensare di poter usare un s.o. come questo basato interamente su .NET, che rappresenta il futuro dei s.o. MS. :cool:

Se guardi bene .NET è un enorme wrapper sopra le win32.
Ed inoltre se oggi puoi usare tanti linguaggi diversi è perchè bene o male tutti sono interoperabili con il C, ma il .NET è comprensibile solo a .NET, prova a richiamare una classe .NET da Java, senza passare da COM.

cdimauro
30-12-2008, 17:26
Quando non hai ram nemmeno per usare una sprintf, capisci bene che lo spazio di manovra per le classi è molti ristretto.
Indubbiamente, ma sta a te scegliere in maniera accurata quali strumenti usare e come. Il C++ né ti forza a usare le classi virtuali né ti pone dei limiti di per sé: puoi benissimo usarlo per rimpiazzare il C, e quando ti capita l'occasione sfruttarne qualche caratteristica peculiare.
Se guardi bene .NET è un enorme wrapper sopra le win32.
Vero, ma come programmatore con cosa interagisco, con le classi .NET o con le API Win32? Nel primo caso NON sono legato all'implementazione, nel secondo caso sì e, quindi, avrei problemi a far girare le mie applicazioni su Singularity.
Ed inoltre se oggi puoi usare tanti linguaggi diversi è perchè bene o male tutti sono interoperabili con il C, ma il .NET è comprensibile solo a .NET, prova a richiamare una classe .NET da Java, senza passare da COM.
In un futuro in cui c'è solo .NET ha poca importanza. Java, poi, potrebbe benissimo girare sul runtime di .NET, come tutti gli altri linguaggi. ;)