|
|
|
|
Strumenti |
08-09-2007, 16:19 | #101 |
Senior Member
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! |
08-09-2007, 16:43 | #102 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
Per esempio quando si lavora "vicino" alla macchina imporre aprioristicamente ed acriticamente il modello ad oggetti è quanto meno una forzatura, detto questo sono più che convinto che nella stragrande maggioranza dei casi l'approccio OO porti solo dei benefici. |
|
08-09-2007, 17:42 | #103 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7041
|
Quote:
ps. particolarmete interessante il post in ogni caso |
|
08-09-2007, 18:10 | #104 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Io mi ero ripromesso di non scrivere più encicliche di questa risma. Ma mi hai fatto un assist a cui non ho saputo restistere perchè sono questioni assolutamente affascinanti.
L'orientamento agli oggetti (un possibile orientamento agli oggetti) non è un generico avvicinarsi al modo di pensare di un essere umano ma è consentire ad un essere umano di esprimere il proprio pensiero senza trasformazioni intermedie. La superiorità di questo orientamento agli oggetti non è una possibilità. Per quanto uno possa avvicinarsi alla meccanica di un calcolatore egli, in quanto essere umano, non potrà che descrivere ciò che osserva secondo il punto di vista di un essere umano. Parole come "registro di memoria", "istruzione", "bit" sono inevitabili astrazioni concettuali di ciò che è fisicamente. Inevitabili. Vi è mai capitato di vedere una penna cadere da un tavolo? Bene, chiedete ad un fisico teorico se le penne possono cadere. Vi dirà che la penna in verità non fa un bel niente. La naturale descrizione del fenomeno è tuttavia personificante perchè tale è la tendenza del pensiero umano: noi vediamo delle cose che si muovono, suonano, che cambiano colore... sono tutte proiezioni dell'io. Lo stesso vale per il calcolatore. E' una cricca di atomi variamente manipolati, i quali subiscono delle eccitazioni energetiche... per la verità atomo è un'astrazione... eccetera eccetera. C'è tutta un filosfia che indaga sulla possibilità che l'uomo possa acquisire una conoscenza dell'essere che non sia contaminata dai propri schemi interpretativi. Io cerco questo orientamento agli oggetti perchè non vedo alternative. Se non sta qui il motivo per cui dovrei usare l'orientamento agli oggetti allora dove sta? Perchè pur con tutte le sue magagne, la prospettiva procedurale, vale a dire l'interpretazione dei fenomeni come sequenze parzialmente ordinate di operazioni elementari su valori immagazzinati in registri di memoria, vanta un'esatta corrispondenza con il modello di funzionamento di un calcolatore. In questo senso la prospettiva procedurale è verificabile al millesimo di millimetro. Rivolgersi ad altri punti di vista significa abbandonare questa certezza. Ebbene, qual'è il vantaggio offertomi a fronte di questa perdita? La Human OOP mi dice che il vantaggio sta nell'evitare una trasformazione di prospettiva: io affido al compilatore il compito di tradurre la rappresentazione umana di un fenomeno in rappresentazione procedurale. Trasformazione che, altrimenti, sono costretto a fare io: essendo fisiologicamente costretto ad osservare le cose in termini umani, ogni qualvolta io debba esprimere queste cose in termini diversi dovrò fare una traduzione. Mi sembra che non si possa scampare a questa trappola. PS: io non cerco nè voglio convincere alcuno di alcunchè. Fatico già a convincere me stesso. Mi preme invece stimolare una visione critica di quanto si sente dire. E c'entra col topic perchè, alla fin fine, io sarei curioso di sapere quale sia l'orientamento agli oggetti a cui fa riferimento il buon Torvalds quando ne critica la realizzazione in C++.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! Ultima modifica di PGI-Bis : 08-09-2007 alle 18:14. |
08-09-2007, 20:48 | #105 | ||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Quote:
Quote:
Tra l'altro tanta gente confonde la sfocatura delle finestre di Aero con la trasparenza delle altre interfacce grafiche: niente di più diverso. Speriamo sia volta buona per chiudere questo OT che si trascina da tempo. Quote:
Eh, sì, è a dir poco ORRENDO: basti vedere a quali contorsionismi devono scendere a patti pur di utilizzare il paradigma degli oggetti. Già soltanto a guardare il codice sopraggiungono dei conati di vomito... Quote:
Ma è una cazzata enorme, perché in realtà NON è programmazione a oggetti, ma procedurale che la simula. I vantaggi della programmazione a oggetti dove sono, se devo usare dei contorsionismi procedurali per simulare ereditarietà e polimorsmo? Infatti il codice fa comunque pena e compassione, perché la forzatura è evidentissima. Il codice è inguardarbile. Quote:
Questi programmatori dovrebbero capire un concetto a dir poco lapalissiano quando lavorano per realizzare applicazioni che devono usare altre persone: bisogna mettere al centro le esigenze dell'utente. Poi possono anche sfogarsi come vogliono per raggiungere questi obiettivi. Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||||
08-09-2007, 20:50 | #106 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
08-09-2007, 20:54 | #107 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Io a lavoro dopo un anno e mezzo di sofferenze con Linux sono passato a Windows e sono a dir poco rinato. Adesso sono decisamente più produttivo e sviluppo con maggior comodità. Comunque stiamo continuando a inquinare il thread con discussioni OT di cui, tra l'altro, qui s'è ampiamente parlato in passato, anche recente: direi di darci un taglio e parlare esclusivamente di programmazione, sfruttando lo spunto datoci da chi ha aperto il thread.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 08-09-2007 alle 20:58. |
|
08-09-2007, 20:56 | #108 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
D'altra parte basti vedere quella libreria C per "programmare a oggetti" per rendersi conto di quanto lontano sia quest'ultima, e farragginoso il meccanismo introdotto: un vero schifo (e sono molto buono ).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
08-09-2007, 20:58 | #109 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
08-09-2007, 21:03 | #110 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Ma il rapporto fra i due linguaggi finisce qui. Ad esempio, anche il primo compilatore Eiffel convertiva il codice in C, ma il codice C prodotto era... procedurale! Infatti non aveva NULLA a che vedere coi concetti espressi dal codice sorgente Eiffel, che facevano uso di oggetti, contratti, ecc., se non che l'esecuzione genera i risultati che ci si aspetteva dal sorgente in Eiffel.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
08-09-2007, 21:05 | #111 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Adesso non ho sottomano le specifiche del linguaggio di programmazione C ma, se non ricordo male, il preprocessore è esplicitamente menzionato dunque dovrebbe essere parte del linguaggio di programmazione C (cioè la possibilità di fare pre-processing così come là descritto). Qualcuno con le specifiche sott'occhio può confermare o smentire?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
08-09-2007, 21:06 | #112 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
08-09-2007, 21:10 | #113 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Io mi riferisco al fatto che un preprocessore concettualmente NON è legato a uno specifico linguaggio. Infatti in qualsiasi momento si può integrare un preprocessore in un qualunque linguaggio, senza cambiare di una virgola la sintassi del linguaggio e i compilatori già esistenti.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
08-09-2007, 21:14 | #114 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
In soldoni stai continuando a fare quello che facevi anche prima: programmare proceduralmente per modellare la soluzione di un problema. Infatti il linguaggio non è cambiato: non era oggetti prima e non lo è nemmeno dopo questa "trovata". Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
08-09-2007, 21:21 | #115 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Ecco perché oggi non ha senso utilizzare il C come linguaggio: per male che vada, in un progetto in C++ si può decidere di non usare nessuna caratteristica che il linguaggio offre in più rispetto al C. Scelta discutibile, ma possibile. Solo che in qualsiasi momento si può cambiare idea e decidere di sfruttarne qualche costrutto. Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
08-09-2007, 21:26 | #116 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Quote:
Finora m'è capitato un paio di volte e con Python ho risolto semplicemente facendo uso di un iteratore presente nel linguaggio (è un iteratore che itera gli elementi dell'iteratore passato e restituisce una coppia ordine + elemento dell'iteratore passatogli ).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
08-09-2007, 21:29 | #117 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3305
|
Quote:
Smettiamola con questa storia della gestione ottimizzata della memoria, Vista occupa uno sproposito di memoria e non riesce nemmeno a rendere il computer più veloce di XP. |
|
08-09-2007, 21:29 | #118 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Al solito il buon PGI-Bis ha calato l'asso sui paradigmi di programmazione.
Entrambi i post sono da quotare, anche se già qualcosa traspariva dai precedenti linguaggi. Thanx so much.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
08-09-2007, 21:31 | #119 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26107
|
Quote:
Dunque la gestione della memoria e il superfetch, almeno per la mia esperienza, hanno influito, eccome, sulle prestazioni della macchina. Questa, ripeto ancora una volta, è la MIA esperienza.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
08-09-2007, 21:52 | #120 | |
Senior Member
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
|
Quote:
Ad esempio non c'e' modo in C di fare questo in maniera altrettanto efficiente: Codice:
std::sort(vector.begin(), vector.end()); Esprimere un concetto in un linguaggio e' cosa differente dall'implementare qualcosa: tutto puo' essere implementato anche in assembly per ovvi motivi. Ma linguaggi a piu' alto livello sono piu' espressivi e "migliori". Il C++ essendo un superset del C e' piu' "espressivo", ne supporta tutti i costrutti e i paradigmi con la medesima efficienza, quindi e' migliore sotto ogni punto di vista.
__________________
"We in the game industry are lucky enough to be able to create our visions" |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:34.