Newsgroup: it.comp.lang.c
Titolo: OOP in C, video

Salve NG,
 
dopo aver capito che non avrei mai avuto tempo di scrivere qualcosa di decente sull'argomento, mi sono quantomeno preso un po' di tempo per fare un video sull'argomento in oggetto, sperando che possa essere utile a qualcuno.
 
Sono tre video della lunghezza totale di ~60 minuti (~20min*3, più un quarto di 2 minuti) dove cerco di illustrare quello che faccio io normalmente quando parlo di "programmazione ad oggetti in C".
 
Il link è questo:
http://www.youtube.com/watch?v=1CgnXggUp18&list=PLvbR7GkHxic993E-30c6TDTpUz-FKrM-U&feature=plcp
 
 
Fatemi sapere cosa ne pensate!
Ciao!

 Fatemi sapere cosa ne pensate!
 
Pensavo che i C ad oggetti fossero C++ e Objective-C


La programmazione orientata agli oggetti è un "paradigma di programmazione", C/C++/Obj-C sono "linguaggi di programmazione".
I secondi due sono definiti "ad oggetti" perché forniscono strumenti che facilitano (o forzano) il seguire il paradigma ad oggetti.
Questo non significa che non si può programmare in C seguendo il paradigma ad oggetti, e non significa che il compilatore C++ si rifiuti di compilare un codice senza neppure una classe ;-)
Ciao!

 senza neppure una classe ;-)
 
 
e come si fa a programmare a oggetti in C? C'è qualche
tutorial o materiale interessante (a parte i tuoi video
che andrò a vedere)?
 


Sì, ce ne sono vari, se cerchi ne trovi a palate, ma.. c'è un ma, quello che mi ha spinto a fare i video.
La maggior parte della roba che troverai parla di aggiungere al C strumenti del C++, come vtables, eccezioni, templates e altra roba, praticamente riscrivendosi un pezzo di quello che fa il compilatore C++. Manco a dirlo per me è una cosa completamente insensata (a questo punto usi il C++ e basta). E a quel punto nemmeno conviene leggersi questa roba, visto che leggere come funziona un compilatore C++ da molti più spunti interessanti.
Quello che quasi nessuno invece fa, è analizzare cosa significa "programmare ad oggetti" ed utilizzare varie convenzioni per programmare in C come al solito, ma mantenendo una mentalità OO. Questo è quello di cui parlo io ed è molto più raro da trovare (penso perché è troppo pratico e troppo poco "figo"). Di questa serie ho trovato anch'io veramente poco, giusto qualche cosa qua e là e mai con qualche esempio pratico.
Quindi direi che dipende dal livello di programmazione nei vari linguaggi: la prima via è quella da seguire per imparare come funzionano i linguaggi OO e farsi un po' di virtuosismi stilistici, la seconda prende per sicuro il fatto che si conoscano tutti i meccanismi interni e si lavori come al solito (ma IMHO) in maniera più efficiente solo grazie ad un diverso punto di vista.
Ciao!

 neppure una classe ;-) Ciao!
 
Non capisco dove vuoi andare col tuo discorso.
Potresti non riuscire a compilare un programma C con un compilatore C++
questo lo sai? E anche se rilassi alcuni controlli trascini tutta la
sovrastruttura del C++ ricavandone vantaggi (Linux è scritto in C e 
compilato in C++) e subendone tutta la sua pesantezza.
Viceversa per _seguire_ il paradigma ad oggetti con il C devi o fornire un
preprocessore o fare tu stesso il preprocessore usando una certa /forma/ 
/mentis/ ed usando le tecniche che tu spieghi nei tuoi video. 
 
Ciò non toglie che l'approccio dei tuoi video è interessante e che da
quanto ho visto è fatto bene. Si spiegano molti concetti di buona 
programmazione e si applicano. Non fai altro che seguire un metodo 
e dei testi che ormai hanno una quindicina di anni. O anche più, tenendo
conto che il paradigma di programmazione ad oggetti è stato sviluppato 
per applicare i concetti di buona programmazione antecedenti allo C++ ed 
allo SmallTalk. 
 
Ciò che critico è perché inventare la ruota? Perché violentare un linguaggio
applicando un paradigma di programmazione che non ha? Perché far
assomigliare una cosa ad un'altra? Non basta fare vedere che la buona 
programmazione e i buon principi che stanno dietro il C++ si possono 
ottenere anche col C? In fondo credo che questa ultima sia la vera
questione.
 
 
 

 questione.
 
Completamente d'accordo, è quello che credo anch'io, ed quello che cerco di far vedere.
Sul perché non usare direttamente un linguaggio ad oggetti la risposta è facile: perché a volte non si può (programmazione kernel e/o in kernel-space, su micro piccoli, o solo perché si vuole fare refactoring di un codice esistente senza riscrivere troppo).
Perché parlo di paradigma ad oggetti: beh, perché esiste ad esempio la "buona programmazione funzionale", che non ha nulla a che vedere con gli oggetti o con qualcosa che possa essere realizzato in maniera pulita in C (almeno, secondo il mio standard di pulizia). Allo stesso modo ho visto, anche se molto raramente, ottimi codici C che non avevano nulla a che fare con gli oggetti, anche se probabilmente il termine "buona programmazione imperativa" suona strano :)
Non ricordo chi lo disse, ma è famosa la frase provocatoria: "un bravo programmatore sa scrivere in fortran con qualsiasi linguaggio!" :D
 
Quindi sì, quello che cito è *un* modo di fare le cose che ha quel nome lì. Per i complimenti grazie mille, per il fatto che sia roba arcinota ovvio, ma se lo fosse ancora di più sarebbe tutto di guadagnato! ;)
 
Ciao!

 
 
Quali librerìe mi consigli di utilizzare per scrivere dei programmi C
dotati di interfàccia grafica?
 
Ciao
 
 
 
 

 
 
Che abbiano anche, sé possibile, un Ide.
 
Ciao
 
 
 

 
 
Intanto rispondo io, comunque fossi in te aprirei un altro thread..
Come prima cosa scrivere una GUI in C non è così agevole come farlo in altri
linguaggi (diciamo che non è proprio il suo campo applicativo preferenziale),
quindi se puoi scrivile in un linguaggio a più alto livello.
La logica applicativa la puoi tenere sempre in C, come in una libreria (o, se
sei su un sistema *nix, in programmi CLI, che ti lascia la possibilità di
richiamare le varie funzionalità anche via script), e l'interfaccia la puoi
mantenere il più stupida possibile (praticamente tutti i linguaggi ad alto
livello hanno un'interfaccia verso il C più che decente).
Da qui in poi, dipende da cosa devi ottenere, quali sono i tuoi vincoli,
quali funzionalità devi fornire, etc. Non esiste una risposta generale.
Se proprio vuoi fare tutto in C perché... boh, non hai problemi di voglia e
tempo, puoi usare ad esempio le GTK, hanno i bindings in C, sono abbastanza
portabili e hanno qualche applicativo per il disegno WYSIWYG delle dialog.
Ciao!

 
grazič per le info.
 
Ciao