pag.15 4. Un ambiente di sviluppo per Java Esistono in commercio molti ambienti di sviluppo utilizzati dai programmatori Java, in particolare si tratta di editor complessi che mettono a disposizione tools grafici che consentono un'elevata produttività, che si realizza attraverso interfacce per il disegno di componenti e di finestre grafiche. Tali strumenti come ad esempio Jbuilder della Borland o Microsoft Visual J++, prendono il nome di RAD Rapid Application Development o VDE Visual Development Environment. In questi ambienti quasi tutto il lavoro avviene senza dover scrivere codice esplicito ma operando con strumenti di disegno che generano automaticamente il codice Java corrispondente. Questi sistemi sono utili per sviluppare velocemente e a basso costo i programmi, ma presuppongono la perfetta conoscenza della logica e dei meccanismi del linguaggio. Non sono adatti per apprendere le basi della programmazione ad oggetti in Java perché ne presuppongono la conoscenza. Nel seguito di questi appunti si farà uso di un editor grafico semplice, e poco costoso per svelare pienamente gli aspetti logici del linguaggio. L'editor dei programmi Java si chiama RealJava e si può reperire gratuitamente su Internet al sito www.realj.com. Per programmare deve essere già installato anche il jdk (Java Development Kit) che contiene il compilatore Java e la sua documentazione. Il compilatore denominato sinteticamente jdk.1.2 è disponibile gratuitamente al sito www.sun.com della SunMicrosystem che è la produttrice di java. Nel seguito del capitolo, invece di descrivere le opzioni e la struttura di RealJava, si mostreranno alcuni esempi risolti, passo dopo passo, per permettere di acquisire confidenza con l'ambiente di sviluppo.
4.1 Esempi risolti pag.16 esempio 1 : Si codifichi il seguente problema semplice costruire un programma che generi un array di N=10 interi e assegni ad ogni componente i valori da 1..10 e lo stampi. Richieste: realizzare un unico main program; Codifica Apro l editor e scelgo <Project: New Project..> e Empty Project: Compare la seguente finestra, si tratta ora di scegliere <File: New> e dalla finestra che compare si seleziona <Java Source File>:
finalmente si ottiene la finestra vuota per editare il file Java. pag.17 Si edita il seguente programma: Al termine lo si salva col nome prova_01.java, quindi si entra in <Project:AddJavaSouceFile> e si clicca selezionando il file appena salvato prova_01.java:
pag.18 E necessario informare il compilatore che il file prova_01.java è il file che contiene il main program. Col tasto destro del mouse si clicca sull icona prova_01.java e si sceglie <SetAsMain>. Sull icona precedentemente bianca compare una M rossa come nelle figure seguenti: Compilazione Dal menù <Build: Scelgo Compile> e ottengo
pag.19 Esecuzione con Run Application Dal menù <Build:> Scelgo <Run Application> e ottengo
pag.20 esempio 2 : Si codifichi il seguente problema semplice costruire un programma che generi random un array di N=5 interi e assegni ad ogni componente i valori 0<=V[i]<=100 e lo stampi. Richieste: realizzare un unico main program. Codifica ed esecuzione: Nota: per la prima volta compare l operazione di trasformazione forzata di tipo (cast di tipo type cast) nell istruzione V[j] = (int) Math.round(100*Math.random() ); In dettaglio questa istruzione è una istruzione complessa, nel senso che esegue in un unica riga diverse azioni che a partire da quella più interna sono: - Math.random( ) genera un numero casuale x di tipo double, tale che 0.000 <= x < 0.999... - 100* trasforma x in X, ancora di tipo double, tale che 0.000 <= X < 99.99... - Math.round( ) esegue l arrotondamento di X, double, in un numero intero Y di tipo long 0<= Y <= 100 - (int) è l operazione di type cast che forza la trasformazione di Y, long, in un tipo int da assegnare a V[j] che è un array di int. 4.2 Casting di tipi di dati In java come in Pascal le trasformazioni da un tipo di dato (insieme dei suoi valori) ad un altro (sottinsieme), devono essere indicate esplicitamente con l operazione di cast oppure usando una funzione del linguaggio. Ad esempio Math.round(), trasforma un double in un long. In altri casi tale trasformazione
pag.21 può essere eseguita ad opera dall utente attraverso una trasformazione forzata con l uso di un type cast. Tali trasformazioni esplicite non sempre restituiscono un dato coerente, infatti se il numero iniziale non appartiene al sottinsieme di arrivo si commetterà un errore grossolano. La trasformazione di un dato appartenente ad un tipo origine a uno appartenente ad un insieme più ampio non necessita di alcuna trasformazione in quanto questa avviene automaticamente senza errori. Non ci sono problemi se, ad esempio, si assegna un dato int ad un long o ad un double. La tabella seguente mostra alcune operazioni di type cast possibili: Trasformazione con eventuale perdita di informazione (type cast obbligatorio) Trasformazioni automatiche senza perdita di informazione (type cast non necessario) Da double A float Da float A double A long Da long A int Da int A byte Da byte Da float A long Da long A float A int Da int Da long A int Da int A long A byte Da byte Da int A char Da byte A int A byte Da char Da byte Da char A char A byte
pag.22 4.E Esercizi di uso dell editor per la codifica in java 4.1 Codificare ed eseguire la soluzione java dell esercizio 3.1. 4.2 Codificare ed eseguire la soluzione java dell esercizio 3.2. 4.3 Codificare ed eseguire la soluzione java dell esercizio 3.3. 4.4 Codificare ed eseguire la soluzione java dell esercizio 3.4 realizzando anche il main program che invoca la funzione potenza. 4.5 Codificare ed eseguire la soluzione java dell esercizio 3.5 realizzando anche il main program che invoca la funzione. 4.6 Codificare ed eseguire la soluzione java dell esercizio 3.6 realizzando sia il main program che la funzione. 4.7 Codificare ed eseguire la soluzione java dell esercizio 3.7 realizzando anche il main program che invoca il metodo realizzato. 4.8 Codificare ed eseguire la soluzione java dell esercizio 3.8 realizzando anche il main program che invoca il metodo realizzato. 4.9 Si desidera realizzare un programma Java costituito dal main() che invoca tre metodi statici genera(), ordina(), stampa(), come dalla seguente scomposizione gerarchica: genera() main() ordina() stampa() - genera() deve costruire, con la funzione random(), le componenti di un vettore di dimensione massima dim=25 interi che assumano valori compresi tra 500 e 500; - ordina() ordina, con un metodo noto (es. bolla), il vettore e lo restituisce ordinato; - stampa() riceve un vettore (ordinato o disordinato) e lo stampa sul video. Richieste: a) realizzare il main() che invochi nell ordine, genera(), stampa(), ordina(), stampa() per mostrare a video il funzionamento del programma; b) realizzare i tre metodi indicati inserendo gli opportuni parametri che lo rendano indipendente dalle variabili del main().