Pages: 1 [2] 3   Go Down
Author Topic: chi sa spiegarmi a cosa servono le classi  (Read 2643 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10466
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ps. anche in java si può fare i++ :-)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Mestre(VE)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sicuramente l'università italiana ha molti difetti ma mi insegnano java e le struct non ci sono in java perchè appunto utilizza gli oggetti  smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10466
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io ho fatto due anni al polimi e devo dire che dei professori che avevo erano veramente strabravi. Però insegnare il java senza sapere una virgola in C.. è un pò come programmare un micro senza sapere una virgola di architettura dei sistemi. Si può fare, però niente interrupt, registri, insomma si vive lo stesso, ma non si ha una visione completa nel momento in cui ti trovi davanti un problema o un'implementazione particolare.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Mogliano Veneto (TV)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 62
Arduino rocks!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

All'uni a PD io son partito col c++ , ora dovrei fare l'esame per il c++ a oggetti e successivamente il java.

Mi devo mettere a studiare  smiley-twist
Logged

Mestre(VE)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@forno
anche io sono all'unipd, faccio ingegneria, te cosa cosa studi?
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 52
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ragazzi grazie a tutti delle risposte,siete stati molto chiari purtroppo per uno come me che parte da 0 le domande sono molte e
molti libri sono troppo tecnici .sono sempre piu' convinto che se ci fossero dei  Workshop con professori che come voi che avete dato risposte con esempi semplici e quasi banali come foste a spiegare il concetto a vostro nonno be' io credo che sbocerebbero dei bei progetti magari da persone che non avrebbero mai pensato di far parte in questo meraviglioso mondo
Logged

Naples (IT)
Offline Offline
God Member
*****
Karma: 6
Posts: 714
Andrea E.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho letto tutto il topic però vi ricordo che arduino non supporta a pieno c++... meglio programmarlo in c secondo me: ha più senso.
Logged

Arduino, MODs e DIY: blackstufflabs.com

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10466
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dipende da cosa devi fare. fondamentalmente quello che non funziona è l'operatore "new", ovvero non puoi allocare nuovi oggetti "al volo"e fare attenzione alla loro visibilità quando li passi per puntatore.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Naples (IT)
Offline Offline
God Member
*****
Karma: 6
Posts: 714
Andrea E.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

dipende da cosa devi fare. fondamentalmente quello che non funziona è l'operatore "new", ovvero non puoi allocare nuovi oggetti "al volo"e fare attenzione alla loro visibilità quando li passi per puntatore.

appunto... se non puoi istanziare al volo degli oggetti, secondo me, non ha senso usare il c++.

meglio le solice calloc/malloc di struct. almeno sei coerente...
Logged

Arduino, MODs e DIY: blackstufflabs.com

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22658
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Effettivamente spremersi per andar solo di C++ mi pare tanta roba... stiamo parlando di un micro ad 8 bit, alla fine. Col solo C fai tutto e di più. E mi pare che l'Atmega sia ottimizzato proprio per il C. So che la "nuova generazione" senza classi non fa neanche un "Hello World" però non esageriamo: ho visto degli sketch che, conoscendo solo un poco di C, manco riuscivo a capire da dove iniziavano  smiley-lol
Logged


0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10466
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non a caso tutte (o quasi) le librerie ufficiali sono in realtà classi...
che poi il C sia più veloce è indubbio, ma per quanto riguarda la riusabilità del codice...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22658
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cerchiamo l'ottimizzazione del codice o delle prestazioni? Ossia, preferite un uovo oggi o una gallina domani?  smiley-wink
Dipende sempre dal proprio obiettivo. Io preferisco codice semplice ma più funzionale.
Logged


0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
non a caso tutte (o quasi) le librerie ufficiali sono in realtà classi...
che poi il C sia più veloce è indubbio, ma per quanto riguarda la riusabilità del codice...

Si ho letto che il C è più veloce del C++, ma penso che non sia sempre così e tutto dipende dal codice che hai implementato. Cioè io credo che sia riduttivo dire che il C è più veloce, e tutto da vedere come lavora il compilatore con il codice fornitogli.

Il compilatore gcc in fase di compilazione può essere configurato per compilare altre cpu, ad esempio nel codice sorgente di gcc è presente il compilatore avr, arm, mips, ecc. Sul fronte linguaggi troviamo c/c++ objective-C e objective-C++, java, fortran, ada. Una delle particolarità di gcc e che il C++ viene trasformato in codice C (quindi tradotto) ed in effetti il compilatore lavora solo sul codice C.

Poi c'è da vedere quanto resta nell'eseguiile di codice appartenente ad una classe, per es. di 10 metodi di cui 2 utilizzati quanto ne resta nell'eseguibile?. La logica vuole che ciò che non serve venga eliminato in una delle fasi di compilazione, ma sarà così?, e quando accade questo? magari il flag -Os (optimize size) ne è in parte responsabile, oppure il codice non richiamato non viene eliminato.

