Introduction to Java language programming

Questa pagina è un tentativo di introduzione all'arte della programmazione (facendo riferimento al linguaggio Java)

Verranno pubblicate delle lezioni di base dove saranno spiegati i concetti più importanti per la programmazione, affiancandone l'implementazione in Java.
Alle lezioni seguiranno degli esercizi per mettere in pratica e apprendere le funzionalità apprese nella lezione relativa.
Infine si avranno a disposizione alcuni semplici esempi.


Lezioni:
  1. Informazioni generali su un programma
  2. Per iniziare ( prime istruzioni )

1. Informazioni generali su un programma.
Alla base di qualsiasi programma c'è almeno un algoritmo. La parola algoritmo deriva dal nome  latinizzatodi un grande matematico persiano, Muhammad ibn Musa al-Khwarizmi, vissuto nei primi decenni del IX secolo e sta a significare un procedimento ( svolto in modo meccanico, quindi automatizzabile) di calcolo ( calocolo inteso in senso generale).
Oltre ai semplici procedimenti di calcolare la somma tra due numeri, o la divisione, eccetera, esistono moltissimi altri come per esempio:
  • ricerca del massimo comun divisore ( o minimo comune multiplo )
  • calcolo della radice quadrata di un numero
  • scomposizione in fattori primi di un numero
  • confronto lessicografico tra due parole
I programmi, prima di venir scritti in codice, possono venire schematizzati attraverso l'uso dei  flow-charts chiamati anche diagrammi di flusso: sono delle mappe concettuali in cui i vari passaggi e istruzioni vengono rappresentati da un insieme di blocchi collegati tra loro. Ogni flow-chart ha un unico blocco di inizio e di fine: il programma parte in un solo modo e deve terminare in qulasiasi situazione venga eseguito.
Per creare un programma si deve scriverne il codice che poi verrà compilato e quindi potrà essere eseguito.
In Java la compilazione viene effettuata da un applicativo chiamato javac, che "traduce" il codice in bytecode. Il programma viene infine eseguito dalla Java Virtual Machine, disponibile gratutitamente per ogni sistema operativo.
Una volta scritto il codice java, con un qualsiasi editor di testo oppure con l'utilizzo di un ambiente di sviluppo integrato (  Integrated Development Environment ) , lo si può compilare da una finestra di comandi ( per sistemi operativi Windows si tratta del Prompt dei comandi ), scrivendo:
C: ................. > javac (percorso del file)Nomefile.java


In questo modo verrà creato un nuovo file con lo stesso nome dato al codice ma con estensione .class ( nell'esempio nella cartella C:\Documenti\ comparirà il file Nomefile.class) che potrà essere eseguito dalla Java Vitual Machine.


2. Per iniziare ( prime istruzioni ).
Per iniziare a scrivere un programma in Java bisogna specificare la classe, che ha lo stesso nome con cui si salverà il file .java che poi verrà compilato e si avrà il file .class.
All'interno della classe ci sono vari metodi, ognuno con una signature (cioè la firma del metodo). Il metodo principale, dal quale inizia l'esecuzione il programma, si chiama main ed ha signature: public static void main(String [] args).
All'interno del metodo si scrivono le istruzioni che il calcolatore dovrà eseguire (in maniera sequenziale).
Due istruzioni molto importanti sono: la dichiarazione di tipo di una variabile e l'istruzione di assegnamento.
Ogni variabile in Java ha un tipo specifico: cioè può assumere valori del tipo dichiarato e per ogni tipo sono definite operazioni diverse.

I tipi di dato primitivi sono:  
  • Tipi interi
    • byte ( dimensione 8 bit, assume valori da -2^7 a 2^7-1) 
    • int (dimensione 32 bit, assume valori da -2^31 a 2^31-1)
    • short(dimensione 16 bit, assume valori da -2^15 a 2^15-1)
    • long(dimensione 64 bit, assume valori da -2^63 a 2^63-1)
  •   Tipi a virgola mobile
    •  float(dimensione 32 bit, per numeri reali)
    • double(dimensione 64 bit, per numeri reali)
  •   Tipo booleano
    •  boolean (assume valori true, false)
  •  Tipo carattere
    •  char (dimensione 16 bit, secondo lo standard Unicode e non Ascii)
Un'istruzione di dichiarazione di tipo è ad esempio:
int numero; (numero viene dichiarata una variabile di tipo int)
oppure
char lettera; (lettera viene dichiarata una variabile di tipo char).
Una volta dichiarata una variabile di un certo tipo (ad es. int n;)  possiamo assegnarne un valore di quel tipo attraverso l'operatore "=" (nell'es. n=2;).
Si può anche dichiarare il tipo di una variabile e fare subito l'assegnamento, ad esempio char caratt='f';
Per l'assegnamento di un carattere esso va inserito tra due apici: 'c'.
Come avrete notato ad ogni istruzione segue un ";" che serve a indicare il termine dell'istruzione stessa.
Si può assegnare qualsiasi espressione ad una variabile, l'importante è che il valore risultante dell'espressione abbia lo stesso tipo della variabile ad esempio:
int n; (dichiarazione della variabile n di tipo int)
n=5;   (assegna ad n il valore 5)
n=n+6; (assegna ad n il valore dell'espressione n+6, in questo caso verrà assegnato 11).
Non è corretto assengare un valore ad una variabile quando i tipi non sono gli stessi: int i=4.6; (questo è scorretto, perchè 4.6 non è di tipo int).
Per far in modo che la variabile di prima assuma il valore 4.6, ma "trasformato" in tipo int, si fa un'operazione detta di type-cast: int i=(int)4.6; (questo è corretto).
Con il casting si forza un valore a diventare di un'altro tipo (il tipo specificato tra le parentesi), nell'esempio precedente 4.6 attraverso il cast diventa 4 (vengono tolti i numeri dopo la virgola).
La sintassi per usare il type-cast è: (<tipo>) <espressione>.
I caratteri vengono memorizzati dall'elaboratore attraverso codici numerici interi, quindi è possibile convertire un carattere nel relativo numero intero con il cast (int) o viceversa, da numero intero ricavare il carattere corrispondente con il cast (char).
Nello standard Unicode le lettere dell'alfabeto hanno codici contigui e sono ordinati rispetto l'ordinamento lessicografico quindi possiamo ricavare il carattere successivo a quello contentuto in una certa variabile:
char lett='r'; (dichiarazione della variabile lett di tipo char e assegnamento del valore 'r')
char succ=(char)((int)'r'+1) ; (assegnamento alla variabile succ di tipo char il valore successivo al carattere r)
(Si ricava il codice numerico di 'r', si somma 1 e poi si converte il numero ottenuto in char, ottenendo così 's', la lettera successiva ad 'r').
Se il tipo di una variabile è più "generale" di quello dell'espressione, si ha una conversione automatica: una variabile di tipo double può anche assumere valori di tipo int, ma il viceversa non è valido.

Per mettere in pratica le conoscenze fin'ora acquisite si può creare un semplice programmino. Ad esempio si scrive il nome della classe, la signature per il metodo main nel quale vanno inserite le istruzioni da fare e si compila il tutto.
Ricordarsi che la classe e il metodo vanno aperti e chiusi con le parentesi graffe "{" e "}".
Esempio.
class PrimoCodice{  (il nome della classe è arbitrario, lo stesso vale per i nomi delle variabili)
        public static void main ( String [] args) {   (signature del metodo main)
                   System.out.println ("news-4-me.blogspot.com");    (con l'istruzione System.out.println ("") si stampa a video quello che si trova tra le virgolette, se si tratta di stringhe)
                   int i = 5;   (assegna 5 a variabile i di tipo int)
                  char ca = 'n';    (assegna 'n' a variabile ca di tipo char)
                  char var = (char) ( (int)ca + i );   (assegna l'espressione a destra dell'uguale alla variabile var di tipo char)
                  System.out.println ("Questo è il carattere della variabile var: "+var);  (stampa a video la stringa Questo è...  insieme, grazie al +, al contenuto della variabile var)
        }  (chiuso il contenuto del metodo main)
(chiuso il contenuto dell'intera classe)