appunti java 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. appunti java pag.16 4.1 Esempi risolti 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>: appunti java 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: appunti 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 appunti java Esecuzione con Run Application Dal menù <Build:> Scelgo <Run Application> e ottengo pag.19 appunti java 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 appunti java 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 Trasformazioni automatiche senza informazione (type cast obbligatorio) 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 A int Da long Da int A float Da long A int A byte Da int Da byte A long Da int A char A byte Da byte Da char A int Da byte Da char A char A byte appunti java 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().