Basi di programmazione Java
Martedì 4 ottobre 2022
Trasferimento dati in LOAD o STORAGE.
Operazioni logiche.
Salti (alterazione del flusso).
Assembler
Codici mnemonici = parole che rimandano ad una istruzione.
Tradurre le parole della programmazione a numeri che eseguono le operazioni.
Una volta si programmava a numeri.
Codice Assembly.
Assemblatore codice eseguibile in formato macchina.
Problema: ogni CPU ha il suo Assembler e bisogna programmare in codice assembly che cambia per ogni CPU.
Linguaggi di programmazione
- Fortran.
- Basic.
- Cobol.
- Pascal.
- C++.
- Java.
Molto facile fare errori di sintassi per avere un linguaggio unico superiore alla CPU.
Compilatore: legge il programma e lo traduce in linguaggio macchina.
Si accorge di errori di sintassi.
Errori
- Errori di sintassi.
- Errori di struttura.
Cosa significa programmare
Risolvere un problema —> PROGRAMMA.
“Descrizione testuale dell'algoritmo risolutivo”.
Esecuzione del programma
Traduzione in programma gradito ad un linguaggio.
Rappresentazione con flow chart o con pseudo codici.
import java.util.Scanner
public class MassimoFraTreNumeri {
public static void main(String []) {
Scanner tastiera = new Scanner (System.in);
int pr_num, sec_num, ter_num, massimo;
System.out.print("inserisci il primo numero:");
pr_num = tastiera.nextInt();
}
...
print ln = new line.
Basi di programmazione Java
Trasferimento dati - in LOAD o STORE.
Operazioni logiche: registri.
Salti (alterazione del flusso).
Assembler: assemblatore.
Codici mnemonici: parole che rimandano ad una istruzione.
Traduzione del problema della programmazione ai numeri che eseguono operazioni.
Una volta si programmava a numeri.
Codice Assembly.
Problema: ogni CPU ha il suo Assembler e bisogna programmare ogni codice assembly che cambia per ogni CPU.
Linguaggi di programmazione
- Fortran.
- Basic.
- Cobol.
- Pascal.
- C++.
- Java.
Errori
- Errori di sintassi.
- Errori di struttura.
Cosa significa programmare
Risolvere un problema -> PROGRAMMA.
Esecuzione del programma
Import java.util.Scanner
public class MassimoFraTreNumeri {
Public static void main(String []) {
Scanner tastiera = new Scanner (System.in);
int pr.num, sec.num, ter.num, massimo;
System.out.print("inserisci il primo numero");
pr.num = tastiera.nextInt();
}
Ripeto per sec_num e ter_num.
massimo = fir_num
if (sec_num > massimo) massimo = sec_num
if (ter_num > massimo) massimo = ter_num
System.out.println("massimo=" + massimo)
} // chiusura main
} // chiusura classe
Paradigma imperativo e ad oggetti
Il paradigma imperativo vede un programma costituito da programmi da eseguire in sequenza dall’inizio alla fine, fatte salve le istruzioni condizionali ed i cicli.
Questo modo di procedere somiglia alla modalità di lavoro di un microprocessore.
Paradigma = regola / insieme di regole per rendere il programma + simile alla realtà si programma ad oggetti.
Nel paradigma ad oggetti esistono le classi, grazie alle quali si possono creare gli oggetti.
Tutti gli oggetti creati con la stessa classe hanno: gli stessi attributi (ma con valori diversi) e gli stessi metodi.
Attributi: variabili che con il loro valore definiscono lo stato di un oggetto.
Metodi: funzioni che definiscono le possibili operatività di oggetti.
Programmazione ad oggetti
Classe:
- Ha un nome.
- Indica attributi degli oggetti che contiene.
- Contiene dei metodi.
Costruttore vuoto: setta gli attributi ai valori di default.
Costruttore non vuoto: definisce delle variabili con dei parametri.
Metodi SET (parametri): varia valori dei parametri e quindi degli attributi.
Metodi GET(): legge e restituisce il valore degli attributi.
// importazione librerie
// intestazione classe
// dichiarazione attributi
// costruttore vuoto
b = 0.0
h = 0.0
// costruttore non vuoto — se base > 0 definisce
// — Metodo definito
// poi lo richiamiamo quando serve
// Definisco metodo Area()
// Definisco metodo perimetro()
"Main" è la mano che usa la "classe" (stampo) per eseguire la sua funzione (recupera oggetti su quella forma).
Rettangolo r = new Rettangolo (base, altezza)
Costruttore prende attributi e li mette o definisce Rettangolo.
Attributi = entrambi variabili.
JVM non segnala l'overflow => devo usare i valori max e min delle classi (predentivi) per controllare che il valore non vada in overflow.
Se lavoro in virgola mobile e vado troppo alto mi viene fuori +∞.
Fondamenti di informatica pagina 14
Java
Progettato per Internet - Buona portabilità.
Creato da Sun - Poi venduto a Oracle.
1991.
Pro:
- Semplice della concorrenza.
- Consente di compilare un eseguibile per la Java virtual machine e non l'eseguibile per la CPU.
- Ha tante librerie standard.
Java semplice ma per l'inizio è complicato scrivere cose anche facili.
JDK - Java Development Kit.
Fasi programmazione Java
- Scrittura codice sorgente - si usa un editor di testo.
- Compilazione del codice sorgente - codice eseguibile in linguaggio macchina.
- Esecuzione del programma.
Oggi si usano IDE (Integrated Development Environment).
Interfaccia che aiuta lo sviluppo di programmi.
Colori concessi.
Pulsante play non consentito.
Il codice eseguibile (byte code) è eseguibile per la Java Virtual Machine (JVM).
Conversione.
cmd > javac nome.java genera nome.class
Esecuzione programma.
cmd > java nome
Da bilanciare.
Portabilità - Efficienza.
Java è intermedio in ambiente e caratteristiche.
Se il programma non compila - prova ad esamene nulla.
Le classi
La fabbrica di oggetti.
Perché Java è un linguaggio OOP = object-oriented programming.
Parole chiavi
Identificano una classe come privata o pubblica.
Parole chiavi.
Identificano una classe come privata o pubblica.
Definiscono sinteticamente le funzioni in Java.
Per ogni programma max 1 classe public.
Metodo
Le sequenze di istruzioni o enunciati che descrivono come eseguire un certo compito.
Devono essere per forza dentro una classe.
Ogni programma ha almeno un metodo Main.
Il programma inizia da qui:
Seguito da parentesi che introducono un parametro (se richiesto dal metodo).
Senza virgola tra un parametro e l'altro.
Commenti
Per annotarsi cose nel programma:
Linguaggio tradizionale.
Il programma li salta.
"//" essenziale per gli enunciati (non nei commenti).
Metterlo il più possibile anche se si usa tempo per ricordarsi cosa si è fatto.
Output
Per avviare sul terminale o su altre interfacce e dipende dai comandi che si utilizzano.
Molte cose che programmiamo esistono già in librerie Java, ma noi dobbiamo imparare a programmare.
Errori
Facili da individuare = errori di sintassi/compilazione, l'editor di testo li individua.
Difficili da individuare = errori logici di esecuzione, l'editor di testo non li individua.
Trovarli è una delle skill importanti del programmatore.
A volte usiamo programmi specifici per trovarli (debugger) per risolvere bug.
Noi non li possiamo usare in questo corso.
Indentazione
Per rendere meglio e controllare gli errori del programma.
Variabili
Spazi di memoria identificati da un nome:
Si definisce con tipo nome.
Es: int id;
Definire una variabile.
Assegnare un valore ad una variabile: es: String outMessage.
Variabili / metodi iniziamo con lettera minuscola in appendice C.
Classi: iniziano con lettera maiuscola.
- Regole non compatibili che descrivono le funzioni ess: euro X euro.
- Il nome deve iniziare con una lettera e non deve avere parole riservate (tutti i caratteri riservati v. fine testo C).
- Ammettono underscore, numeri e iniziano con lettera minuscola.
...
L'identificatore → inizia con lettera minuscola.
snake_case → total_euro.
camelCase → totaleEuro.
Es. totale euro totaleEuro.
Calcola il valore a DX dell'uguale e lo assegna alla variabile a SX.
Definizione int lit; // valore precedentemente definito.
Assegnazione int lit = 2000.
Tipi numerici
Int numeri → non posso mettere virgola ma occupano meno spazio e il calcolatore più velocemente.
Float/Double numeri in virgola mobile.
Oggetti → iniziano con maiuscole.
Es. String greeting = "Hello, World!"
Classi → contenitore di metodi.
Fabbricano oggetti.
Metodi → usano metodi dei parametri che ho definito.
Esempi parametri () espliciti → parametri () → Definizione di un metodo → FIRMA.
public void println(String output)
Insieme di metodi → interfaccia pubblica.
public void replace(String target, String replacement)
Parametri.
Espliciti → scritti tra parentesi.
Impliciti → parametri vuoti ().
Variabili oggetto
Oggetti complessi → valore.
Crea un oggetto e lo salvo in una variabile, salvo un riferimento sulla sua posizione nella memoria.
Definire variabili oggetto.
Name_Classe Name_Oggetto;
Classe di allocazione Name Oggetto che abbiamo deciso.
Creazione oggetto.
New Name (classe o parametro)
//ho creato un oggetto -> sui riferimenti
//Devo assegnare un suo riferimento ad una variabile oggetto
Name_Classe nomevar = .......;
Con int:
Def a = 10
Def b = a
b = 5
// ho modificato b ma non a
Con oggetti:
Def rettangolo a
Def rettangolo b = rettangolo a
valore rettangolo b
rect. ho modificato rettangolo a e [=] b
Lavoro sull'elemento.
Lavoro sui riferimenti dello stesso oggetto.
Devo prima creare 2 oggetti distinti e dare al secondo i dati dal primo.
Costruttore
Mi permette di creare un oggetto (non si può usare per altro).
Collaudare il proprio codice
Non bisogna mai scrivere tutto il codice e compilarlo solo alla fine perché facciamo sempre tanti errori.
Testare subito il codice.
Abbiamo una infinità di classi che possiamo usare per fare cose diverse (classi che si trovano nelle librerie standard).
Per usare una classe devo importarne il pacchetto.
import Name_Pacchetto. Name_Classe;
Input numeri/caratteri
int numero intero 4 byte
byte -128 < x < 127 1 byte
short numero corto 2 byte
long numero lungo 8 byte
double Doppia precisione (x64 bit) 8 byte
float singola precisione (x32 bit) 4 byte
char x caratteri secondo Unicode 2 byte
boolean 2 valori logici (true/false) 1 byte
char x caratteri secondo Unicode 2 byte
boolean x valori logici (true/false) 1 byte
Operazioni aritmetiche
+ somma
- sottrazione
* prodotto
divisione
New operatore % resto.
2+b/2 ≠ (a+b)/2
Scartati resto se i numeri non sono definiti: int double.
7/2 = 1
7.0/4.0 = 1.75
7/2.0 = 3.5
7.0/4 = 1.75
7%4 = 3
Operazioni aritmetiche ad oggetti
*/+- non valgono se devo sommare/moltiplicare oggetti.
Devo usare operatori matematici implementati da una libreria.
a.moltipli(b) = 6
oggetto1 (vale 2)
oggetto2 (vale 3)
Costanti
Do un nome ad una costante → + leggibilità.
Se cambio basta cambiare 1 sola volta.
Final variabile non modificabile.
Serve per quando si lavora in team e non si vuole che altri modificano una variabile.
Come scrivere le costanti: NOME_COSTANTE.
Tutto maiuscolo.
Libreria Math
java.math.*
import java.math.*
Permette di fare operazioni + difficili (es potenza/radice).
Simboli matematici
t ++ t + 1
t -- t - 1
t+==somma e assegna il g valore che sta considerato
b=7
Metodo statico
println agisce su un oggetto.
Agisce su un variabile.
Math.round agisce sulla classe Math.
Dati, stringa
string = classe ...