program2 Assaggio: javascript e programmazione ad oggetti Donato Taddei su uictech, 08\02\2013, h. 20.10. Cosa è javascript? un linguaggio di programmazione interpretato. E sarebbe? Ci sono due modalità con cui viene eseguito il nostro codice, costituito da file di testo. Alcuni linguaggi come il Delphi o c, c++, cobol, prendono in input una sola volta il file di testo col codice che avrete scritto e ne "compilano" una versione binaria, solitamente un file con estensione exe o dll. Lo dice la parola: questi sono linguaggi appunto compilati, che cioè producono come output file eseguibili. Altri linguaggi invece come visualbasic, perl, php, java, python, prendono in input il vostro codice ogni volta che volete eseguirlo e anzicchè restituirsi un file exe producono diettamente i risultati di ciò che avete scritto nel vostro file di testo. Poichè però i vostri file di testo appunto non sono programmi eseguibili per eseguirli bisognerà associarli a uno specifico programma che li capisce. Questo programma è detto interprete. Ergo per ogni codice scritto in un linguaggio interpretato ci vuole uno specifico programma interprete Così per eseguire il codice perl contenuto in un file chiamato script.pl dovrò scrivere al prompt dei comandi o nella finestra esegui perl script.pl Idem vale per php, per java, per visualbasic, nel quale basterà cliccare sul file vbs col codice ed automaticamente sarà lanciata la vbasic.dll (o come si chiama) che interpreterà ed eseguirà il vostro codice. Un tipico esempio di linguaggio interpretato noto a tutti sono i file batch: l'interprete è il command.com o cmd.exe. Subito qualcuno vorrà smentirmi facendomi osservare che visualbasic professionale produce file exe in output e quindi deve ritenersi un linguaggio compilato anzicchè interpretato come sto dicendo io, ma sbaglia perchè visualbasic è un linguaggio interpretato e il file eseguibile prodotto dalla compilazione non è altro che l'interprete impccato insieme al codice parzialmente compilato in un eseguibile. Un altro esempio di questo è l'interprete python implementato all'interno di nvda. Quando lanciate il binario nvda.exe esso per prima cosa costruisce l'interprete Python caricandone le relative dll e queste fino a non molte versioni fa erano inserite fisicamente nel file exe che quindi pesava 5 mega, mentre ora il file nvda.exe sono solo alcune decine di kilobytes. Dopo di che nvda compila ed esegui le unità di codice con cui è costruito per fare il mestiere che fa, vale a dire lo screen-reader. Tornando a bomba: javascript è un linguaggio interpretato: analogamente a quanto accade cliccando su un file di visualbasic (con estensione vbs) se scrivete un file javascript (con estensione js) vi si aprirà il window server host pronto ad interpretarlo. E quello è già un interprete javascript. Tuttavia javascript nasce come linguaggio specificamente progettato per rendere dinamiche le pagine web lato client. Questo, sorvolando sulla precedente definizione, significa che l'interprete javascript è contenuto in ogni browser, non solo Internet Explorer o Firefox ma in ogni browser, su qualsiasi piattaforma, (apple mac, Ipad, linux, ogni razza di unix, symbian. E, con piccole differenze, funzionerà allo stesso modo indipendentemente dal dispositivo e dalla piattaforma alla sola condizione che il dispositivo possa connettersi a internet. Non fraintendete: non è necessario essere connessi a internet per eseguire codice javascript, voglio solo dire che ci sia un programma capace di connettersi a internet, cioè un browser. Che legami di parentela esistono tra java e javascript. Javascript può essere considerato il figlio bastardo edel principe java o un lontano parente miserabile. Qual'è il linguaggio che più gli si avvicina nel senso delle funzionalità? visualbasic. fanno all'incirca le stesse cose, almeno nell'uso che normalmente se ne fa. La differenza fondamentale tra i questi due linguaggi è che visualbasic deriva dal vecchio basic ed è targato Microsoft, dunque funziona sostanzialmente se non esclusivamente sulle macchine con sopra installato windows, ed essendo di casa mette a disposizione in pratica tutte le principali funzioni di un linguaggio di programmazione rispettabile (si possono fare i giochini, la grafica, files, databases ecc.) però se vi fate una calcolatrice o altro programmetto non potrete usarlo sul telefonino se non ha un sistema operativo windows. Viceversa javascript offre molte meno possibilità ma funziona con qualsiasi sistema operativo ed è molto più orientato agli oggetti. A quale linguaggio rassomiglia nella sintassi? a tutti quelli derivati direttamente o indirettamente dal c, quindi c++, java, perl, php, script di jaws, python. Cosa si può fare con javascript? Tutto quello che si può fare in una pagina web, aggiungere campi a una pagina, gestire eventi di tastiera o di mouse, calcoli, espressioni regolari, menu a comparsa. Cosa non si può fare con javascript. In javascript bisogna scordarsi di fare gran parte delle cose che si fanno di solito con i linguaggi di programmazione come leggere e scrivere files, o lanciare programmi, ad eccezione della connesssione internet via http. Non pensate che chi l'ha inventato fosse down. semplicemente non vi lascia scrivere e leggere files, lanciare programmi perchè, essendo incluso in ogni browser, questo significherebbe mettere alla portata di un qualsiasi principiante come voi password e coordinate bancarie, e non credo sia il caso. E allora che me ne faccio di questa schifezza, di questo aborto di linguaggio di programmazione? Non lo ha prescritto il medico. Se avete mai cercato un percorso a piedi o in mcchina con Google maps o meglio se vedendo ne avete apprezzato mappe e cartine, anche interattive, beh quella roba è fatta interamente in javascript e scusate se è poco. Io ho imparato un po javascript perchè mi faceva schifo la calcolatrice del telefonino, così me ne sono fatta una che posso usare sia sul pc che sul telefonino. Ma ci ho fatto pure quella roba dei colori che ho postato un mesetto fa. Di tanto in tanto con quello verifico anche l'andamento della mia pressione arteriosa esaminando le memorie dello stigmomanometro, ovviamente inserendo i dati manualmente. Continuate a questo punto a dire che siete tanto interessati a javascript o avete cambiato idea? Passiamo ora ad altro: parliamo di programmazione orientata agli oggetti. Ne parleremo però con un breve ripasso di analisi grammaticale e logica italiana, quella delle elementari, anzicchè nel giargianese di tutti i linguaggi di programmazione. A Platone, che faceva ora ci vuole troppo il filosofo, qualcuno obbiettò: "platone, tutto quello che vuoi tu ma una cosa è certa: se io vedo un cavallo vedo proprio un cavallo, non vedo mica la "cavallinità" di cui parli. Ma se Platone faceva troppo il filosofo l'altro era un somaro perchè la cavallinità esiste e come. Infatti alla scuola elementare ci insegnavano che i nomi astratti sono tali perchè appunto non si vedono e non si toccano, ma tuttavia esistono, altrimenti non sarebbero nel vocabolario. Poi c'era pure che diceva che l'aria è astratta, perchè non si vede e non si tocca. In ogni caso i nomi astratti, che spesso finiscono con la a accentata come bontà e felicità, esistono e sono appunto l'astrazione del relativo insieme concreto di tutti gli individui od oggetti che hanno le medesime caratteristiche, nell'esempio quelle del cavallo. Il nostro somaro materialista infatti non si accorgeva del fatto che quando il suo occhio percepiva il cavallo, a livello del suo cervello partiva tutto un processo di filtraggio di quanto gli trasmetteva la retina mettendolo appunto in grado di dire che ciò che vedeva era proprio un cavallo, perchè aveva tutte le caratteristiche proprie dei cavalli: p.es. la criniera, gli zoccoli, la stazza, il profilo. Le caratteristiche proprie del cavallo e le azioni che solo un cavallo può fare, esempio nitrire, sono associate al nome astratto di cavallinità, o diciamo solamente cavallo, con riferimento a un individuo che abbia tutte le caratteristiche e attribuzioni tipiche di un cavallo, come dire il "cavallo tipo". In italiano dicesi in senso lato "oggetto" tutto ciò che è appunto "oggetto" della nostra o altrui attenzione. In senso stretto diciamo oggetti o cose tutto quanto è inanimato in quanto non presenta come tratto saliente l'individualità che invece caratterizza gli esseri viventi. Dunque la parola oggetto è quella che meglio rende il concetto di astrazione in quanto meglio evidenzia le cratteristiche e gli attributi propri di un determinato insieme di unità, appunto identificati dalla condivisione di caratteristiche od azioni uguali o simili. Tornando all'analisi grammaticale: abbiamo visto i nomi astratti, il "cavallo tipo" che incarna la cavallinità. Ma c'erano pure gli aggettivi qualificativi: bello, brutto, alto, basso, fulvo, moro, per cui diciamo che quel cavallo è moro, o che i cavalli sono quadrupedi. Gli aggettivi qualificativi qualificano il nome, definendone le caratteristiche o se si preferisce gli attributi. Ma, oltre agli attributi che lo qualificano un nome può anche essere collegato a delle azioni, a dei verbi, che chiameremo predicati. Questo è la diluizione omeopatica del concetto base della programmazione ad oggetti. Ovviamente siccome non siamo alle elementari ma è roba per professori universitari, il nome astratto o cavallo tipo lo chiamano "classe" (sono o no dei prof.?), gli aggettivi qualificativi e quantitaviti li chiamano "proprietà" (si vede che non sono dei poveracci!) e, cosa più bizzarra, le azioni, i verbi, i predicati sapete come li chiamano? metodi. Così avremo un oggetto "cavallo", in cui possono riconoscersi tutti gli individui della classe cavallo e ogni individuo lo chiamano una istanza della classe cavallo, la quale ha come proprietà: quadrupede mammifero peso zoccoli orecchie in un determinato intervallo di ampiezza: se no sarebbe un ciuccio e una serie di metodi: trotta galoppa nitrisce morde il freno s'impenna Ok abbiamo definitol'oggetto cavallo ma fino a un certo punto abbiamo detto che il cavallo è un mammifero. Ma quali saranno le proprietà e metodi dell'oggetto mammifero? Proprietà: respirazione polmonare vertebrato sangue a temperatura costante metodi: partorisce prole viva, riproduzione gamica Allora quando tra le proprietà dell'oggetto cavallo noi inseriamo l'oggetto mammifero i professori ci dicono che la proprietà mammifero della classe cavallo è stata derivata dall'instanziazione della classe mammifero e che quindi ora la classe cavallo ha ereditato proprietà e metodi della classe mammifero. Tutto ciò per dire che il cavallo, essendo mammifero, come tutti i mammiferi, ha respirazione polmonare vertebrato sangue a temperatura costante partorisce prole viva, riproduzione gamica c'è poi una classe vertebrato le cui caratteristiche sono ereditate dalla classe mammifero e quindi trasmesse alla classe cavallo. Più prosaicamente per quelli che masticano o masticherebbero qualche nozione di programmazione, quella classica, quella che ora si chiama procedurale, possiamo dire che una classe raccoglie in una struttura dati referenziata da un nome una serie di variabili e di funzioni ad esso associate: le variabili le chiamano proprietà e le funzioni metodi. Di diverso c'è, ma c'era anche con l'approccio procedurale nei programmi un po più grossi del "ciao mondo" il fatto che variabili e funzioni associate a questa classe od oggetto sono variabili per lo più locali a quella classe, proprio come quando si scomponeva un progamma delphi o c in units o moduli. E così penso di aver chiarito come intendo portare avanti i due discorsi che mi sono impegnato a portare avanti. Nota finale: Tra ieri e oggi ho già scritto ben 21 k di messaggi. Pertanto continuerò solo quando tutti insieme voi altri avrete scritto altrettanti k in merito, ovviamente a netto del quoting. Mica faccio l'entreneuse per quelli cui di tanto in tanto vengono perversioni programmatorie.Torna all'indice