Commenti & Opinioni |
Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register
No, non sto' parlando della mia moto, ne' di ... avete capito... Sto' parlando di programmazione object-oriented. Quella cosa che una decina di anni fa' pareva fosse l'ultimissima moda e venuta direttamente dalle mani del Buddha per salvare l'umanita' e che poi ha perso parecchio del suo carisma.
Il motivo dell'odierno pistolotto e' che nel corso della settimana vi sono state discussioni varie in ufficio al riguardo e quindi ho pensato bene di mettere per iscritto le mie opinioni al riguardo in modo che la prossima volta potro' limitarmi a puntare tutti verso questo documento e risparmiarmi la fatica.
Alura, "Object Oriented" si riferisce alla tecnica (alcuni parlano di "paradigmi") usata per creare "oggetti", che altro non sono che blocchi di codice che sono poi usati all'interno del programma. Niente di anormale. L'idea di mettere parti di codice che sono usate e riusate in 'funzioni' o 'subroutine' e' arcinota ed e' usata fin dai tempi del Basic (allora si usavano Gosub e Goto).
Ma mentre in un programma "normale" le funzioni e subroutine ed i dati che tali funzioni e subroutine manipolano sono altrettanto visibili e manipolabili, la OOP fa' un passo in piu' e trasforma le subroutines ed i loro dati associati in delle "scatole nere" impenetrabili. Tutto quello che sappiano di tali 'scatole' e' che hanno delle interfaccie (quali pulsanti e leve possiamo operare) che ci permettono di controllarle, ficcare dentro i nostri dati ed ottenerne i risultati.
Questo consente una certa indipendenza dal come un certo oggetto e' costruito. Fintanto che l'oggetto presenta la stessa 'interfaccia', non ci interessa che cosa fa' "dentro" ne' come lo fa'. L'unica cosa che ci interessa sapere e' come usarlo. Cambiare l'implementazione di un oggetto non rischia di crashare l'intero programma finche' il nuovo oggetto presenta la stessa interfaccia al resto del programma.
Ora, la discussione scatenata in ufficio e' se la OOP sia una cosa positiva, negativa o neutrale. Cioe' se sia una buona cosa usarla o se sia semplicemente una complicazione inutile o che non faccia alcuna differenza.
La mia opinione sull'argomento e' dipende.
Da mio punto di vista (punto di vista maturato in 25 anni di sviluppo software dall'amatoriale al professionale con gruppi di sviluppo che andavano da "io" a 25+ programmatori divisi in 3 palazzi), il principale vantaggio che ha la OOP rispetto ad altre tecniche e' l'isolamento che offre tra i vari "pezzi" del programma che si sta' scrivendo e la capacita' di prendere uno di questi pezzi e riutilizzarlo da qualche altra parte senza preoccuparsi troppo di come fa' le cose ma solo di cosa fa'.
Del codice robusto si puo' scrivere solo se si hanno le idee ben chiare su cosa fa' ogni singola parte di codice e come lo fa'. Il che e' molto facile (o comunque possibile) se chi sviluppa software e' una sola persona (perche' allora e' tutto nella sua testa) o se sono un numero limitato e si appoggiano su una documentazione e specifiche di progetto che sono ben definite e note a tutti. Quindi codice anche vasto, ma ben noto e senza "conigli" che saltano fuori dal cappello ad ogni momento.
Il problema e' quando il progetto comincia ad essere distribuito su piu' persone che non "collaborano" perche' stanno facendo altro o non sono sempre presenti nello stesso posto. E soprattutto quando chi dovrebbe coordinarne l'attivita' (il "project manager" di turno) non ha la piu' pallida idea di come sviluppare software o di cosa voglia dire 'coordinare'. In questo caso la OOP puo' aiutare, ma non e' detto che sia risolutiva.
Il vantaggio della OOP e' che ogni oggetto e' (come detto prima) una scatola nera, quindi molto meno suscettibile a cambiamenti nel 'resto' del programma. Un programmatore puo' a questo punto concentrarsi nello sviluppo di un singolo componente che faccia un certo lavoro, ed un altro programmatore (magari in un palazzo diverso) potra' prendere quel componente ed usarlo direttamente senza doversi preoccupare di come fa' il suo lavoro "sotto al coperchio". Ed i componenti di entrambi potranno interagire con altri pezzi nello stesso modo, riducendo la necessita' di lunghe e barbose riunioni per definire come perche' viene fatto qualche cosa. Questo se l'interfaccia di ogni oggetto e' ben specificata. Ma quel "se" e' un "se" bello grosso.
In un progetto in cui mi capito' di lavorare, il manglement si era buttato sulla OOP come un lupo famelico su un agnello bello grasso, ma nella loro foga oggettivistica si erano dimenticati di una cosa: le specifiche devono esserci lo stesso. Il risultato e' stato un ovvio disastro in cui una caterva di oggetti venivano sviluppati da tutti ma nessuno di questi riusciva ad interfacciarsi con nessun altro perche' nessuno aveva la piu' pallida idea di come fare.
Quindi, OOP bene o male? La risposta e' (come sempre) dipende....
Dipende dalla dimensione del progetto e dalla qualita' e dal numero dei programmatori che vi sono addetti, dipende dalla qualita' e capacita' del Project Manager in carico, dipende dalla qualita' delle specifiche, dipende da quanto di quel progetto sia in programma per "riciclo" in altri progetti ed ovviamente dipende dall'ambiente prescelto per lo sviluppo (sviluppare in non-OOP in Java e' un po' dura eh).
Certo, mettersi a scrivere un software usando OOP puo' richiedere molto piu' tempo che scrivere lo stesso programma senza OOP. E spesso e' cosi'. Ed infatti la mia opinione e' che la OOP e' piu' adatta a progetti da una certa dimensione in su'. Se devo scrivere un programmino per analizzare dei file di log, vado di bash o perl, di certo non mi metto a scrivere una applicazione in Java o in C++ per fare la stessa cosa, se devo sviluppare un filtro milter invece, molto probabilmente usero' il C. Ma se il progetto richiede diverse settimane (e non e' una roba da fare nel week-end), e ci sono ottime probabilita' che una cosa simile sia da rifare per qualcun altro, allora posso cominciare a tenere in considerazione C++ ed eventualmente Java.
E chi dice che OOP e' auto-documentante dovrebbe bere un po' di vernice e ritirarsi dalla vita! La documentazione del codice e del progetto e' sempre un punto essenziale, documentazione insufficiente o totalmente mancante e' uno dei casi principali di fallimento di un progetto. Insieme a Project Manager che non sanno cosa ca$$o stanno facendo o perche', ma sto' divagando. Quando un programmatore se ne va' o viene sostituito bisogna potergli dare della documentazione da studiare per permettergli di capire che accidenti sta' succedendo e come, leggere il codice aiuta, ma non e' la soluzione migliore.
Davide Bianchi
08/12/2009 15:04
I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.
come tutte le cose... Di Lisa postato il 06/12/2009 12:42
Condivido tutto! Di Luca Menegotto postato il 06/12/2009 18:42
Non č che gli oggetti fanno il lavoro al tuo posto ... Di Anonymous coward postato il 06/12/2009 19:05
OOP e librerie Di Mattia postato il 07/12/2009 09:26
@ Mattia Di Davide Bianchi postato il 07/12/2009 09:29
@ Davide Bianchi Di sky postato il 07/12/2009 11:29
@ sky Di Dr_Halo postato il 07/12/2009 12:37
Condivido appieno... Di Eremita Solitario postato il 07/12/2009 11:17
Mitico! Di ataru1976 postato il 07/12/2009 16:04
@ ataru1976 Di maxxfi postato il 08/12/2009 15:33
Utopia Di Cymon postato il 08/12/2009 12:26
@ Cymon Di Riccardo Cagnasso postato il 08/12/2009 15:14
OOP for dummies Di DrSlump postato il 08/12/2009 15:56
vecchio problema Di Max postato il 09/12/2009 00:14
come tutto del resto Di Guido postato il 09/12/2009 08:12
Perche' i PM non sanno mai un ca$$o del progetto... Di ringo postato il 09/12/2009 09:54
@ ringo Di Davide Bianchi postato il 09/12/2009 11:29
@ Davide Bianchi Di ringo postato il 10/12/2009 09:32
@ ringo Di Davide Bianchi postato il 10/12/2009 09:58
Condivido, ma parzialmente Di lucaster postato il 14/12/2009 11:28
Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.
Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.
Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".