|
Poichè parlando di programmazione orientata agli oggetti a colpi di mezze risposte a messaggio iniziati su altri argomenti non si può alla fine che rendere un pessimo servizio all'OO ho iniziato a scrivere un testo introduttivo sull'argomento, da infilare nella sezione tutorial.
Non posso garantire che riuscirò a completarlo. Non è la prima volta che inizio a farlo, il problema è che di solito dopo pagina 15 m'incazzo e parto con delle filippiche - di solito indirettamente rivolte ai figuri citati da cionci o alla gang of four, per ragioni diverse ma con pari acrimonia - che certamente non agevolano la comprensione del tema, cioè l'orientamento agli oggetti e non le nefandezze perpetrate in suo nome.
E' anche una questione delicata perchè comunemente la sovraesposizione ad alcuni concetti genera un atteggiamento positivo nei loro confronti.
Così, ad esempio, quando ho scritto che le interfacce non c'entrano nulla con la programmazione orientata agli oggetti, è più che probabile che deadlyomen17 si sia educatamente trattenuto dal rispondere "ma che cacchio dici".
Il fatto è che bisogna scremare un calderone immenso in cui ciascuno ha pensato bene di buttar dentro un po' quello che gli pareva, specialmente chi ha goduto, meritatamente o no, di una certa autorevolezza.
E lo dico avendo presenti i dubbi amletici che ognuno di noi penso abbia riguardo ad alcune questioni.
A quanti di noi è capitato di pensare, guardando un programma OO, che ci sono parti di quel programma che sembrano strutturalmente uguali a quelle che scriveremmo in C? E' strano? Sì. C'è qualcosa che non va? No. C'è un limite "genetico" della programmazione orientata agli oggetti che gli deriva dall'essere applicazione di una prospettiva. E c'è tutto un discorso da fare.
Possiamo davvero darla a bere a qualcuno dicendo che un tipo di programmazione in cui devo usare classi, interfacce, classi astratte, metodi, invocazioni, iniezioni di dipendenza, istanze, pattern e statico e non statico e chi più ne ha più ne metta sia "più facile" di una in cui devo usare variabili, valori e operatori? Non c'è qualcosa che non va? Eccome se c'è. E c'è tutto un discorso da fare.
E ci sono poi le questioni che hanno a che fare con l'orientamento agli oggetti non perchè siano tipiche dell'orientamento agli oggetti ma perchè sono termini generali della programmazione e non vengono abbandonate, perchè sempre programmazione è, ma assorbite e spiegate in termini diversi. Parlo ad esempio del polimorfismo. Questo qui:
int x = 10;
double y = x;
è polimorfismo e il polimorfismo non sta nella programmazione orientata agli oggetti, sta nella teoria dei tipi.
Parliamo di ereditarietà? Apriamo le cataratte? Scopriamo il vaso di pandora, correndo il rischio che saltino fuori degli spilungoni bluastri armati di arco e frecce? Forse non tutti sono abbastanza vetusti per ricordarlo ma se guardate ai programmi OO di una quindicina d'anni fa sembra di vedere la collezione botanica di un seguace di Linneo. Gattus-Domesticus che discende dal Pardus-Pardus che deriva dal Quadupedis-Pelosus e kilometri e kilometri di genealogia. Poi a un certo punto, PAF, saltano fuori e ti dicono: hai derivato per vent'anni? Sei un babbeo, dovevi comporre. E via con la rumba della composizione (che balliamo ancora adesso). Dobbiamo aspettarci che tra cinque anni ci dicano che avendo composto ci siamo infilati nella mota più infima? Be', sì, già adesso c'è qualcuno che mugugna sui dependency injection framework. Quanto è strano se dico che ereditarietà e composizione sono la stessa cosa? E c'è... tutto un discorso da fare.
Insomma, bisogna chiarire tante cose, bisogna rispondere a tante domande, e non è una cosa breve, almeno se vogliamo farlo nell'unico modo ragionevole, ovvero offrendo il fianco alle critiche.
Vediamo cosa salta fuori.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
|