Tutti i quesiti su gcc trovano risposta all'interno del codice e nella doc. Io poco per volta mi sto documentando ma è un duro lavoro.

Il vantaggio di scrivere codice C da al programmatore esperto la possibilità ottimizare il codice di proprio pugno anziche affidarsi alla traduzione da C++ a C fatta da gcc. Allora un programmatore che non conosce come lavora il compilatore il linker ecc, e i microntrollori, scrivendo codice C potrebbe per assurdo produrre codice più lento che se scritto in C++.

Una verifica del codice prodotto può essere fatta dal programmatore esperto usando gli strumenti forniti dal pacchetto binutils, ma l'inesperto come mè alla visione di codice asm (specifiche unix) non trae sufficienti informazioni per ottimizare il codice.

Quindi in sostanza, provate ad implementare il codice usando le librerie di arduino (che sono per la magior parte scritte usando le classi) e se poi è necessario ottimizzare intervenire a tal fine in base alle proprie conoscenze. Es usate la funzione AttachInterrupt, sostituitela con le macro ISR e verificate se c'è stato un miglioramento che in teoria dovrebbe esserci ma in pratica e tutto da verificare.

Ciao.


 


Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 125
Posts: 9334
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si ho letto che il C è più veloce del C++, ma penso che non sia sempre così e tutto dipende dal codice che hai implementato. Cioè io credo che sia riduttivo dire che il C è più veloce, e tutto da vedere come lavora il compilatore con il codice fornitogli.

Ti parlo da progettista hardware e software professionista con svariati milioni di linee di codice alle spalle di cui la maggior parte per MCU/MICRO dove è un MUST lavorare in C ANSI con, quando serve, l'assembler inline.
Non esiste un confronto tra C e C++ perché il primo batte il secondo alla stragrande sotto il profilo efficienza, prestazione e compattezza dell'eseguibile, del resto il C++ altro non è che un'estensione del C ANSI pensata per rendere la vita più facile quando si realizzano programmi su un PC, o SBC con processori molto potenti, dove si ha a disposizione molta più memoria e molta più potenza di calcolo.
Sopratutto non esiste un problema che si può affrontare col C++ e non si può affrontare con il C ANSI, anzi è vero l'incontrario, per contro utilizzando il C ANSI standard, senza ricorrere ad eventuali librerie aggiuntive, la realizzazione del programma può richiedere più tempo rispetto al C++.
Ovviamente se uno non è capace di scrivere in C può facilmente realizzare programmi che girano peggio, e sono più ingombranti, dello stesso programma realizzato in basic, lo stesso concetto si applica al C++.
Un programma scritto in C ANSI è sempre portabile tra hardware diversi e compilatori diversi, eventualmente c'è solo da modificare le parti software che accedono direttamente all'hardware e/o i nomi simbolici dei registri, ma il problema sussiste anche col C++ dove comunque toccherebbe modificare le classi che accedono all'hardware più tante altre cose che dipendono dallo specifico compilatore utilizzato.
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Non esiste un confronto tra C e C++ perché il primo batte il secondo alla stragrande sotto il profilo efficienza, prestazione e compattezza dell'eseguibile, del resto il C++ altro non è che un'estensione del C ANSI pensata per rendere la vita più facile quando si realizzano programmi su un PC, o SBC con processori molto potenti, dove si ha a disposizione molta più memoria e molta più potenza di calcolo.

Si ti credo, ma credo anche che per gcc le cose sono più complicate di così. In linea di principio la maggior parte di compilatori nati specificamente per una famiglia di MCU compila codice C  e non C++. Questo però non è un buon motivo per dire a priori che il C risulta più veloce ed efficiente del C++ e questo vale principalmente per gcc che traduce codice C++ in C standard e poi dal C all'asm e poi assembla. Tutte queste fasi di compilazione sono personalizzabili tramite una sfilza di flags interminabile. Alcuni di questi vengono abilitati e altri disabilitati modificando il solo flag -O (Optimizer). Arduino usa di base l'ottimizzazione -Os (Optimizer size), ma ci sono altre ottimizzazioni alcune a fronte di codice più grande che girano più velocemente (o almeno dovrebbero).

Poi tutte le fasi di compilazione possono essere portate a termine solo parzialmente. Oppure  Voglio vedere il lavoro svolto dal preprocessore, o il codice asm prodotto basta usare l'opzione -save-temps che non elimina i file temporanei. Quindi mi ritrovo con file *.i (per headers c),  *.ii (per headers c++) e *.S o .s per asm.

Per questo ed altri motivo non ritengo a priori il C più veloce del C++. Ci sarebbe da vedere quanto i flag di ottimizzazione riescono a fare ed il risultato cambia da codice a codice fornito al compilatore.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Pages: 1 [2] 3   Go Up
Jump to: