Author Archives: admin

La programmazione ad oggetti in Java

Programmare con JavaLa programmazione orientata agli oggetti rappresenta una tecnica di programmazione molto robusta ma allo stesso tempo particolarmente attenta alle esigenze del programmatore. Il suo successo si deve al fatto che il software realizzato con tale tecnica si è dimostrato molto longevo, grazie alla sua riusabilità garantita dalla presenza degli oggetti.

Nel dare una definizione di oggetto possiamo semplicemente riferirci a una regione di memoria allocata; ma d’altra parte poiché nei linguaggi di programmazione le variabili sono utilizzate per accedere agli oggetti, allora gli oggetti e le variabili si scambiano naturalmente i ruoli. C’è allora da precisare che fin tanto che un’area di memoria non è allocata non sarà possibile parlare di un oggetto.

Possiamo dire quindi che un oggetto è un’istanza di una classe, in quanto unico (caratterizzato da una propria identità) e separato da altri oggetti, con i quali peraltro può comunicare.

java

Gli oggetti, possono essere formati da altri oggetti, ognuno dei quali individuato quale singolo componente che a sua volta potrebbe essere costituito da ulteriori oggetti; in questa definizione a cascata è necessario però arrivare alla radice della struttura che deve necessariamente essere costituita da oggetti atomici.

La programmazione ad oggetti si basa su concetti totalmente nuovi rispetto a quelli su cui si fonda la programmazione strutturata, e per ottenere i benefici garantiti da tale tecnologia è necessario tenere ben presente alcuni principi.

Molti programmatori, si avvicinano a tale tecnica attraverso un approccio sbagliato, dovuto ai retaggi acquisiti con la programmazione strutturata che li porta ad associare le classiche procedure e funzioni ai metodi della programmazione orientata agli oggetti; cosicché ad esempio le variabili globali diventano le variabili di classe.

Link correlati all’argomento:

Il bytecode di Java

Programmare con JavaIl bytecode di Java rappresenta quindi una sorta di codice intermedio tra il codice sorgente, che lo sviluppatore realizza utilizzando i costrutti che il linguaggio di programmazione gli mette a disposizione, e il codice macchina, immediatamente interpretabile dalla piattaforma che stiamo utilizzando.

Con il bytecode di Java possiamo realizzare un programma, che piuttosto essere specifico per un sistema, è eseguibile su qualsiasi piattaforma e sistema operativo. La condizione necessaria affinché ciò avvenga è che sia disponibile un interprete opportuno.

La necessità che il bytecode sia eseguibile su piattaforme diverse è fondamentale per il funzionamento delle applet, questo perché i servizi forniti da internet sono indipendenti dalla piattaforma.

Tale tecnologia non è però immune da problemi: il limite maggiore connesso all’utilizzo del bytecode risiede nella sua velocità di esecuzione.

BYTECODE JAVA

Questo perché mentre un programma specifico per un sistema è eseguito direttamente dall’hardware per il quale è stato compilato, il bytecode Java, deve preventivamente essere elaborato dall’interprete e solo dopo potrà essere eseguito dall’hardware.

Link correlati all’argomento

Java è indipendente dalla piattaforma

Programmare con JavaLa difficoltà che spesso attanaglia il programmatore risiede nella necessità di realizzare un’applicazione che, nella sua vita, potrà essere eseguita sulle diverse piattaforme software ed hardware disponibili in commercio. Java nasce proprio con tale esigenza che si manifesta nell’impegno di realizzare un ambiente di programmazione che si dimostrasse totalmente indipendente dalla macchina.

Nei linguaggi compilati, il codice sorgente, attraverso l’utilizzo di un particolare software detto appunto compilatore, è trasformato nel corrispondente codice in linguaggio macchina che può essere, così, eseguito dal processore. Tale processo lega l’esecuzione dell’applicazione all’ambiente in cui il codice sorgente è stato compilato.

java

Nei linguaggi interpretati, invece, il codice sorgente non necessità di un compilatore che lo trasformi in codice eseguibile bensì è l’interprete che si occupa di tradurre le istruzioni in linguaggio macchina. Così un programma destinato a girare su una particolare piattaforma potrà essere eseguito anche su un altro tipo di piattaforma, basterà che in entrambi i casi sia installato l’interprete.

Java si pone a metà strada tra queste due tecniche nel senso che è sia compilato che interpretato; allora il codice sorgente è prima compilato in un formato intermedio che prende il nome di byte code (codice binario), che è quindi interpretato dalla Java Virtual Machine (JVM), che assume il compito di interpretare le istruzioni presenti nel bytecode e di convertirle in istruzioni eseguibili dal processore.

Attraverso l’impiego di tale tecnologia introduciamo la possibilità di controllare eventuali errori del codice sorgente, nella fase di compilazione, ed allo stesso tempo produciamo programmi leggeri, grazie al fatto che il bytecode assume dimensioni ragionevoli. L’ambiente di sviluppo di Java comprende quindi due parti: un compilatore ed un interprete.

La portabilità di Java, si realizza appunto con l’impiego della Java Virtual Machine (JVM). Nel caso delle applet, l’interprete del bytecode è già integrato in qualsiasi browser compatibile con Java (nel caso non fosse presente risulta facilmente scaricabile ed installabile): le applet allora sono eseguite in modo automatico.

Per le altre applicazioni Java, è necessario avere installato l’interprete sul proprio sistema; questo può essere ottenuto come parte di un ambiente di sviluppo, liberamente scaricabile dal sito del produttore ed installabile sulla propria macchina in maniera semplice e veloce.

Caratteristiche di Java

Programmare con JavaCome già anticipato Java rappresenta un linguaggio di programmazione con il quale si possono scrivere programmi eseguibili da inserire nelle pagine Web, le cosiddette applet, che almeno all’inizio hanno decretato il successo del linguaggio e applicazioni che possono essere eseguiti da sole sotto qualsiasi piattaforma. Da questo punto di vista Java assume delle caratteristiche molto simili ad altri linguaggi compilativi quali il C, C++, Visual Basic, rispetto ai linguaggi interpretativi quali HTML  o JavaScript.

La storia di Java inizia nel 1991 quando alla Sun Microsystems parte un progetto di ricerca destinato a sviluppare applicazioni per l’elettronica di consumo, si stabilisce quindi di lavarare alla realizzazione di un nuovo linguaggio di programmazione orientato agli oggetti. Come già detto però, la sua estrema diffusione si deve alla sua semplice integrazione nelle strutture delle pagine Web dell’epoca, risalgono infatti al 1994 i primi esperimenti di utilizzo di tecnologie Java nel browser  Netscape, colosso a quei tempi nella gestione degli ipertesti.

java

Derivato dal linguaggio di programmazione ad oggetti C++, Java è nato con l’obiettivo di realizzare un linguaggio di piccole dimensioni che si dimostrasse semplice da usare ed efficiente nei risultati. La successiva necessità si è poi concentrata sulla portabilità delle applicazioni su diverse piattaforme e sistemi operativi, sia a livello di codice sorgente che a livello del codice binario.

Tutto questo realizzabile tramite l’impiego della Java Virtual Machine (JVM): implementazione software di una CPU progettata per eseguire codice Java compilato, comprendente applicazioni Java stand-alone, così come applet che vengono scaricate ed eseguite in browser Web. La Java Virtual Machine è sviluppata per ogni Sistema Operativo e permette di astrarre la macchina virtuale creata dal SO ad un livello di standardizzazione superiore.

JAVA

Così con Java possiamo creare delle applet, cioè programmi idonei all’esecuzione all’interno di pagine Web che risultano dinamici ed interattivi, particolarmente adatti per produrre animazioni, moduli interattivi, giochi etc; l’esecuzione delle applet avviene in un comune browser compatibile con la tecnologia Java. Ma allo stesso tempo possiamo creare, sempre con Java, delle comuni applicazioni, di quelle che siamo abituati a utilizzare sul nostro computer quando abbiamo necessità di assolvere ad una determinata esigenza.

Introduzione a Java

Programmare con JavaIl linguaggio Java, deve il suo grande successo e la sua notevole diffusione al fatto che la comunità web lo abbia individuato, da subito, come uno strumento valido per la realizzazione di pagine Web interattive. Benché tale sua caratteristica non sia trascurabile, grazie anche alla possibilità di creare con facilità le cosiddette applet, piccole applicazioni Java facilmente integrabili in pagine html, Java si è nel tempo dimostrato un linguaggio di programmazione completo.

Le sue caratteristiche innovative, non solo lo hanno messo al pari degli altri linguaggi di programmazione, già da tempo utilizzati dalla comunità dei programmatori, ma ne ha dimostrato le sue sorprendenti potenzialità che ne hanno giustificato la sua diffusione.

Il successo di Java si deve sostanzialmente a due caratteristiche essenziali:

  • estrema semplicità nella realizzazione di procedure anche complesse, grazie all’alto livello di astrazione;
  • portabilità del codice Java, che gli attribuisce la totale indipendenza dall’hardware.

Java è un linguaggio orientato ad oggetti, quindi diverso dai linguaggi procedurali molto diffusi nel mondo della programmazione ai tempi della sua comparsa nel panorama mondiale. Ricordiamo a tal proposito che un linguaggio orientato ad oggetti possiede una struttura non più basata sul concetto di variabile e di procedura ma sul concetto di oggetti, complessi e manipolabili come entità a se stanti.

java

L’estrema semplicità e la sua portabilità lo rendono particolarmente adatto come linguaggio per avvicinare i neofiti al mondo della programmazione. Ma la sua semplicità non gli attribuisce delle caratteristiche di banalità, in quanto possiede un alto livello d’astrazione e una notevole rigidità nei controlli.

Oggi Java rappresenta una solida realtà e sono innumerevoli le applicazioni, che nella vita di tutti i giorni utilizziamo, senza sapere che sono state scritte interamente in Java. D’altra parte, come ci ricorda la classifica Tiobe, che si occupa di monitorare in modo permanente l’utilizzo dei più diffusi linguaggi di programmazione, il linguaggio Java sono orami diversi anni che si scambia il vertice con il linguaggio C.

Interactive Ruby

Guida alla programmazione con Ruby

Interactive Ruby rappresenta una sorta di shell interactive alla quale è possibile digitare tutti i comandi Ruby che potranno in questo modo essere eseguiti immediatamente. Proviamo il suo funzionamento attraverso una serie di esempi. Dapprima utilizziamo Interactive Ruby come un semplice calcolatore eseguendo una serie di operazioni banali, i risultati sono riportati nella Figura seguente.

Interactive Ruby

Abbiamo in questo modo verificato la sintassi delle operazioni matematiche fondamentali. Passiamo ora a qualcosa di più complesso, si fa per dire: stamperemo a video la famosa scritta con la quale si introduce qualsiasi linguaggio di programmazione ovvero Hello World!. Per fare questo, in Interactive Ruby,  basterà definire un oggetto ed immagazzinare in esso la scritta; apriremo come sempre la console di Ruby e digiteremo al prompt le seguenti istruzioni:

C:\InstanRails\rails_apps>irb
irb(main):001:0> def saluto
irb(main):002:1> puts "Hello World!"
irb(main):003:1> end
=> nil
irb(main):004:0> saluto
Hello World!
=> nil
irb(main):005:0>

come è possibile verificare non abbiamo fatto altro che definire una nuova struttura in Interactive Ruby, attribuendo ad essa il nome saluto ed in seguito ne abbiamo richiamato il nome ottenendo il saluto voluto.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Documentazione su Ruby con Ri

Guida alla programmazione con RubyLa prima cosa di cui un programmatore alle prime armi si preoccupa è di reperire il maggior numero di documentazione su Ruby. Allora il modo più veloce di reperire documentazione su Ruby è consultare ri. Preoccupiamoci inzialmente di verificare se la documentazioen Rubyè stata installata correttamente sul nostro computer. A tal proposito ricordiamo che Ruby come componente aggiuntivo presenta ri che rappresenta un programma che contiene tutta la documentazione relativa agli oggetti quali metodi, classi, e funzioni. Potremo condurre tale verifica digitando:

ri puts

che fornisce un messaggio di errore in quanto mi ricorda che la mia richiesta è troppo generica e deve essere affinata per poter restituire delle informazioni dettagliate. Per specificare meglio di che metodo si tratti, utilizzeremo la convenzione di indicare il nome dei metodi attraverso la seguente notazione:

  • nomeclasse#nomemetodo – per i metodi di istanza;
  • nomeclasse::nomemetodo – per i metodi di classe.

Allora scriveremo:

ri Kerenel#puts

per ottenere informazioni sul metodo puts della classe Kernel.

In questo modo ricaveremo il seguente risultato:

C:\InstanRails\rails_apps>ri Kernel#puts
----------------------------------------------------Kernel#puts
     puts(obj, ...)    => nil
---------------------------------------------------------------
     Equivalent to
         $stdout.puts(obj, ...)

 Per ottenere una lista delle classi per le quali ri fornisce documentazione digitare:

 ri –c

si ottiene una lista molto lunga che può scorrere attraverso l’utilizzo del tasto enter.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le variabili d’ambiente in Ruby

Guida alla programmazione con Ruby

Le variabili d’ambiente in Ruby sono utilizzate per memorizzare alcune impostazioni relative al funzionamento del sistema o delle applicazioni installate. Sono utilizzate in tutti i principali sistemi operativi  ed alcune di esse si rivelano particolarmente utili per interagire in modo semplice ed efficace con il personal computer. Rappresentano delle stringhe di caratteri che contengono informazioni quali percorsi di file, unità disco, o nomi di file. Esse possono essere utilizzate per controllare il comportamento di diversi programmi.

Una lista delle principali variabili d’ambiente utilizzate da Ruby è riportata di seguito:

  • RUBYOPT: già impostata in fase d’installazione permette di passare delle opzioni addizionali all’interprete.
  • RUBYPATH: fornisce la lista di directory nelle quali Ruby cercherà le applicazioni nell’ipotesi in cui risulti specificato il flag -S.
  • RUBYLIB: fornisce la lista di directory contenenti librerie aggiuntive.
  • RUBYSHELL: rappresenta il persorso della shell di sistema, che risulta però valido solo per piattaforme Windows e OS/2.

Le variabili d’ambiente in Ruby assumono le seguenti caratteristiche:

  1.  sono accessibili attraverso un’apposita API del sistema operativo;
  2. in fase di creazione di un nuovo processo, sono inizializzate con una copia dei valori provvisti dal processo padre; il comportamento predefinito è quello di usare una copia delle variabili d’ambiente del processo creante;
  3. un processo non può modificare direttamente le variabili d’ambiente di un altro processo, tuttavia esiste un ambiente di riferimento che i processi possono consultare e modificare, e che viene usato dalla shell grafica per inizializzare le variabili d’ambiente dei programmi che avvia.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le opzioni di Ruby

Guida alla programmazione con Ruby

Il linguaggio di programmazione Ruby è un linguaggio interpretato, nel senso che non necessita di compilazione, ma nel momento in cui viene eseguito, l’interprete si occuperà di trasformare il codice in un linguaggio comprensibile alla macchina. Le opzioni di Ruby ci consentono quindi di utilizzare in maniera appropriata l’interprete in modo da non avere problemi in fase di esecuzione del codice sorgente.

Vediamo nel dettaglio solo alcune delle opzioni di Ruby disponibili:

  • -c: con l’utilizzo di tale opzione viene controllata la sintassi dello script, senza che lo stesso venga eseguito. Nel caso il controllo dia esito positivo viene notificato il messaggio “Syntax OK”.
  • -d, –debug: tale opzione deve essere utilizzata per il debug di un file, la variabile $DEBUG è impostata a “true”.
  • -v, –verbose: fornisce informazioni aggiuntive che vengono dirottate verso l’output; tra le altre vengono esplicitate la versione dell’interprete, dei warning (che rappresentano dei messaggi di avvertimento) in fase di compilazione.
  • -w: risulta simile all’opzione –v, vista in precedenza, ma in questo caso non fornisce la versione di Ruby; con tale opzione può essere omesso il nome del programma da linea di comando, cosicché viene letto dallo standard input.
  • -e comando: con tale opzione viene eseguito il comando fornito come argomento all’opzione.

Le opzioni di Ruby, sono visualizzabili attraverso l’opzione -help.

ruby -help

il risultato è riportato nella Figura seguente.

ruby

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il tipo complex nel Fortran


FORTRANIl tipo complex nel Fortran è un tipo di dati destinato ad ospitare un valore appartenente ad un sottoinsieme dei numeri complessi. E’ composto da due parti: una parte reale ed una parte immaginaria.

La procedura con la quale un numero complesso viene registrato in memoria prevede l’utilizzo di due unità di memoria consecutive destinate ad immagazzinare quindi, due valori reali, rispettivamente la parte reale,e la parte immaginaria del numero complesso.

La sintassi di una istruzione di dichiarazione di tipo di dato complesso ha la seguente forma:

COMPLEX [[([KIND=]parametro di kind )][, attributi ] ::] variabili

Ad esempio, la seguente istruzione dichiara due variabili complesse var_a e var_b aventi parametro di kind pari a 5.

COMPLEX(KIND=5) :: var_a,var_b

Poiché, come già anticipato un tipo complesso contiene due informazioni( parte reale e parte immaginaria del numero), tale specifica del numero di kind resta attribuita ad entrambe le parti.

Altri esempi di dichiarazioni di tipi comlessi sono:

COMPLEX(KIND=4), DIMENSION(8) :: vet_a, vet_b

Per dichiarare una costante del tipo complesso utilizzeremo una coppia di numeri reali (interi), scritti nel modo seguente:

a=(1.4,2.1)

La prima di tali costanti rappresenta la parte reale del valore complesso, la seconda la parte immaginaria. La forma generale di una costante complessa è la seguente:

complesso = “(” (intero | reale) “,” (intero | reale)“)”.

in cui la parte reale e la parte immaginaria sono costanti del tipo REAL/INTEGER.

I seguenti sono esempi di numeri complessi ammessi dal FORTRAN: il numero complesso 3.14 + 0.000736i viene rappresentato come (3.14,.763E-3), mentre il numero complesso 3 + 4i viene rappresentato come (3, 4).

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il tipo REAL nel Fortran


FORTRANIl tipo REAL nel Fortran rappresenta gli elementi di un sottinsieme dei numeri reali utilizzando due metodi di approssimazione: singola precisione e doppia precisione.

I numeri del tipo real vengono anche detti numeri in virgola mobile (floating-point). L’istruzione REAL è utilizzata per dichiarare una variabile/costante del tipo reale.

La sintassi dell’istruzione di dichiarazione di un ipo REAL è la seguente:

REAL [[([KIND=]parametro_di_kind )][, attributi ] ::] variabili

dove REAL è una parola chiave del Fortran e variabili è una lista di nomi di variabili, costanti o funzioni (separati da virgole) atte a contenere dati di tipo reale.

L’indicazione dei parametri è opzionale, ad esempio se il parametro_di_kind non è specificato allora è impiegato il valore del parametro di kind di default.

Facciamo un esempio:

REAL :: x, y, z

dichiara tre variabili, x, y e z, di tipo reale. Dichiarazioni più complesse sono:

REAL(KIND=high), OPTIONAL :: var1

REAL, SAVE, DIMENSION(10) :: var2

Oppure nella forma:

REAL(KIND=high) :: var3

REAL :: var4

DIMENSION var5(10)

SAVE var6

OPTIONAL var7

Quando risulta necessario definire una costante reale che rappresenta quindi il valore di un numero appartenente al sottoinsieme dei numeri reali, che la macchina che stiamo utilizzando è in grado di rappresentare, sono possibili due metodologie di rappresentazioni che si differenziano per la parte esponenziale.

Una costante del tipo REAL è immagazzinata in memoria con due informazioni: la mantissa e l’esponente. Il numero di bit allocati per la mantissa determina la precisione della costante, mentre il numero di bit allocati per l’esponente determina il range della costante.

Caratteristiche del tipo REAL nel Fortran

-valore reale minimo: –1.70141183E+38 circa
-valore reale massimo: +1.70141183E+38 circa
-precisione: 1.40129846E–45 circa

Operazioni ammesse dal tipo REAL nel Fortran

-assegnazione =
-somma +
-sottrazione –
-moltiplicazione *
-divisione /
-potenza **

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: