PROGRAMMAZIONE CON JAVA
CAPITOLO 1.
INTRODUZIONE AI COMPUTER E JAVA
1.1 Concetti base computer
computer hardware
Il è un insieme di componenti hardware e software. Il termine indica la
macchina fisica. Un insieme di istruzioni che un computer deve seguire è detto programma. Il
software
termine indica invece, tutti i tipi di programmi utilizzati per fornire istruzioni a un
computer.
CPU processore,
La (Central Processing Unit, unità centrale di elaborazione), chiamata anche e
dispositivo interna che esegue le istruzioni di un programma. È in grado di eseguire solo istruzioni
semplici, come spostare i numeri o altri dati presenti una memoria e compiere alcune operazioni
aritmetiche di base.
memoria dati
La di un computer conservo i che computer deve elaborare i risultati dei calcoli
intermedi effettuati. Ci sono due tipi di memoria:
memoria principale
1. La conserva il programma che in esecuzione gran parte dei dati che il
programma stesso sta utilizzando. Le informazioni in questa memoria sono volatili, cioè sono
RAM
cancellate quando il computer viene spento. È il caso della (Random Access Memory,
memoria ad accesso casuale). È costituita da un lungo elenco di byte, ognuno con un proprio
indirizzo. Un byte contiene otto cifre, ciascuna delle quali può avere valore 0 oppure 1.
Queste cifre sono dette binarie e sono chiamate bit. Quando è compiuta la necessità di
memorizzare un dato che non può essere contenuto in singolo byte, utilizza baita adiacenti
che vengono considerati come un'unica area di memoria, dove l'indirizzo del primo byte e
viene utilizzato come indirizzo dell'intera aria.
memoria ausiliaria,
2. La o secondaria, è caratterizzato da dati che persistono anche a
computer spento. (es. hard disk, cd, flash drive, ecc..). Anche questa è suddivisa in byte, ma
sono raggruppati in unità più grandi dette file. Ciascun file ha un nome e gruppi di file possono
essere organizzati in directory (cartelle.
es. Quando si scriva un programma Java, lo si salva in un file, che tipicamente risiede nell’hard
disk del computer. Quando il programma verrà lanciato, il contenuto del file verrà copiato dalla
memoria secondaria quella principale. di un programma.
Ci sono due modi per pensare all'esecuzione (figura sotto).
Nel primo bisogna ignorare il riquadro tratteggiato. Ma
computer a due input: il programma stesso che
contiene le istruzioni che dovrai eseguire e i dati per il
programma, cioè le informazioni che programma dovrai
lavorare. L’output sono i risultati prodotti dal computer
e in seguito all'esecuzione delle istruzioni del
programma sui dati forniti in input.
Il secondo modo considera i dati come unico input del programma. Il computer il programma
sono considerati come un'unica unità. Ogni volta che si accende un computer, si sta già
eseguendo un programma, ovvero il sistema operativo (una specie di programma supervisore che
controlla il funzionamento del computer è nella sua interezza). Se si vuole eseguire un programma,
il sistema operativo recupera il programma(software) e lo avvia.
La maggior parte dei linguaggi di programmazione moderna è stata progettata per essere facile
linguaggi ad alto livello.
da utilizzare comprendere: (es. Java)
Il problema è che l'hardware del computer e non grado di comprendere direttamente linguaggio
ad alto livello, questo deve essere tradotto in un altro linguaggio comprensibile per il computer
linguaggio di basso livello).
(linguaggio macchina, Questa traduzione viene effettuata da un altro
programma, che in alcuni casi come Java, è chiamato compilatore e la traduzione viene chiamata
compilazione. Una volta compilato, è possibile eseguire il programma quante volte si vuole senza
doverlo ricompilare.
compilatore
Il quindi un software che traduce un programma scritto in linguaggio di alto livello e
linguaggio di basso livello.
In altri casi la traduzione viene fatta da interpreti: programmi che a differenza del compilatore
eseguono ogni singola porzione di codice subito dopo averla tradotta, invece di tradurre l'intero
programmata sola volta. L'esecuzione si alterna, quindi, alla traduzione e viene ripetuta ogni volta
che lo si esegue.
Il compilatore Java non traduce il programma nel linguaggio macchina specifico del del computer
bytecode.
utilizzato, ma lo traduce in un linguaggio ho detto È un linguaggio macchina di una
macchina virtuale (Java Vitual Machine).
Per eseguire un programma Java su un computer si utilizza il compilatore per tradurre programma
sorgente Java nel bytecode corrispondente e poi si utilizza la macchina virtuale Java del
computer specifico per tradurre ciascuna istruzione bytecode in linguaggio macchina.
Perché fare questo ulteriore passaggio e non scrivere compilatori che traducono direttamente il
portabilità,
codice da Java linguaggio macchina e il sistema specifico? Perché Donna Java la
cioè possibile eseguire quel programma su qualsiasi computer dotato di una macchina virtuale,
senza bisogno di ricompilarlo.
1.2 Concetti di programmazione
programmazione a oggetti (OOP),
Java è un linguaggio di una metodologia di programmazione
che considera il programma come costruito da oggetti, o istanze, che possono agire da soli o
anche interagire fra loro.
oggetto
Un è un'entità dinamica definito mediante una classe, generate distrutte nel corso
attributi.
dell'esecuzione del programma e ha diverse caratteristiche dette I valori degli attributi di
un oggetto costituiscono lo stato dell'oggetto stesso e le azioni che un oggetto può effettuare
sono dette comportamenti. Ciascun comportamento è definita da una porzione di codice detta
metodo e lo stato è determinato dal valore che assume l’attributo di quell’oggetto.
classe
Una definisce il tipo di dato di un oggetto, che è dato dal nome della sua classe e
rappresenta una sorta di stampo per definire gli oggetti di quella classe. Tutti gli oggetti di una
classe hanno gli stessi attributi e gli stessi metodi. Questo non vuol dire che tutti gli oggetti della
classe siano uguali, possono infatti trovarsi in uno stato differente cioè ogni attributo può
assumere valori diversi per ognuno degli attributi.
Un programma Java consiste di componenti quali: classi , interfacce, tipo enumerati …
package.
raggruppati in L'esecuzione del programma è basata sulla chiamata di funzioni dette e
stack
metodi. I blocchi di attivazioni dei metodi sono contenuti nello mentre gli oggetti si trova
heap.
nella struttura detta
I tre principi fondamentali della progettazione ad oggetti sono:
Incapsulamento:
1. viene spesso chiamato information hiding (“nascondere le informazioni)
perchè quando si produce un frammento di software occorre descriverlo in modo che gli altri
programmatori possano utilizzarlo e sorvolare su tutti i dettagli del suo funzionamento.
Polimorfismo:
2. cioè il nome di un metodo, usato come istruzione, può causare azioni differenti
a seconda degli oggetti che svolgono l’azione.
Ereditarietà:
3. È il modo di organizzare le classi. È possibile cioè definire una sola volta gli
attributi e comportamenti comuni applicare poi all'intera insieme di classe. Se si definisce una
classe generica si può utilizzare l'ereditarietà a posteriori per definire classi specializzate che
aggiungono e perfezionano alcuni dettagli della classe generica. Questo permette al
programmatore di evitare di ripetere le stesse istruzioni per ogni singola classe.
I oggetti possiedono comportamenti che sono definiti da metodi. I programmatori li definisce
specificando le istruzioni necessarie per compiere le azioni che devono essere eseguite.
algoritmo
Questo viene chiamato cioè un insieme di direttive atte a risolvere un problema che
devono essere espresso in un modo completo e preciso.
Una volta terminata la scrittura di un programma è necessario testarlo. Un errore in un programma
bug
viene comunemente chiamato (“baco”) e il processo di rimozione degli errori è chiamato the
debugging. Ci sono tre tipi di errori possibili:
- errore di sintassi: un errore grammaticale nel programma
- errore a run-time: che producono un messaggio di errore per esempio quando si divide in
avvertitamente un numero per zero.
- errore logico: alcune volte causa un messaggio d'errore, altre no. Un esempio è usare
l'operatore + al posto del - .
CAPITOLO 2.
CONCETTI DI BASE
2.1 Variabili
Le variabili sono utilizzati per memorizzare dati, una sorta di contenitore. Un qualsiasi dato
contenuti una variabile è chiamato valore. Questo può essere modificato durante l'esecuzione del
programma.
dichiarazione
La di una variabile costituita da: visibilità, tipo, nome variabile e volendo valore di
inizializzazione.
visibilità tipo nomeVariabilie = valoreInizializzazione;
Es. private int ore=0;
Se ho più variabili dello stesso tipo posso separarli tramite virgole.
private int ore=24, giorni=30, mesi, anni;
Dichiarazione di un oggetto:
tipoOggetto nomeOggetto = new nomeClasse(parametro1, par 2);
Scuola s= new Scuola(29845, “blu e verde”);
Dove Scuola rappresenta la classe e quindi il tipo dell’oggetto s che voglio creare.
Per crearlo chiamo un metodo speciale, il costruttore, che crea l’oggetto (vedremo piu avanti).
2.2 Tipi
Java possiede due tipi di dati principali: i tipi di classe e i tipi primitivi.
tipo di classe
Un è un tipo per i oggetti di una classe, specifica il modo in cui sono memorizzati i
valori del suo tipo e definisce le possibili operazioni che possono essere compiuti su di essi. Un
tipo classe ha lo stesso nome della classe.
tipo primitivo
Le variabili di sono più semplice degli oggetti, perché questi in crudo non sia
mezzo tizia valori. Un valore di tipo primitivo è un valore non dei componibili, come singolo
numero una singola lettera. Tutti i nomi dei tipi primitivi hanno iniziale minuscola.
tipi primitivi
I sono:
Tipi interi con segno:
- byte : 1 byte di memoria occupata. ( -128 a 127)
- short : 2 byte di memoria occupata. ( -32768 a 32767)
- int : 3 byte di memoria occupata. ( da -2 miliardi a + 2 miliardi)
- long : 4 byte di memoria occupata.
Se si lavora con valori che non possono mai diventare negativi e serve assolutamente un byte
aggiuntivo, si possono utilizzare metodi che interpretano come se fossero senza segno. Quindi
invece di avere un valore b byte pari all'intervallo -128 + 127, posso avere da 0 a 255.
Un esempio è il metodo .
toUnsignedInt (b)
Tipi virgola mobile:
- float : 4 byte di memoria occupata. (6 cifre decimali significative)
- double : 8 byte di memoria occupata. (15 cifre decimali significative)
N.B. Il separatore decimale nella notazione americana è il punto. NaN
Per verificare, ad esempio risultato di una divisione, si può utilizzare (not a number).
Tutti i valori in NaN, ovvero non numeri, sono considerati distinti uno dall'altro. Non è possibile
effettuare il test per verificare se x è NaN, ma occorre chiamare il metodo
if (x==Double.NaN)
specifico if (Double.isNaN(x)).
- char : carattere racchiuso fa apici! Es. ‘J’ oppure \n =nuova riga, \r =ritorno a capo,
\t= tabulazione, \b = backspace ;
- boolean: ha due valori false oppure true.
Il nome può essere composto da lettere, cifre e il carattere underscore . Con la regola che il primo
carattere non può essere però una cifra.
Nessun nome può contenere spazi o altri caratteri come il punto l’asterisco.
Java è case sensitive, ovvero maiuscole minuscole sono considerate differenti.
Oltre alla dichiarazione di una variabile, c'è poi l’assegnamento. Esso può essere fatto in
concomitanza alla dichiarazione oppure successivamente.
nomeVariabile = espressione;
Ci sono delle regole di assegnamento, cioè un valore può essere assegnato da qualsiasi variabile
il cui tipo compare alla destra del tipo del valore nell'elenco seguente:
byte —> short—> int—> long—> float—> double
Per assegnare un tipo di valore di tipo double a un variabile int occorre cambiare il tipo di variabile
utilizzando una conversione (cast): (tipo)espressione;
cast esplicito: int i=44; float f=i;
cast implicito: f=(float) 44;
Se si passa da un tipo double a uno int il valore non viene arrotondato ma la, viene scartata.
Quest'operazione viene detta troncamento.
2.3 Costanti
Non devono essere necessariamente numeriche, possono essere anche di tipo char o boolean.
Il loro valore non può cambiare, ma possono essere utilizzati un'istruzione di assegnamento per
cambiare il valore di una variabile.
public static final tipo NOMEVARIABILE = valore;
2.4 Operatori aritmetici e aritmetica di base x += 10;
È uguale a :
x = x + 10;
n*(++m) = n*(m+1)=3*(4+1)=15
n*(m++) = n*m=12 e poi m=m+1
+/- = addizione/sottrazione. * / = moltiplicazione e divisione.
%= resto di una divisione. ++/ - - =incremento/decremento di una unità
2.5 Stringhe String
Valore di tipo è una stringa, sequenza di caratteri, racchiusa tra le virgolette, non
modificabile. Es. “Hello world!”
private String nomeVariabile = “testo”;
La lunghezza è variabile e può contenere anche zero caratteri. Le stringhe però una volta create
non possono essere modificate. di concatenamento.
Due stringhe, ma non solo, possono essere unite tramite l'operazione
Può essere effettuata tramite l'operatore concatenamento + : si possono concatenare stringhe
diverse, stringhe e variabili. Si viene a creare ogni volta una nuova stringa.
int age=42;
String frase = “Maria ha : “ + 42 + “ anni.”;
Se si vogliono usare dei caratteri speciali come “ , si deve mettere il backlash \ davanti.
“Il termine \”Java\” indica un nome”
Per combinare insieme diverse stringhe separandole con un delimitatore, uso il metodo join:
String names = String.join(“, ”, “Peter”, “Paul”, “mary”);
// “Peter, Paul, Mary” StringBuilder,
Volendo si può anche creare una stringa tramite un oggetto che a differenza di
String crea una stringa modificabile ed è consigliata quando uno deve concatenare un gran
numero di stringhe.
public StringBuffer (); es.StringBuilder builder = new StringBuilder();
crea un oggetto vuoto StringBuffer di lunghezza iniziale 16
public StringBuffer (int lenght); es. StringBuilder builder = new
StringBuilder(32);
crea un oggetto vuoto StringBuffer di lunghezza iniziale 32
public StringBuffer (String str)
crea un oggetto StringBuffer di contenuto iniziale str
public StringBuffer append (int/double/object i);
Concatena la rappresentazione testuale dell’argomento al proprio contenuto
x= new StringBuffer().append(“a”).append(4).append(‘c’).toString();
Crea un oggetto di classe StringBuffer vuoto e ci concatena a, 4, c. Infine restituisce la stringa
corrispondente.
Sarebbe come scrivere: x= “a” + 4 + ‘c’;
Confronto tra stringhe
Per verificare se due valori di tipo primitivo, di esempio numeri, sono uguali, ti utilizza l'operatore
di uguaglianza == .
Questo non è possibile applicarlo agli oggetti, occorre utilizzare il metodo equals.
è uguale a
stringa1.equals(stringa2) stringa2.equals(stringa1)
public boolean equals (Object nomeoggetto);
Restituisce true se le due stringhe sono uguali.
Se invece mi serve confrontare due stringhe per verificare quale preceda l'altra in ordine
alfabetico, utilizzo compareTo. s1.compareTo(s2)
public int compareTo(String anotherString)
Restituisce 0 se sono uguali, (-1) se s1 precede s2, (+1) se s1 segue s2.
Posso quindi anche porre la condizione s1.compareTo(s2) == 0 (condizione verifica uguaglianza).
Occorre assicurarsi però prima che tutte le lettere siano dello stesso tipo (minuscole o maiuscole)
prima di utilizzare il metodo per confrontarle.
2.6 Input/Output
Output
Per utilizzare l’output, basta scrivere:
System.out.println(“testo da visualizzare” + eventualeconcatenazione);
Per avere più istruzioni di output su una stessa linee, devo utilizzare e non
System.out.print
println. In questo modo finché no riuso println, rimane sulla stessa linea.
Es System.out.print(“Inserisci”); Inserisci un intero compreso tra
System.out.print(“un intero”); 1 e 99
System.out.println(“compreso tra”);
System.out.println(“1 e 99”);
L’unica differenza tra i due è quindi che println dopo l’utilizzo crea una nuova riga di testo.
output formattato
Per avere un uso printf
System.out.printf(“%8.2f” , 1000.0 / 3.0); 333.33
indica un numero in virgola mobile (f) con una larghezza di 8 cifre e una precisione di 2
%8.2f
cifre dopo la virgola. (la virgola conta come carattere).
System.out.printf(“Ciao, %s. Il prox anno avrai %d anni.\n”, name, age);
Ogni specifica attore di formato che inizia con un carattere percentuale, viene sostituito con
l'argomento corrispondente.
System.out.printf(“testo da visualizzare e %parametri” , arg1, arg2);
1 char di lunghezza 2
Es. %2c = 1 int a 5 cifre
%5d = 1 float con due cifre dopo la virgola
%1.2f = 1 stringa lunga 10
%10s =
Input da tastiera.
Per leggere l'input inserito da tastiera occorre utilizzare un oggetto della classe scanner.
Scanner nomeOggettoScanner = new Scanner (System.in);
Dopo aver definito un oggetto Scanner, per leggere i valori alla tastiera si possono utilizzare i
metodi di classe. Per ogni tipo di dato c'è un metodo preciso.
nomeOggettoScanner.nextInt();
Legge restituisce un valore digi
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Programmazione - programmazione Java 1
-
Programmazione JAVA
-
Java - Basi programmazione OO
-
JAVA: programmazione a oggetti (OOP)