










Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Intero programma di studio per Fondamenti di Informatica, con Java come linguaggio di programmazione. Spiegazione di classi, variabili, oggetti, array, arraylist e algoritmi.
Tipologia: Appunti
1 / 18
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!











I programmi Java contengono istruzioni macchina per Java Virtual Machine ( JVM ), eseguite da diversi tipi di CPU. JVM è una CPU ideale che legge e decodifica la sequenza di numeri, per poi eseguire il comando. JVM è una sequenza di istruzioni codificata con numeri che si può presentare così:
È difficile il linguaggio macchina, perciò si usa il linguaggio di programmazione ad alto livello , come, ad esempio, Java. Per farlo, si usa un compilatore , che traduce il linguaggio ad alto livello in codice macchina.
Java nasce nel 1995 e viene usato per molti scopi, tra i quali i siti web.
Errori frequenti: Errori di compilazione: errori di battitura/ sintassi Errori di esecuzione: errori logici; il programmatore non capisce cos’ha fatto il programma Attenzione a: main, errori di ortografia, ; , parità di parentesi, lettere maiuscole/ minuscole, file system. Algoritmo : sequenza di passi per risolvere un compito che deve essere: Non ambiguo Eseguibile Deve portare a un certo risultato Pseudocodice : è una descrizione informale di un algoritmo. Descrive come cambia un valore Descrive decisioni o ripetizioni Indica i risultati
Tipo : definisce un insieme di valori e le operazioni che si possono fare a tali valori.
Esempio: 13 ha tipo int “Hello, World” ha tipo String (virgolette) I tipi numerici sono tipi primitivi int: numeri interi, positivi e negativi, compreso lo 0 double: numeri con la virgola (2.3; 3.0), esponenziali (1E6 = 1x10 6 ), esponenti negativi (2.96E-2 = 2.96x10 -2^ = 0.0296) Si accettano operazioni + - * /
Variabile : è uno strumento che serve a memorizzare un valore da usare più tardi. È una porzione della memoria del computer caratterizzata da un tipo, un nome e un valore.
Dichiarare una variabile:
Tipo Nome della variabile = Valore String greeting = “Hello, World!”; PrintStream printer = System.out; int width = 13;
Operatore di assegnamento : usato per cambiare il valore della variabile già dichiarata.
int width= 10; dichiarazione di variabile/ inizializzazione. width= 20; assegnamento. Non scrivo il tipo e posso farlo quante volte voglio.
Documentazione API API = Application Programming Interface: interfaccia per la programmazione di applicazioni. Liste di classi e metodi nella libreria Java. Utilizzata da programmatori di sistema.
La documentazione dispone di più classi organizzate in pacchetti , nei quali descrive classi e metodi. Ogni pacchetto raggruppa classi di una stessa tipologia.
Utilizzare documentazione: import nome_pacchetto.nome_classe import = serve a importare classi della libreria.
Variabile oggetto : variabili che hanno come tipo una classe. Non memorizzano l’oggetto ma un riferimento ad esso, cioè la posizione dell’oggetto nella memoria. Variabile numerica : memorizza numeri.
Es: Rectangle box = new Rectangle(); la variabile box fa riferimento all’oggetto Rectangle Rectangle box2 = box; la variabile box2 fa riferimento al medesimo oggetto di box
Variabile d’istanza/esemplare : memorizza i dati di un oggetto della classe. Ogni oggetto di una classe ha le sue variabili d’istanza. Vi accede solo chi usa i metodi di quella classe. Istanza di una classe : oggetto della classe. Dichiarazione della classe : specifica le variabili d’istanza. Es: public class Counter intestazione della classe private int value dichiarazione di variabile d’istanza
private specificatore d’accesso, tipico nelle variabili d’istanza int tipo value nome della variabile Incapsulamento: nasconde i dettagli implementativi. Permette a un programmatore qualunque di usare una classe senza conoscere il modo in cui sono implementati i metodi. È possibile anche trovare gli errori con più facilità.
Progettare l’interfaccia pubblica di una classe
BankAccount: classe conto bancario.
Metodi:
Descrivere l’intestazione del metodo :
Costruttori : inizializzano le variabili d’istanza e danno loro un valore iniziale
Descrivere la dichiarazione del costruttore :
Realizzare la classe sviluppando metodi e costruttori:
Classe tester: classe con metodo main che contiene istruzioni per testare un’altra classe.
% indica il resto della divisione 7%4 = 3 Altri metodi della classe Math:
Cast : converte un valore in un altro tipo diverso. Es: double balance = total + tax; int dollars = ( int ) balance;
Next: legge un numero dal terminale fino a quando non trova uno spazio vuoto. Ricorda: se invoco next.Int() o nextDouble() devo poi indicare nextLine() a vuoto.
Una stringa è una sequenza di caratteri. Le stringhe sono oggetti della classe String. Una letterale stringa è una sequenza di caratteri inclusi nelle “ “. Metodi della classe String
if fa sì che un programma possa eseguire diverse funzioni a seconda di differenti azioni. else altrimenti Le istruzioni sono esclusive, cioè non vengono eseguite entrambe.
Operatori relazionali: da usare nelle condizioni.
= < >= == !=
if (Math.abs(x - y) <= EPSILON)
0 significa che String1 viene dopo di String2 nell’ordine alfabetico; ==0 significa che String1 = String2.
== indica un’identità, ovvero due oggetti coincidono (rimandano alla stessa cosa). Non lo uso mai con le stringhe: per esse uso sempre equals o compareTo.
null : è un riferimento che si riferisce a nessun oggetto, cioè la variabile non è stata assegnata a nulla (cassetto vuoto). Ricorda: null non è la stessa cosa di una stringa vuota!
Alternative multiple: sequenza di confronti in successione. If (a) { else if (b) { } else
} else
Rami intrecciati: sequenze dentro al corpo di un if If (a) { if (b) { } else } else
entrambi appartengono al tipo boolean, perciò non sono numeri né oggetti di una classe. Metodi predicativi : metodi che restituiscono un valore booleano. Operatori booleani && and; || or;! not; if(frozen) equivale a scrivere if(frozen==true) non fare così! if(!frozen) equivale a scrivere if(frozen==false)
while
int i = inizio;
while (i<=fine) {… i++;
}
for
for(int i=inizio; i<=fine; i++)
{… }
for(inizializzazione; condizione; aggiornamento) {… }
NB: for(i=a; i<b; i++) in questo caso il ciclo viene eseguito b – a volte (b-a+1 se fosse stato i<= b)
Calcolare un totale : calcola la somma di alcuni dati ricevuti in ingresso. Deve essere inizializzata a 0.
double total = 0; while (in. hasnextDouble ()) { double input = in.nextDouble(); total = total + input; }
Contare eventi: voglio sapere quanti valori soddisfano una particolare condizione, ad esempio quante maiuscole ho in una stringa. Uso un contatore, ovvero una variabile inizializzata a zero e incrementata ogni volta che la condizione è soddisfatta.
int upperCaseLetters = 0; for(int i = 0; i <=str.length(); i++) { char ch = str.charAt(i); if(Character. isUpperCase (ch)) upperCaseLetters++; }
Valori sentinella: metodo utilizzato per segnalare la fine di un insieme di dati. Il valore sentinella è un valore che non fa parte dell’insieme dei dati validi.
System.out.print(“Enter value, Q to quit”); String input = in.next (); if (input.equalsIgnoreCase(“Q”)) abbiamo finito else
double x = Double.parseDouble(input); }
Ciclo e mezzo : ciclo in cui la condizione di terminazione viene valutata a metà del ciclo. Una variabile booleana controlla il ciclo. Esempio di ciclo e mezzo :
boolean a = false; while (!a) { String input = in.next(); if(input.equalsIgnoreCase(“Q”)) a= true; else {…} }
Soluzione alternativa:
while(!(input = in.next())equalsIgnoreCase(“Q”)) { elabora il dato}
CICLI annidati: cicli il cui corpo è un altro ciclo (il ciclo più interno è annidato nel ciclo più esterno)
Numeri random e simulazioni : uso la classe random per generare numeri pseudocasuali.
Random generatore = new Random(); int d = 1+ generatore.nextInt(6);
Array : sequenza fissa di valori dello stesso tipo.
double[ ] sequenza = new double [10];
Il tipo dell’array è sempre seguito dalle [ ]. Il valore iniziale inizializzato dipende dal tipo dell’array (per int è 0, per boolean è false, per un riferimento a un oggetto è null…)
Posso usare il valore memorizzato in una posizione e stamparlo: System.out.println(“Valore di x in posizione 2: + posizione[2]);
La lunghezza degli array non è un metodo, quindi per sapere che lunghezza ha uso sequenza.length. Il range va da 0 a length-1.
Modi di presentazione di array:
double[ ] valori = …; double somma = 0;
for(double elemento : valori) leggo per ogni elemento in valori { somma = somma + elemento; }
Lunghezza dell’Array = numero massimo di elementi nell’Array. Solitamente l’Array è parzialmente riempito. C’è bisogno di una variabile che tenga traccia della lunghezza effettiva (taglia corrente). finali int VALUES_LENGTH = 100; double[ ] values = new double[VALUES_LENGTH]; int valuesSize = 0; values[valuesSize] = x; valuesSize++;
Copiare un array (referenza) Copiare creando una nuova referenza allo stesso array: double[ ] value = new double[6]; double[ ] price = value; Copiare un array (2 array distinti) Uso il metodo copyOf: double[ ] price = Arrays.copyOf(value, value.length);
Rimuovere Aggiungere ArrayList remove add Non ordinato
Cambio la valuesSize. Voglio rimuovere l’elemento in posizione pos. Prendo l’ultimo elemento e lo sposto in posizione pos. Prendo l’ultimo elemento e lo sposto in posizione pos. Poi decremento la valuesSize. Values[pos] = values[valuesSize-1] valuesSize--;
Inserisco l’elemento alla fine, incrementando la valuesSize. if(valuesSize<values.length) { values[valuesSize]=newElement; valuesSize++; }
Array
ordinato Muovo tutti gli elementi che seguono quello che voglio rimuovere scalandoli di un posto. Poi decremento la valuesSize. for(int i =pos; i<valuesSize-1;i++) { values[i]=values[i+1]; } valuesSize--;
Sposto in Avanti quelli che seguono, incremento la valuesSize. if(valuesSize<values.length) { for(int i=valuesSize; i>pos; i--) { values[i]=values[i-1]; } values[pos]=newElement; valuesSize++; }
Leggere un Array e ingrandirlo (Arrays.copyOf)
leggere una sequenza di numeri particolarmente lunga senza andare fuori spazio:
int valuesSize = 0; while(in.hasNextDouble()) { if(valuesSize == values.length) values = Arrays.copyOf (values, 2*values.length); values[valuesSize]=in.nextDouble(); valuesSize++; }
Ricerca lineare : (o ricerca sequenziale). Esamina tutti i valori in un array fino a quando non trova l’elemento con nome che ho richiesto o quando raggiunge la fine.
public class LinearSearcher
{
public int search(int v) {
for(int i=0; i<a.length; i++) {
if (a[i]==v) return i; }
this.name=name;
}
Tante classi sono organizzate in modo gerarchico. Le classi che rappresentano concetti più generali sono in alto, quelle più specifiche sono in basso. Esistono quindi superclassi e sottoclassi. Le proprietà comuni/generali di una gerarchia di classi vengono raccolte in una superclasse. Nelle sottoclassi trovo invece proprietà più specializzate: esse ereditano i metodi delle loro superclassi.
Una sottoclasse possiede tutte le variabili d’istanza dichiarate nella superclasse; naturalmente non può fare accesso alle variabili private della superclasse. Ogni variabile nuova dichiarata in una sottoclasse è, invece, presente soltanto in quella sottoclasse.
L’ereditarietà è un meccanismo per cui estendo delle classi aggiungendoci metodi e variabili d’istanza.
Incapsulamento: invoco un metodo invece di aggiornare la variabile privata della superclasse.
La parola riservata extends caratterizza l’ereditarietà:
public class Sottoclasse extends Superclasse { variabili d’istanza metodi }
Sovrascrivere metodi: un metodo di una sottoclasse sovrascrive un metodo della superclasse se ha lo stesso nome e gli stessi tipi del parametro. Quando si applica tale metodo a un esemplare della sottoclasse, viene eseguita la nuova realizzazione del metodo, invece di quella originale. Per modificare una variabile d’istanza privata di una superclasse, bisogna usare un metodo public della superclasse.
Invocare un metodo della superclasse: super.nomeMetodo():
Realizzare costruttori in sottoclassi : super(parametri); Quando il costruttore della sottoclasse non invoca il costruttore della superclasse, quest’ultima deve avere un costruttore senza parametri. Se, invece, tutti i costruttori della superclasse hanno bisogno di parametri, allora il terminale darà errore.
La superclasse universale Object: ogni classe che viene dichiarata senza la clausola extends estende automaticamente la classe Object, quindi Object è la superclasse di tutte le classi.
Metodi utili:
Algoritmi di ordinamento
Un algoritmo di ordinamento sposta gli elementi di una raccolta di dati in modo che, al
termine, siano memorizzati in qualche ordine specifico.