PDA

View Full Version : Stile di OOP


soulnafein
17-09-2002, 23:32
Mmmmmm posso proporre una cosa?
Posso dire di aver imparato il C++ (sintassi robba simile, diciamo che sono arrivato nello studio del libro di Shildt al STL ma non le ho ancora cominciate).
Il problema maggiore che ho non sta tanto nei comandi del C++ bensý nello stile di programmazione da usare, ad esempio non so quali classi conviene creare, il metodo migliore di dividerle in file diversi, una questione di stile insomma. Non si potrebbe fare un piccolo tutorial in proposito? Nuitari Ŕ il mago della buona programmazione e penso che sia anche diposto a farlo.
Grazie ciauz

DM Ilweran
18-09-2002, 02:07
Ciao, spero di andare bene lo stesso anche se non sono Nuiz :)
Innanzitutto il tuo Ŕ puramente un problema di esperienza: cpp Ŕ un linguaggio multiparadigma quindi Ŕ perfettamente normale non avere le idee chiarissime all'inizio...
AFAIK il testo che hai scelto non Ŕ dei migliori: purtroppo Schildt Ŕ considerato un fesso e, anche se ho letto poco (appunto per la fama che si Ŕ fatto in giro) ho potuto apprezzare alcune chicche molto divertenti. Solitamente la prima cosa contestata a Schildt Ŕ che non utilizza appieno l'OOP (anzi...). Quindi una delle prime cose sarebbe procurarsi (in biblioteca ad es. dato che vai all'universitÓ) il libro di Stoustroup che Ŕ certamente impegnativo ma almeno hai la certezza di imparare i concetti in modo chiaro e giusto.
Per quanto riguarda l'OOP, anche se non programmo in C++ ma in ooc, ti consiglio di fare una piccola parentesi di Java che ha il grande pregio di obbligare all'OOP e di essere molto piu semplice del C++. Lasciando stare le librerie e tutto il resto una leggera e veloce infarinatura certamente ti aiuterÓ a migliorare lo stile.
Per quanto riguarda il tutorial io non sono d'accordo... ci siamo buttati sulla programmazione strutturata e direi di non fare casino (ne di rallentare dato che siamo giÓ sufficientemente lenti... mea culpa lo so...).
Ciao :)

Nuitari
18-09-2002, 04:27
Fermo restando che il consiglio di Ilwe Ŕ ottimo (cambia libro), posso darti qualche hint.

Nel progettare un applicazione basata su classi, devi pensare in modo diverso rispetto al normale approccio alla programmazione.
Devi guardare l'applicazione da un punto di vista innanzitutto funzionale, da questo poi devi passare a quello strutturale.

Faccio un esempio riferendomi a Quetzal:
io desideravo realizzare un server che mi permettesse di fare cose tipo:

1) gestire + server con la stessa applicazione o con istanze diverse di quest'ultima
2) dare la possibilitÓ ad ogni server d'avere la propria mappa
3) dare la possibilitÓ ad ogni server d'avere il proprio stack per il network o dare la possibilitÓ a + server di condividere lo stesso stack per un ottimizzazione delle risorse

etc

Pensando il programma in questo modo, si pu˛ giÓ stilare una prima mappa macroscopica delle classi:
Ci sarÓ sicuramente una classe "Application" che gestirÓ tutti i dati relativi all'applicazione, fra cui l'interfaccia (che sarÓ incapsulata in una classe "Gui"), quindi ci sarÓ una classe Server all'interno della quale ci sarÓ come minimo un oggetto di tipo "Worldmap", dato che ogni server deve avere la propria mappa.
Dato che il network pu˛ essere condiviso, all'interno della classe server ci sarÓ un puntatore all'istanza della classe "Network" appropriata.
A sua volta il Network avrÓ come minimo un entitÓ "Listener" e + entitÓ "Client", ognuna delle quali saranno istanze di classi derivate da un'altra classe "Socket", e via dicendo.

Insomma, cerca di suddividere l'applicazione in modo logico, ma senza esagerare.
Ci sono programmatori che fanno un milione e mezzo di classi solo per far apparire l'applicazione stilisticamente perfetta, con 300 classi incapsulate e derivate e bla bla bla.
Onestamente io disapprovo questo tipo di scelte, sono inutilmente macchinose e producono codice + pesante da compilare e quindi + difficilmente ottimizzabile.
Ad esempio per il Network di Quetzal ho creato solo 2 classi (cNetwork e cSocket) per le funzioni base, 1 classe per la gestione delle code ed 1 lista per le informazioni relative ai client: una ridicolaggine paragonata all'effettiva complessitÓ del sistema. Volendo avrei potuto fare una classe per i thread, una per il pool di thread, una per i buffer, etc etc. ma sarebbe stato un inutile spreco di tempo.

Spero d'esserti stato d'aiuto :)

soulnafein
18-09-2002, 15:16
Grazie!!!