JavaSE – IDE Eclipse

Last Updated on 2 anni | Published: 27/03/2024

IDE Eclipse (Integrated Development Environment) è un software in grado di aiutare il programmatore a scrivere codice sorgente, segnalando eventuali errori sintattici ed avente una serie di tools  utili sempre allo sviluppo.

  • Offre la possibilità di programmare in più linguaggi attivando prospettive differenti. Quindi si utilizza eclipse per programmare in Java oppure programmare in C o magari in PHP, questo è possibile perche si possono installare plug-in, ovvero parti di codice che si integrano con eclipse durante l’ installazione, per consentire una funzione che prima non era posibile utilizzare.
  • E’ Open Source, si adatta alle esigenze più svariate, viene distribuito per diversi sistemi operativi ma soprattutto ha uno store integrato da cui è possibile scaricare plug-in per modificare l’ambiente di lavoro.
  • E’ possibile scaricare una versione di Eclipse per il vostro sistema operativo dal seguente Link Eclipse

Se decidete di installare Eclipse effettuate prima l’ installazione delle JRE e JDK, per avere l’ambiente virtuale java e le librerie del programmatore, almeno quelle di base. Dal seguente Link Java è possibile scaricare le librerie per il vostro sistema operativo.

Progetto JavaSE con Eclipse

Eclipse se non è stato impostato diversamente ogni qualvolta si avvia chiede una Workspace, nome di cartella che verrà creata nella posizione da voi indicata, in cui è possibile creare progetti Java.

Una delle caratteristiche distintive di Eclipse è la sua flessibilità e personalizzazione attraverso il concetto di “prospettive“. In questo articolo utilizzeremo la prospettiva Java (Open Prospective pulsante in alto a destra) per creare il primo progetto Java attraverso il menu File / New / Java Project

Crea Progetto JavaSE
Progetto JavaSE

Tutti i progetti JavaSE hanno un package src, in esso si potranno crare ulteriori package, sottopackage e classi per la stesura del proprio progetto. A tal proposito possiamo creare un primo package in src, ad esempio principale, ed in esso poi collocare la prima classe necessaria per iniziare, indipendentemente dalla complessità. Con il tasto destro del mouse su src:

In questo caso è possibile creare il package e classe contemporaneamente, altrimenti si crea con la stessa modalità prima il package e poi in esso la classe.

Per logica di programmazione la classe Home rappresenta la prima classe di un progetto quindi si dichiara essa stessa autopartente attraverso la spunta del metodo:

public static void main(String[] args)

Questo metodo verrà scritto automaticamente all’ interno della classe:

package principale;
public class Home {
     public static void main(String[] args) {
     }
}

Non possiamo modificare la firma del metodo main ma soltanto programmare le sue azioni all’ interno del blocco delimitato dalle parentesi ed eseguire con il bottone run in alto nella barra degli strumenti.

Programmazione del metodo main()

Il metodo main verrà programmato inizialmente per utilizzare variabili, tipi di variabili e concatenamenti, operatori aritmetici, unari e pre/post incremento, classi Wrapper, alcune classi di sistema per inserire stringhe da tastiera oppure visualizzare dati sulla console di eclipse, casting tra tipi di variabili.

Costrutti Java

Il teorema do Bohm-Jacopini afferma che qualunque algoritmo può essere implementato in fase di programmazione utilizzando tre sole strutture dette strutture di controllo: la sequenza la selezione e l’ iterazione

La sequenza sono le istruzioni elencate ed eseguite in sequenza strutturata.

La selezione è la scelta tra due percorsi mediante una condizione.

L’ iterazione, detta anche ciclo, è un blocco di istruzioni che vengono ripetute fino a che una certa condizione non cambia di stato.

In questo articolo trattiamo le strutture di controllo del linguaggio Java, seguite con attenzione:

Costrutto Condizionale IF

Il programmatore può eseguire blocchi di codice in sequenza anche alternativamente, appunto utilizzando strutture condizionali.

if (se) è uno dei costrutti piu semplici e fondamentatali dei linguaggi di programazione ed una sua implementazione è la seguente:

if(condizione) {

     // condizione true

}

if(condizione) {

     …

    if(condizioneB) {

          …

    }

}

if(condizione) {

     …

}else {

     …

}

if(condizione) {

    …

} else if(condizione) {

     …

} else if(condizione) {

     …

} else {  // opzionale

}

Questi sopra sono costrutti condizionali che si implementano sempre considerando il funzionamento base e cioè che la sequenza di istruzioni scritte nel blocco ( …. ) verranno eseguite solo se la condizione tra parentesi è vera. Passiamo ad alcuni esempi in Eclipse, scritti nella prospettiva JavaSE:

Negli esempi vengono riportate le possibili applicazioni del costruto if, le condizioni tra parentesi tonde contengono gli operatori di confronto e booleani per eseguire blocchi di codice in maniera alternativa.

Infatti pur programmando il metodo main, le istruzioni sono sempre scritte con una logica sequenziale che viene interrotta dalle condizioni dei costrutti if per eseguire in maniera alternativa altre istruzioni sequenziali, per poi continuare  dopo il costrutto e fino alla conclusione del metodo.

Costrutto Condizionale Switch-Case

Switch Case è una struttura condizionale che permette di eseguire diversi blocchi di istruzioni, a secoda del valore dell’ espressione di controllo, vediamo di seguito la sintassi:

switch (condizione) {

     case valore1:

           ……

      break;

     case valore2:

           ……

      break;

      altri case

    default:  //opzionale

}

Costrutto Iterativo While-do

I costrutti di iterazione consentono di eseguire ripetutamente (loop) un determinato blocco di codice oppure una singola riga di codice. Quando si utilizzano costrutti iterativi, come per i costrutti condizionali, si fa riferimento a condizioni affinchè il blocco possa essere eseguito oppure no.

In Java i costrutti di iterazione sono almeno tre, di seguito vediamo la sintassi ed il comportamento del while do – do while.

while (condizione) {

      // ripete blocco finche condizione vera

}

int a=1;

while (a<=10) {

     System.out.println(a);

     a++;

}

do {

      // ripete blocco finche condizione vera

} while (condizione);

int a=1;

do{

     System.out.println(a);

while(a<=10);

Possiamo quindi affermare che i costrutti iterativi sono strutturati in modo da avere una condizione di ingresso ed una condizione di uscita, tale da interrompere il loop. 

Costrutto Iterativo for

Come per il costrutto iterativo visto al paragrafo precedente anche il for() itera un blocco di codice, analizziamo la sintassi della struttura:

for(x ; y ; z) {

     // codice da iterare

}

L’ iterazione si basa su una variabile contatore, ovvero che assume un valore iniziale per poi essere incrementata, vediamo i parametri in parentesi:

  • x inizializzazione, inizializza una variabile intera come contatore
  • y condizione, espressione logica che determina la fine del loop
  • z incremento, espressione per incrementare la variabile inizializzata.

Vediamo il codice che possiamo implementare nel metodo main della classe principale per visualizzare una sottostringa di una variabile e ciclare la lunghezza della stessa per  visualizzare sulla console ogni singola lettera contenuta partento dalla prima:

String testo=”Pippo Pluto“;

String nome=testo.substring(6,11);

System.out.println(nome);

int L = nome.lenght();

for(int  i=0;i<L;++i){

     System.out.println(nome.substring(i,i+1));

}

Un costrutto iterativo for() potrebbe contenere come blocco un altro costrutto for(), quindi nidificato. Un esempio potrebbe essere quello di stampare le tabelline da 1 a 5, algoritmo contenuto nel metodo main della classe principale del progetto:

int i;

for(i=1;i<=5;i++){

     for(int z=1;z<=10;z++){

          System.out.println((i*z)+” “);

     }

     if(z==10){

          System.out.println();

     }

}

Costrutto Try Catch Finally

Quando il programmatore utilizza il costrutto try-catch-finally significa che intende gestire gli errori che potrebbero verificarsi durante il runtime del software. Le cause che potrebbero far scaturire un errore sono molteplici e vengono catalogate come eccezioni che di fatto lo sviluppatore deve gestire, queste possono appartenere a specifiche categorie ad esempio:

  • Errori di programmazione
    • Divisione per zero
    • cast non permesso
    • accesso oltre i limiti di un array
  • Errori di Sistema
    • Disco rotto
    • Connessione remota chiusa
    • memoria non disponibile
  • Errori di utilizzo
    • Input non corretti
    • Lavorare su un file inesistente

Sintassi:

try {
    // Codice che potrebbe generare un’eccezione
    // …
} catch (TipoEccezione1 nomeEccezione1) {
    // Gestione dell’eccezione di TipoEccezione1
    // …
} catch (TipoEccezione2 nomeEccezione2) {
    // Gestione dell’eccezione di TipoEccezione2
    // …
} finally {
    // Codice che viene eseguito sempre, indipendentemente dalle eccezioni
    // …
}

Esempio:

public class TryCatchFinallyExample {
     public static void main(String[] args) {
          try {
              int[] numeri = {1, 2, 3};
              System.out.println(numeri[5]); // Tentativo di accedere a un indice non valido
          } catch (ArrayIndexOutOfBoundsException e) {
              System.out.println(“Indice non valido: ” + e.getMessage());
          } finally {
               System.out.println(“Questo viene eseguito sempre“);
         }
    }
}

Gli Array Primitivi

Utilizzando le variabili in Java possiamo conservare in memoria un valore numerico oppure alfanumerico. Se invece utilizziamo gli Array è possibile avere più di un valore associato ad una variabile, ad esempio una lista di valori oppure una lista di  nomi, piuttosto che una sequenza di tipi booleani.

Un array primitivo quindi è una struttura dati di lunghezza definita che può contenere solo dati dello stesso tipo fino alla lunghezza massima:

Volendo esprimere graficamente un array primitivo che  che contiene 5 stringhe oppure un array primitivo che contiene 5 valori numerici possiamo rappresentarlo nella seguente forma, che certamente non è quella con cui il compilatore gestisce il flusso:

Il codice seguente mostra come gestire un array primitivo di tipo intero attraverso costrutti iterativi for(). Nel caso specifico si utilizza anche il costrutto foreach per ciclare l’array e leggere il contenuto di ogni singola posizione partendo dalla zero:

Il costrutto iterativo for(int n:numeri) presente nella parte finale del codice sopra esposto è il foreach, che si mensiona ma non si scrive. La differenza con il for tradizionale è che non ha l’ indice, infatti dopo i due punti (:numeri) vi è il nome dell’ array da iterare ed alla sinistra (int n:) una variabile dello stesso tipo dell’ array. Attraverso la variabile  n si stampano tutte le posizioni partendo automaticamente dalla zero e senza condizioni infatti è il costrutto stesso a determinare la fine dell’ array.

Nel prossimo articolo verrà mostrato il concetto di classe che rappresenta il fondamento della OOP, infatti attraverso queste si possono creare oggetti ………..

LABORATORIO

Esercitazione Java realizzata con Eclipse prospettiva SE in cui si evidenzia l’utilizzo del costrutto If() con alcune classi di sistema:

L’ esempio successivo dimostra come utilizzare il costrutto decisionale if()–elseif() con strutture nidificate.

L’ esercizio evidenzia l ‘utilizzo del costrutto if()–else if() per verificare se un determinato valore digitato da tastiera rientra in un range per poi stabilire se è divisibile per due oppure per tre.

Un costrutto decisionale in grado di eseguire blocchi di codice a seconda del valore dell’ espressione di controllo, quindi una condizione, è il costrutto switch–case. L’ esercizio implementa un menu di scelte da importare in Eclipse prosepettiva SE:

Un ulteriore  esempio del costrutto  switch–case  potrebbe essere l’ implementazione di un menu di scelte.  Importare il progetto  in Eclipse prospettiva SE:

Costrutti Iterativi

Le iterazioni sono un aspetto fondamentale della programmazione strutturata, infatti danno la possibilità di ripetere blocchi di codice in maniera ciclica a dipendere da una espressione di controllo ovvero una condizione. Il prossimo esempio dimostra come utilizzare il costrutto iterativo while–do in un progetto Eclipse prospettiva SE:

Leggere da tastiera un sequenza ignota di numeri interi positivi, l’ algoritmo termina quando si inserirà un qualsiasi numero negativo. Stampare come risultato quanti numeri sono stati inseriti da tastiera e la loro media. Importare il progetto in  Eclipse prospettiva SE . 

Supponiamo che l’ andamento di sviluppo di una popolazione avvenga nel seguente modo: un anno raddoppia e l’ anno successivo cala di 1/3. Creare un algoritmo che dato un valore iniziale della popolazione ed un target da raggiungere o superare possa restituire il numero degli anni per raggiungere lo scopo. Importare il progetto in Eclipse prospettiva SE.

Far inserire una serie numerica di interi, fermandosi quando la somma dei due numeri consecutivi è 10 oppure quando il numero inserito è uguale al precedente del precedente. Importare il progetto in Eclipse prospettiva SE:

Il costrutto iterativo for()  può ripetere un blocco di codice per un determinato numero di volte a dipendere da una espressione di controllo, quindi una condizione.

Il seguente esercizio da importare in Eclipse prospettiva SE ne dimostra il funzionamento:

Possiamo utilizzare il costrutto for() per generare una sequanza numerica 1-20 e stampare sulla console solo i divisibili per tre. Il progetto può essere importato in Eclipse prospettiva SE.

Il costrutto Iterativo for() in questo esercizio lo utilizzeremo per generare tabelline, digitando  da tastiera il numero di cui vogliamo ottenere la tabellina fino al dieci. Importare il progetto in Eclipse prospettiva SE.

Per lo svolgimento del successivo algoritmo sono necessari un costrutto iterativo guidato da eventi (while), un costrutto iterativo finito (for) ed un costrutto di selezione (if).

L’ utente dovrà inserire una frase da tastiera e cercare in essa quante volte ricorre una singola lettera, ad esempio la ‘a‘. Il programma termina quando l’ utente inserirà le lettera ‘x‘. Il progetto è diponibile per Eclipse prospettiva SE:

Inserire da tastiera un valore intero che rappresenta un numero di Ammalati e sempre da tastiera inserite un valore intero che rappresenta la percentuale di guarigione al giorno.

Calcolare quanti giorni passano per raggiungere un numero di Ammalati inferiore oppure uguale a 100. Il progetto è disponibile per Eclipse prospettiva SE:

I costrutti studiati in precedenza, come quello iterativo while() e decisionale switch(), possono essere  utilizzati nel medesimo algoritmo per generare una menu di scelte, quindi eseguire blocchi di codice in maniera alternativa.

La caratteristica è quella di presentarsi in una forma perpetua ovvero sarà l’ utente che deciderà di interrompere tale loop. Il progetto si può importare in Eclipse prospettiva SE:

Gestione Eccezioni - try catch

Le eccezioni sono un aspetto fondamentale della programmazione software, infatti se lo sviluppatore decide di gestirne alcune deve poter istruire il suo codice affinche queste vengano intercettate. La presenza di queste ultime in una analisi potrebbero bloccare il runtime se non gestite, per cui Java utilizza il costrutto try-catch. E’ possibile importare l’ esempio in Eclipse prospettiva SE

Array Primitivi

In questo esercizio si gestiranno due liste di array stringa. Il costrutto iterativo for() è utilizzato per ricercare un elemento all’ interno di un array e visualizzare il contenuto della stessa posizione dell’ altro array. Il progetto si può importare in Eclipse prospettiva SE:

Dato un array intero di dieci posizioni, valorizzare ogni posizione a partire da zero di soli numeri pari, estratti da un range 1-20 realizzato con il costrutto for(). Importare il download in Eclipse prospettiva SE

Dato un array stringa contenente indirizzi email, ad esempio una lista array stringa. Verificare posizione per posizione se gli indirizzi in esso contenuti sono scritti correttamente, ovvero se contengono il dominio, il punto e la chiocciola. Questo lo si ottiene attraverso il metodo matches(String regex) della classe String che confronta ogni stringa dell’ array stesso con una espressione regolare appunto regex.

Il seguente download da importare in Eclipse prospettiva SE mostra come costruire il gioco dell’ impiccato, ovvero indovinare una parola, sillaba per sillaba, in dieci tentativi. Il progetto  utilizza un array primitivo ed alcuni metodi di oggetti , come nextInt di Scanner e substring della classe String, oltre al costrutto for()

L’ esercizio mostra come utilizzare un array primitivo di tipo intero affinchè la media dei valori pari in esso contenuti possa essere visualizzata. L’ array in questione è gestito in inserimento attraverso la tastiera. Il download può essere importato in Eclipse prospettiva SE

Ricavare il valore massimo da una lista array di tipo intero. Progetto da importare in Eclipse prospettiva SE

Dati due valori che rappresentano il limite inferiore ed il limite superiore, ad esempio 10 e 20 ed una lista array contenente numeri interi, visualizzare il conteggio di quanti numeri sono compresi nell’ intervallo menzionato sopra. Il progetto si può importare in Eclipse prospettiva SE

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *