Estratto del documento

Programmazione con Java

Capitolo 1. Introduzione ai computer e Java

1.1 Concetti base computer

Computer hardware. Il computer è un insieme di componenti hardware e software. Il termine hardware indica la macchina fisica. Un insieme di istruzioni che un computer deve seguire è detto programma. Il termine software indica invece, tutti i tipi di programmi utilizzati per fornire istruzioni a un computer.

La CPU (Central Processing Unit, unità centrale di elaborazione), chiamata anche processore, è il dispositivo interno 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.

La memoria di un computer conserva i dati che computer deve elaborare i risultati dei calcoli intermedi effettuati. Ci sono due tipi di memoria:

  • La memoria principale 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 cancellate quando il computer viene spento. È il caso della RAM (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 byte adiacenti che vengono considerati come un'unica area di memoria, dove l'indirizzo del primo byte viene utilizzato come indirizzo dell'intera area.
  • La memoria ausiliaria, 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.

Ci sono due modi per pensare all'esecuzione di un programma. (figura sotto).

Nel primo bisogna ignorare il riquadro tratteggiato. Ma computer ha 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 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 da utilizzare comprendere: linguaggi ad alto livello. (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 macchina, linguaggio di basso livello). 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.

Il compilatore 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 programma una 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 utilizzato, ma lo traduce in un linguaggio ho detto bytecode. È 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 codice da Java linguaggio macchina e il sistema specifico? Perché Donna Java la portabilità, cioè possibile eseguire quel programma su qualsiasi computer dotato di una macchina virtuale, senza bisogno di ricompilarlo.

1.2 Concetti di programmazione

Java è un linguaggio di programmazione a oggetti (OOP), una metodologia di programmazione che considera il programma come costruito da oggetti, o istanze, che possono agire da soli o anche interagire fra loro.

Un oggetto è un'entità dinamica definito mediante una classe, generate distrutte nel corso dell'esecuzione del programma e ha diverse caratteristiche dette attributi. 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.

Una classe 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 … raggruppati in package. L'esecuzione del programma è basata sulla chiamata di funzioni dette e metodi. I blocchi di attivazioni dei metodi sono contenuti nello stack mentre gli oggetti si trova nella struttura detta heap.

I tre principi fondamentali della progettazione ad oggetti sono:

  • Incapsulamento: 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: cioè il nome di un metodo, usato come istruzione, può causare azioni differenti a seconda degli oggetti che svolgono l’azione.
  • Ereditarietà: È 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. Questo viene chiamato algoritmo 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 viene comunemente chiamato bug (“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 inavvertitamente 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.

La dichiarazione 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 più avanti).

2.2 Tipi

Java possiede due tipi di dati principali: i tipi di classe e i tipi primitivi.

Un tipo di classe è 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.

Le variabili di tipo primitivo sono più semplice degli oggetti, perché questi in crudo non siamezzo 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.

I tipi primitivi 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 specifico if (Double.isNaN(x)).

if (x==Double.NaN)

  • 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

Valore di tipo String è 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.

Due stringhe, ma non solo, possono essere unite tramite l'operazione di concatenamento.

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”

Volendo si può anche creare una stringa tramite un oggetto StringBuilder, 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.

stringa1.equals(stringa2) è uguale a 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 System.out.print e non 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.

Per avere un output formattato uso printf

System.out.printf(“%8.2f” , 1000.0 / 3.0); 333.33

%8.2f indica un numero in virgola mobile (f) con una larghezza di 8 cifre e una precisione di 2 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);

  • %2c = 1 char di lunghezza 2
  • %5d = 1 int a 5 cifre
  • %1.2f = 1 float con due cifre dopo la virgola
  • %10s = 1 stringa lunga 10

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

Anteprima
Vedrai una selezione di 20 pagine su 109
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 1 Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 2
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 6
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 11
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 16
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 21
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 26
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 31
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 36
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 41
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 46
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 51
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 56
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 61
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 66
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 71
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 76
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 81
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 86
Anteprima di 20 pagg. su 109.
Scarica il documento per vederlo tutto.
Programmazione a Oggetti [Java], Base e Avanzata - Ing. Informatica, Appunti di Programmazione Java Pag. 91
1 su 109
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Auxiele18 di informazioni apprese con la frequenza delle lezioni di Programmazione ad oggetti - Java e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Torino o del prof Bruno Giorgio.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community