View Full Version : C++ e GUI, consigli
Metalmino
17-01-2012, 21:50
Allora raga, vado brevemente a spiegarvi la mia situazione disastrosa.
Senza annoiarvi con inutili dettagli, mi sono iscritto solo a novembre (a causa di vari problemi) alla facoltà di ingegneria informatica, elettronica e delle telecomunicazioni.
Ora devo recuperare il programma che hanno fatto nel primo semestre di programmazione orientata agli oggetti in C++.
Ho comprato i libri della Deitel e devo dire che sono ottimi. Sono al capitolo 6 del primo libro (fondamenti di programmazione) e sinora non ho riscontrato problemi di sorta, anzi :) pian piano posso dire che sto imparando.
Il problema nasce cone le GUI. Vi linko il programma del mio professore: http://www.ce.unipr.it/people/tomamic/fondinfo
Come potete vedere nella sezione "Programmazione in C++", dopo le varie lezioni sul linguaggio, c'è la sezione "QT: interfacce grafiche" e sinceramente non ci sto capendo una beneamata cippa.
Sarà perchè ancora devo imparare bene il C++ (in pratica ho imparato le definizioni di classi, oggetti, file intestazione e sorgente, cicli while, do... while, for, switch, if, if... else e i vari accessori :D) o anche dopo aver finito sia il primo libro che il secondo (tecniche avanzate di programmazione) non capirò una cippa sulle GUI?
In tal caso, esiste qualche cartaceo sulle GUI con librerie QT? Devo per forza usare QT Creator ovviamente.
Per la cronaca, l'esame è a giugno xD insieme agli altri (programmazione c che inizia a febbraio, analisi matematica, fisica, geometria e vhdl-reti logiche).
Ciao,
io ti consiglio questo libro:
http://developer.qt.nokia.com/books/view/c_gui_programming_with_qt_4_2nd_edition_the_official_c_qt_book
L'ho usato per imparare le QT al fine di sviluppare un software nell'ambito di una tesi e mi sono trovato benissimo, considerando che non sono un esperto di C++
vendettaaaaa
18-01-2012, 10:26
Ti adoro, ho scaricato tutte le lezioni dei corsi del tuo prof, avevo proprio bisogno di qualcosa per continuare il mio autodidattismo (si dice così? :D )!!
Metalmino
18-01-2012, 14:03
Considerando che l'esame è a giugno penso che il mese prossimo (termine che mi sono prefissato per finire i due libri di programmazione C++) comprerò il libro da te consigliato ;)
Ovviamente conosco bene l'inglese, ma è di facile comprensione? Cioè, tutti i codici che scrive per implementare le GUI li spiega bene? :)
Inoltre, ritornando alla mia domanda precedente, secondo voi al termine dello studio ci capirò qualcosa sulle GUI senza dover acquistare il libro? :D
Grazie raga :)
Gimli[2BV!2B]
18-01-2012, 21:27
Adesso fondinfo la fa il timido Tomaiuolo? Il programma mi sembra discretamente più interessante di quello Educal (pace all'anima sua...)/Bertozzi (http://www.ce.unipr.it/people/educal/fi/programm.html) però è estremamente più ampio.
Vedendo le esercitazioni la progressione mi sembra forsennata.
Mi sembra di capire che parti praticamente dalle basi. Mi raccomando, cerca di fare più esercizi che puoi, non limitarti ad imparare a memoria costrutti e regole.
In fondo si tratta praticamente di imparare una lingua straniera, senza la pratica si resta *molto* impacciati.
Asseconda lo stile di programmazione e le eventuali manie del prof.
Analizza per bene esercitazioni ed esercizi, soprattutto agli inizi può tornare molto utile abbozzare tracce di soluzione su carta.
*non copiare*, risulta invece molto utile confrontare le proprie soluzioni con gli amici.
Se non trovi la soluzione dopo averci sbattuto la testa a lungo fa una bella pausa e riprova prima di cercare aiuto (arrivare alla soluzione con le proprie forze, soprattutto se sofferta, solitamente è una bella soddisfazione e aiuta molto ad imparare).
Dovresti riuscire a comprendere meglio le Qt una volta assorbiti per bene i concetti di programmazione ad oggetti: le Qt sono sostanzialmente un'enorme collezione di oggetti pronti all'uso.
Passare dalla prima parte del corso alle Qt è un bel salto concettuale, ma è la progressione naturale.
Cercando di fare un paio di similitudini all'inizio hai praticamente carta bianca e sei libero di usare una manciata di semplici mattoncini a mani nude per creare dei modellini. Con le Qt hai a disposizione un'officina piena di strumenti e componenti; quanto hai imparato prima sono materie prime, viti e giunzioni: potrai costruire qualsiasi cosa.
Apprezzo molto le Qt, le ho usate un po' e le ho trovate molto ordinate, molto complete e la documentazione ufficiale mi è stata sufficiente per produrre un buon progettino in breve tempo.
Per finire ti segnalo un corso che ho apprezzato molto sulla programmazione ad oggetti ed una spolverata di Standard Template Library (http://en.wikipedia.org/wiki/Standard_Template_Library): OOPCPP0405 - Reggiani Monica. Ti puoi ancora iscrivere in corsi.unipr.it (http://corsi.unipr.it/claroline/auth/courses.php?action=subscribe&category=INGINF&up=) e trovare sia slide che assegnamenti.
P.S. Non ci sarà mica anche il Deba a far delle lezioni...?
Metalmino
19-01-2012, 01:11
Frequenti l'università di Parma pure tu? :D comunque c'è solo Tomaiuolo. Al secondo semestre si farà programmazione in C e il prof dovrebbe essere Alberto Broggi.
Comunque come ho detto mi sono perso molte lezioni (per dirla in breve mi sono iscritto in ritardo per problemi di salute, sono celiaco xD) e quindi, anche se ora sto procedendo bene (sia con l'apprendimento e con gli esercizi) ho paura di non imparare le QT senza un supporto cartaceo, ma se come hai detto tu una volta appresi per bene i concetti della programmazione ad oggetti il salto per passare alle GUI sarà naturale allora mi tranquillizzo xD anche se credo che, anche per uso personale, il libro consiliatomi qualche post fa lo comprerò xD
Grazie mille per i consigli ;) gli esercizi li faccio sempre tutti e per ora non ho trovato grosse difficoltà (e sinceramente, per la prima volta in vita mia, posso dire che gli studi matematici del mio scientifico sperimentale mi stanno aiutando xD). Mi viene molto naturale elaborare soluzioni per poter scrivere il programma richeisto. Per quanto riguarda lo stile del prof, aimè, per i motivi su citati non li conosco pienamente. Speriamo bene :D
Gimli[2BV!2B]
19-01-2012, 20:01
Io son vecchio :), sono uscito da qualche anno. Leggendo altri indizi penserei anche al vecchio distaccamento di via Costituente...
Il libro che ti ha consigliato kurt_85 è consigliato dagli ex-troll in persona (http://doc.qt.nokia.com/4.7-snapshot/how-to-learn-qt.html), non mi sembra male. Anche le valutazioni in Amazon tendono a definirlo buono (http://www.amazon.com/Programming-Prentice-Source-Software-Development/product-reviews/0132354160/ref=cm_cr_pr_top_link_2?ie=UTF8&showViewpoints=0), anche se chi non lo ha apprezzato lo ha solitamente stroncato.
Tra l'altro, come puoi leggere nella pagina, puoi scaricare liberamente la prima edizione (http://www.qtrac.eu/C++-GUI-Programming-with-Qt-4-1st-ed.zip) del giugno 2006 incentrata sulle Qt 4.1, mentre la seconda arriva alle 4.3.
In bocca al lupo!
tecno789
19-01-2012, 21:15
ma perchè lì a parma si studia il C++ e qua a milano solo il C?? come siamo arretrati :fagiano:
Metalmino
19-01-2012, 23:32
Ops scusami Gimli :D ho già scaricato la prima edizione ma sicuramente come ho detto il libro lo comprerò :D crepi il lupo!
@tecno: un mio amico studia al politecnico di Milano, primo anno e anche lui studia il C e non il C++. Forse lo farete al secondo semestre, non so. Io dal 27 febbraio inizierò programmazione in C mentre come ho già detto al primo abbiamo fatto C++ orientato agli oggetti :D
tecno789
20-01-2012, 08:04
@tecno: un mio amico studia al politecnico di Milano, primo anno e anche lui studia il C e non il C++. Forse lo farete al secondo semestre, non so. Io dal 27 febbraio inizierò programmazione in C mentre come ho già detto al primo abbiamo fatto C++ orientato agli oggetti :D
nono proprio il C++ non è in programma negli esami che si fanno qui....
strano che vi insegnino prima la programmazione ad oggetti....:eek:
misteri delle università italiane :D
vendettaaaaa
20-01-2012, 10:10
nono proprio il C++ non è in programma negli esami che si fanno qui....
strano che vi insegnino prima la programmazione ad oggetti....:eek:
misteri delle università italiane :D
Pensa che mio cugino a Ottobre s'è laureato in ingegneria informatica (triennale) e il C++ l'ha a malapena sentito nominare. In compenso ha fatto molto Java. Non sono ancora esperto, ma a quanto ho capito C++ è più potente di Java, nel senso che ci si può fare di più, pur essendo più difficile e pericoloso da programmare a dovere.
E riguardo al C...credo che lo si studi ancora perchè i prof ritengono utile sviluppare una mentalità adatta alla programmazione procedurale prima di passare agli oggetti, però ora che inizio a capire cos'è una classe, un oggetto e come si relazionano tra di loro mi rendo conto che è tutto un altro livello rispetto alla programmazione procedurale. C'è anche una buona probabilità che alcuni prof insegnino ancora il C e simili perchè son vecchi e non hanno voluto o saputo passare al C++, cioè non hanno voluto o saputo cambiare modo di pensare.
Io stesso al 1° anno di Ingegneria Chimica al Politecnico ho fatto C, poi FORTRAN per svolgere calcolo scientifico (giusto per ribadire il concetto che alcuni prof si rifiutano di imparare cose nuove :rolleyes: ) e poi per fortuna il prof. di Metodi Numerici ci ha fatto lavorare in C++ con le sue librerie, tutta un'altra cosa :D
Pensa che mio cugino a Ottobre s'è laureato in ingegneria informatica (triennale) e il C++ l'ha a malapena sentito nominare. In compenso ha fatto molto Java. Non sono ancora esperto, ma a quanto ho capito C++ è più potente di Java, nel senso che ci si può fare di più, pur essendo più difficile e pericoloso da programmare a dovere.
E riguardo al C...credo che lo si studi ancora perchè i prof ritengono utile sviluppare una mentalità adatta alla programmazione procedurale prima di passare agli oggetti, però ora che inizio a capire cos'è una classe, un oggetto e come si relazionano tra di loro mi rendo conto che è tutto un altro livello rispetto alla programmazione procedurale. C'è anche una buona probabilità che alcuni prof insegnino ancora il C e simili perchè son vecchi e non hanno voluto o saputo passare al C++, cioè non hanno voluto o saputo cambiare modo di pensare.
Io stesso al 1° anno di Ingegneria Chimica al Politecnico ho fatto C, poi FORTRAN per svolgere calcolo scientifico (giusto per ribadire il concetto che alcuni prof si rifiutano di imparare cose nuove :rolleyes: ) e poi per fortuna il prof. di Metodi Numerici ci ha fatto lavorare in C++ con le sue librerie, tutta un'altra cosa :D
io andrei piano con le accuse alle unversità ecc ecc :D :D
programmazione OO e procedurale sono due cose distinte e non è che una è superiore all'altra in ogni contesto (come c++ non è superiore a java e java non è superiore a c++)
semplicemente per ogni ambito di utilizzo esiste un linguaggio più appropriato anche il tanto da te bistrattato fortran è comunque ancora parecchio richiesto sul mercato per la manutenzione e aggiornamento di vecchi sistemi che ancora funzionano in maniera egregia: ergo non essere così pronto a criticare l'operato degli altri quando sei ancora inesperto
es.
ti assicuro che nel mondo globalmente ci sono più programmatori C/ASM rispetto a programmatori C++/Java, la programmazione non si limita solamente ai PC :D :D :D
Metalmino
20-01-2012, 11:08
Programmazione ad oggetti e procedurale, come ben detto da fazz, sono due cose completamente distinte. Più di qualche volta mi è capitato di ascoltare prof che dicevano che è indifferente studiare prima il C o il C++ in quanto praticamente, a livello logico, hanno in comune solo la lettera "C" presente nel loro nome.
Per alcuni addirittura è meglio imparare prima il C++ in quanto ti indirizza alla programmazione "aziendale" (passatemi il termine) ed in più ingloba in qualche modo il linguaggio del C, quindi risulta più semplice dopo apprendere il C (come avviene alla mia università d'altronde :D)
vendettaaaaa
20-01-2012, 11:17
io andrei piano con le accuse alle unversità ecc ecc :D :D
programmazione OO e procedurale sono due cose distinte e non è che una è superiore all'altra in ogni contesto (come c++ non è superiore a java e java non è superiore a c++)
semplicemente per ogni ambito di utilizzo esiste un linguaggio più appropriato anche il tanto da te bistrattato fortran è comunque ancora parecchio richiesto sul mercato per la manutenzione e aggiornamento di vecchi sistemi che ancora funzionano in maniera egregia: ergo non essere così pronto a criticare l'operato degli altri quando sei ancora inesperto
es.
ti assicuro che nel mondo globalmente ci sono più programmatori C/ASM rispetto a programmatori C++/Java, la programmazione non si limita solamente ai PC :D :D :D
Mamma mia come siete polemici, non ho criticato nessuno :D
Anzi, a dire il vero sì: i miei prof, che m'hanno fatto usare FORTRAN per far cose che poi ho rifatto col C++, in modo molto più veloce e sicuro, quindi in questo caso so di cosa parlo.
Per il resto mi rimetto al vostro giudizio :D
Una cosa sola: credi che nel mondo ci siano globalmente più programmatori C per motivi validi o solo per inerzia generazionale? O meglio, credi che fra 50 sarà ancora così o nessuno più insegnerà il C, bensì C++ e C# e quindi la situazione si ribalterà? :D
Programmazione ad oggetti e procedurale, come ben detto da fazz, sono due cose completamente distinte. Più di qualche volta mi è capitato di ascoltare prof che dicevano che è indifferente studiare prima il C o il C++ in quanto praticamente, a livello logico, hanno in comune solo la lettera "C" presente nel loro nome.
Per alcuni addirittura è meglio imparare prima il C++ in quanto ti indirizza alla programmazione "aziendale" (passatemi il termine) ed in più ingloba in qualche modo il linguaggio del C, quindi risulta più semplice dopo apprendere il C (come avviene alla mia università d'altronde :D)
sicuramente partire da un superset come il c++ agevola il passaggio all'insieme più ristretto
ad esempio il mio percorso di studi in ambito programmazione è stato un pò contorto con diversi fork corsi paralleli e approfondimenti successivi ma sono passati un pò di anni
superiori
pascal
c++ procedurale VBA asm z80
c++ OO sql asm 8086 php
università
c++ procedurale scripting matlab asm mips
Java G scripting R (OO)
lavoro
c# java c c++ php sql asm scripting matlab GTK QT Objective-C a seconda dell'ambito applicativo richiesto
Mamma mia come siete polemici, non ho criticato nessuno :D
Anzi, a dire il vero sì: i miei prof, che m'hanno fatto usare FORTRAN per far cose che poi ho rifatto col C++, in modo molto più veloce e sicuro, quindi in questo caso so di cosa parlo.
Per il resto mi rimetto al vostro giudizio :D
Una cosa sola: credi che nel mondo ci siano globalmente più programmatori C per motivi validi o solo per inerzia generazionale? O meglio, credi che fra 50 sarà ancora così o nessuno più insegnerà il C, bensì C++ e C# e quindi la situazione si ribalterà? :D
dipende da come si evolverà la tecnologia nei prossimi 50 anni probabilmente fra 50 anni si userà qualcosa di diverso rispetto a c++ e c#
comunque non è questione di inerzia ma bensì di target applicativo con java, .net ecc ecc ci programmi applicativi che girano su computer, il c viene usato per qualsiasi cosa con elettronica embedded : frigoriferi, lavatrici ECU, orologi, telefoni, caricabatterie, termostati, caldaie,automobili, tv, telecomandi, radio, automazione industriale, robot, semafori ecc. ecc.
vendettaaaaa
20-01-2012, 12:40
sicuramente partire da un superset come il c++ agevola il passaggio all'insieme più ristretto
ad esempio il mio percorso di studi in ambito programmazione è stato un pò contorto con diversi fork corsi paralleli e approfondimenti successivi ma sono passati un pò di anni
superiori
pascal
c++ procedurale VBA asm z80
c++ OO sql asm 8086 php
università
c++ procedurale scripting matlab asm mips
Java G scripting R (OO)
lavoro
c# java c c++ php sql asm scripting matlab GTK QT Objective-C a seconda dell'ambito applicativo richiesto
dipende da come si evolverà la tecnologia nei prossimi 50 anni probabilmente fra 50 anni si userà qualcosa di diverso rispetto a c++ e c#
comunque non è questione di inerzia ma bensì di target applicativo con java, .net ecc ecc ci programmi applicativi che girano su computer, il c viene usato per qualsiasi cosa con elettronica embedded : frigoriferi, lavatrici ECU, orologi, telefoni, caricabatterie, termostati, caldaie,automobili, tv, telecomandi, radio, automazione industriale, robot, semafori ecc. ecc.
Interessante, soprattutto l'ultima parte. A questo proposito, quando qualche giorno fa ho cominciato a capire cosa sono classi e oggetti, mi sono infatti chiesto: vale la pena stare a concepire un oggetto per ogni componente semplice, come ad esempio, un telecomando...e mi son risposto istintivamente di no, non ne vale la pena visto che bisogna capire come interfacciare l'oggetto con il resto del codice...quindi capisco la non necessarietà dell'OOP. Ma al contempo mi son chiesto: allora, dato che il C++ deriva dal C e può essere usato proceduralmente, perchè non usare solo il C++? Anche tu affermi che è un superset...quindi, si usa ancora C per qualche motivo? C'è qualcosa che C può fare e il C++ no? O cmq che il C++ fa in modo molto meno efficiente?
Interessante, soprattutto l'ultima parte. A questo proposito, quando qualche giorno fa ho cominciato a capire cosa sono classi e oggetti, mi sono infatti chiesto: vale la pena stare a concepire un oggetto per ogni componente semplice, come ad esempio, un telecomando...e mi son risposto istintivamente di no, non ne vale la pena visto che bisogna capire come interfacciare l'oggetto con il resto del codice...quindi capisco la non necessarietà dell'OOP. Ma al contempo mi son chiesto: allora, dato che il C++ deriva dal C e può essere usato proceduralmente, perchè non usare solo il C++? Anche tu affermi che è un superset...quindi, si usa ancora C per qualche motivo? C'è qualcosa che C può fare e il C++ no? O cmq che il C++ fa in modo molto meno efficiente?
mi sa che stai facendo un pò di confusione tra oggetti fisici e oggetti nella programmazione
comunque a titolo di curiosità posso dirti che il firmware di un embedded generalmente è completamente diverso da un programma tradizionale, un programma embedded generalmente non ha una fine è un loop infinito (proprio un
while(1)
{
...
...
...
...
}
che nella programmazione classica è un errore madornale) nel quale si implementa una macchina a stati finiti che include le varie chiamate dovute agli interrupt sw/hw
riguardo al discorso c c++ proprio parlando banalmente c++ è un soprainsieme del c, con il c++ puoi fare tutte le cose che fai con il c senza il minimo problema (e adattando pochissimo il codice) ma se non ti serve usare l'OO c++ e c sono praticamente la stessa cosa, e anche come discorso di efficienza poco cambia, dipende alla fine tutto dal compilatore a disposizione (ovvero se per quella mcu hai il compilatore c usi c ) se vuoi migliorare ancora l'efficienza si usa direttamente asm ma deve essere un progetto per cui l'incremento (minimo) di efficienza rispetto ad ottimi compilatori commerciali (come quello di IAR) e di determinismo temporale (importantissimo per applicazioni RT)che si ottiene ha un valore che compensa l'enorme perdita di tempo necessaria per lo sviluppo a basso livello di un codice efficiente
ribadisco: non c'è un linguaggio migliore di un altro, ci sono linguaggi che sono più adatti/utilizzabili per ottenere determinati risultati con un certo sforzo
altro esempio c++ è più efficiente di java essendo uno compilato mentre l'altro interpretato ma se devi fare un programma non computazionalmente esoso ne con stringenti requisiti di performance che deve girare ad esempio su win linux e osx usare java ti permette di ottenere il risultato con uno sforzo nettamente più leggero visto che sviluppi e testi un programma e non tre :D :D
C++ sarà pure più efficiente di Java (cosa non sempre vera), ma sicuramente non è affatto efficiente per il programmatore.
C++ non si limita solo ad introdurre l'object oriented al C, ma ad introdurre anche altri concetti (stream, template), il che non è in senso assoluto un male, ma è la sintassi con cui lo fa che IMHO è molto discutibile.
Java nasce per l'object oriented, in tal senso è più puro di altri linguaggi (compreso l'eccellente C#), oltre ad avere una sintassi enormemente migliore di C++.
@vendetta: dietro il concetto di classe e di oggetto c'è un fondamento matematico, fondamentalmente hai un insieme di cose a cui puoi applicare un insieme più o meno ristretto di operazioni.
In tutti i casi in cui hai bisogno di restringere l'utilizzo di una risorsa o applicarvi determinate operazioni prefissate ti può essere comoda una classe, anche se singleton.
Comunque faccio presente che è possibile programmare secondo il paradigma ad oggetti anche in puro C. Chiaramente i risultati sono migliori con linguaggi che forniscono nativamente i costrutti per creare classi ed oggetti.
vendettaaaaa
20-01-2012, 15:32
Hmm devo studiare ancora un bel po'...
Cmq con oggetto intendo, beh, la definizione: entità che ha degli attributi e può svolgere delle funzioni. Non conosco bene le struct del C, le ho solo viste accennate in giro, ma credo che sia una struct con in più delle funzioni che sono ciò che lo rende unico; forse è molto più di questo.
La sintassi non è in effetti facile, ho ancora molta confusione in testa. Ho da poco scoperto che alcuni simboli, per stabilirne la priorità vengono letti da sx a dx in compilazione mentre altri da dx a sx...
Hmm devo studiare ancora un bel po'...
Cmq con oggetto intendo, beh, la definizione: entità che ha degli attributi e può svolgere delle funzioni. Non conosco bene le struct del C, le ho solo viste accennate in giro, ma credo che sia una struct con in più delle funzioni che sono ciò che lo rende unico; forse è molto più di questo.
La sintassi non è in effetti facile, ho ancora molta confusione in testa. Ho da poco scoperto che alcuni simboli, per stabilirne la priorità vengono letti da sx a dx in compilazione mentre altri da dx a sx...
aspetta di vedere ereditarietà multipla e polimorfismo li si che saranno mal di testa
a parte la sintassi e la banalità del fatto che una classe è una struttura con delle funzioni al suo interno c'è parecchio altro
una struttura serve per racchiudere un insieme di variabili eterogenee in un insieme logico una classe è di più: in una classe le variabili non devono essere mai accessibili direttamente (information hiding): le variabili saranno private e accessibili solo dai metodi della classe e tra i metodi ci saranno i metodi set e get per leggere/ scrivere le variabili è uno dei pilastri dell'OO
ma ci arriverai con il tempo prima ti consiglio di impratichirti bene sulle basi della programmazione procedurale in particolare sulla gestione della memoria dinamica che sono fondamentali quando passarai all'OO tra costruttori e distruttori vari
@warduck a me la sintassi java non piace, troppo prolissa una scorciatoia per il tunnel carpale :D a parte le battute trovo la sintassi del C++ più compatta (e stranamente più leggibile) ed elegante di quella di java ma sono fisime personali ma ti quoto in tutto sulla sintassi di stl che è un casino improponibile e non mi piace neanche quella della comunissima printf :D
vendettaaaaa
20-01-2012, 16:15
aspetta di vedere ereditarietà multipla e polimorfismo li si che saranno mal di testa
Posso immaginare, ho dato uno sguardo agli header delle librerie matematiche fatte da quel mio prof...da panico, non perchè sia scritto disordinato, piuttosto per la quantità di keyword e simboli che ancora non conosco.
Praticamente ha creato una classe per definire vettori, una per matrici, vettori di int, vettori di vettori, sistemi lineari, fattorizzati e non...sistemi di equazioni differenziali di tutti i gusti...
Cmq sì, ora come ora sto "procedurando" :asd:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.