Discussione: Torvalds e C++
View Single Post
Old 08-09-2007, 15:19   #101
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Dissentire è un sacrosanto diritto. Poi è possibile farlo con o senza argomentazioni. La prima cosa che deve darti uno che discute di orientamento agli oggetti è la definizione di oggetto. Deve perchè ne esiste più d'una. Tentando di aderire ad un'interpretazione umana dei fenomeni ed essendo quest'ultima non precisamente acquisita è giocoforza che ci siano diverse possibilità. Allora, stiamo esaminando l'orientamento agli oggetti. Bene, partiamo dalla definizione di oggetto che per me è: ...

Senza una definizione di oggetto si critica il vento, l'acqua e l'aria, soprattutto quest'ultima nella sua versione fritta.

La superiorità putativa dell'orientamento agli oggetti rispetto ad altre prospettive sta nel suo perchè. L'orientamento agli oggetti è il tentativo di far eseguire ad un calcolatore la rappresentazione umana della soluzione ad un problema. Compito di enorme difficoltà perchè qui andiamo a seminare un orto, quello della cognizione umana dei fenomeni, che è pieno di buche. Che sia questo il suo perchè è un fatto storico, desumibile dagli scritti di Alan Kay, Nygaard e Dahal: cioè coloro che hanno fondato l'orientamento agli oggetti.

E' putativa perchè un conto è dire un altro è fare. Prendi il caso delle gerarchie di classi (la tassonomia del traballante Core Philosophical Differencies). Perchè la maggior parte dei linguaggi orientati agli oggetti ha le classi e ha l'ereditarietà? C'è una ragione specifica. Altro fatto storico. Negli anni '60, quando nasce l'OO, la teoria dei concetti dominante era la c.d. teoria classica, secondo cui un certo ente risultava essere di un tal tipo in base alla presenza nell'entita dell'insieme di caratteristiche definite nel tipo. Tipi diversi possono essere in relazione di genere a specie, dove la specie è tale se, oltre al possesso di tutte le caratteristiche del genere, ne definisce altre.

Dopo tanto ragionare si giunse a scartare (anni '80, l'era della fuzzy-logic) la teoria classica per l'impossibilità logica di definire quali caratteristiche fossero essenziali alla definizione di un tipo (un qualsiasi breviario di psicologia cognitiva te lo dirà, io posso segnalarti la voce "concetto" in Dizionario di psicologia cognitiva di Eysenc).

Ora, se guardi i linguaggi OO di oggi (scala, ruby, chapel, fortress eccetera), noterai la tendenza a sostituire il rapporto di genere a specie - specie ad esemplare, cementato nelle classi con il concetto più dinamico di "trait", che è, in sintesi, un insieme di caratteristiche non necessariamente possedute. E' verificabile, questa faccenda del trait.

Sono problemi come questo delle classi a farmi dire che la superiorità è putativa. Perchè se è logicamente più economico che un uomo descriva un fenomeno nei termini della prospettiva che gli è propria (per la mera considerazione che la trasformazione di prospettiva è un passaggio in più), questa superiorità è vanificata nell'istante in cui, per un'errata interpretazione della congnizione umana dei fenomeni, io mi trovi comunque a dover esprimere la mia visione delle cose in termini che non corrispondano a questa prospettiva naturale.

Io non voglio infierire sui testi che hai citato perchè ho un grande rispetto del pensiero altrui. Lascia tuttavia che proponga questa frase:

"Mother nature has decided to split the human brain into two halves. One half focuses on logic and the other half on emotions."

Queste non sono argomentazioni che fanno bene all'orientamento agli oggetti o alla critica all'orientamento agli oggetti.

Un ottimo e divertente libro di Jhon Hunt (POET), che io consiglio sempre, ci rivela effettivamente l'esistenza di una dualità della mente. A dire il vero è una molteplicità più che una dualità. Altrettanto ottimo, ma meno divertente, è un libro sul ragionamento, di cui ora non ricordo l'autore ma si intitola Il Ragionamento, edito da CEDAM, Padova, il quale ci dice che la logica è quanto di più estraneo possa proporsi per trattare della mente umana. Detta in tre parole, la logica è deduzione (il trarre conclusioni vere) mentre il cervello umano è una macchina induttiva (trae indifferentemente conclusioni vere, false, possibili o impossibili).

In vero, una dualità che a noi interessa per l'analisi dell'orientamento agli oggetti esiste ed è anche piuttosto interessante perchè, applicata, spiega alcuni imbarazzi. La dualità a cui mi riferisco è tra l'acquisizione cosciente della cognizione e la cognizione così acquisita.

Senza star qui ad annoiarvi oltre misura mi limito a dire che l'acquisizione cosciente, volontaria, di conoscenza è un meccanismo procedurale, nel senso che consta di una serie ordinata di attività (mentali). La cognizione in sè, intesa come consapevolezza del significato dei fenomeni, è invece dichiarativa.

Una conseguenza diretta di ciò, utile agli analisti, è che se in un codice sorgente apparentemente costituito di concetti elegantemente espressi nella più piena immediatezza vi trovate tra i piedi qualcosa che puzza di procedurale potete legittimamente desumere che quel pezzo di codice sia il frutto di un ragionamento in atto al momento della stesura del codice. Cioè chi ha scritto il codice ha rappresentato non qualcosa che sapeva ma qualcosa di cui stava acquisendo coscienza.

Quanti abbiano avuto il dispiacere di leggere "Refactoring" di Fowler scoprono qui, adesso (ammesso che non lo sapessero già) una ragione per cui esso può rendersi necessario. Se posso scrivere codice che rappresenta il ragionamento in atto, una volta che tale ragionamento si sia concluso posso anche tradurre quel procedimento nella sua forma dichiarativa. Cioè io scrivo codice procedurale perchè parlo di una cosa di cui non ho piena consapevolezza: sto formando quella consapevolezza mentre scrivo.

Parlo, ovviamente, della presenza di intermezzi procedurali in programmi altrimenti orientati agli oggetti. Un programma volutamente procedurale è la rappresentazione procedurale di un fenomeno che può essere o non essere procedurale.

E non posso lasciarlo così com'è, ci si chiederà. No. L'indagine consapevole sul perchè delle cose che ci porta ad acquisire conoscenza, il ragionamento, è un'attività estremamente dispendiosa. Tanto dispendiosa che, pare, il cervello, potendo, la eviti. Nella descrizione di un fenomeno la quantità di conoscenza pregressa o dedotta, il numero di cose che sono perchè sì e basta, dovrebbe essere più elevata della quantità di conoscenza che è il frutto di un'acquisizione consapevole e contestuale, cioè formata razionalmente nel momento in cui si esprime il fenomeno. Vale a dire che un programma è per lo più espresso attraverso la dichiarazione di entità, caratteristiche e relazioni, tutta materia "statica".

Comunque, e per nascondere il fatto che praticamente non so più di cosa stavo parlando, dirò questo: la difficoltà dell'orientamento agli oggetti sta nell'ambiziosità del suo scopo e nella relativa incertezza delle sue fondamenta. Ma è in questa ambiziosità che va ricercata la sua superiorità. E' questo desiderio di consentire ad un uomo di esprimersi nella programmazione di un calcolatore. Ed è una necessità. I calcolatori hanno un perchè, una ragione per cui l'uomo li ha inventati. Ma mi fermo qui.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso