Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Fondamenti di informatica - java (Pini), Appunti di Fondamenti di informatica

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

2016/2017

In vendita dal 10/02/2017

Mary394
Mary394 🇮🇹

4.1

(8)

30 documenti

1 / 18

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
FONDAMENTI DI INFORMATICA - JAVA
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ì:
1. Carica il contenuto della cella di memoria 40. es. 21
2. Carica il valore 100. es 16
3. Se il primo valore (21) è più grande del secondo valore (16), continua con
l’istruzione che è memorizzata nella cella di memoria 240.
È 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.
È indipendente dall’architettura del calcolatore buona portabilità
È sicuro
Fornisce una ricca libreria, cioè un insieme di metodi usati per scrivere il
programma.
Progettato per Internet.
Struttura di un programma
public class: serve per dire a quale classe appartiene il programma e la avvia. Un
file può contenere al massimo una public class. Il nome della public class deve
appaiarsi con il nome del file che contiene la classe:
public static void main (String[]args) {...} specifica il metodo, in questo caso
metodo main. Il metodo è una sequenza di istruzioni che descrivono come svolgere
un certo compito. Esegue le istruzioni in ordine.
System.out.println("Hello, World”); è un’invocazione di metodo.
Un’invocazione di metodo richiede:
Un oggetto che vuoi usare per invocare il metodo: System.out (schermo)
Il nome del metodo che vuoi usare: println (stampo, vado a capo)
Dei parametri inclusi nelle (..) che contengono informazioni utili al metodo: (“Hello,
World!”). Nelle virgolette è racchiusa la cosiddetta stringa.
Eseguire un programma Java:
1. Apro il terminale/ prompt dei comandi
2. Apro la cartella in cui ho salvato il programma (salvato precedente come
nome_programma.java), es: cd C:\Users\Mary.Marco-NB\Documents
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Anteprima parziale del testo

Scarica Fondamenti di informatica - java (Pini) e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

FONDAMENTI DI INFORMATICA - JAVA

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ì:

  1. Carica il contenuto della cella di memoria 40. es. 21
  2. Carica il valore 100. es 16
  3. Se il primo valore (21) è più grande del secondo valore (16), continua con l’istruzione che è memorizzata nella cella di memoria 240.

È 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.

  • È indipendente dall’architettura del calcolatore buona portabilità
  • È sicuro
  • Fornisce una ricca libreria , cioè un insieme di metodi usati per scrivere il programma.
  • Progettato per Internet.

Struttura di un programma

  • public class: serve per dire a quale classe appartiene il programma e la avvia. Un file può contenere al massimo una public class. Il nome della public class deve appaiarsi con il nome del file che contiene la classe:
  • public static void main (String[]args) {...} specifica il metodo , in questo caso metodo main. Il metodo è una sequenza di istruzioni che descrivono come svolgere un certo compito. Esegue le istruzioni in ordine.
  • System.out.println("Hello, World”); è un’ invocazione di metodo. Un’invocazione di metodo richiede: Un oggetto che vuoi usare per invocare il metodo: System.out (schermo) Il nome del metodo che vuoi usare: println (stampo, vado a capo) Dei parametri inclusi nelle (..) che contengono informazioni utili al metodo: (“Hello, World!”). Nelle virgolette è racchiusa la cosiddetta stringa. Eseguire un programma Java:
    1. Apro il terminale/ prompt dei comandi
    2. Apro la cartella in cui ho salvato il programma (salvato precedente come nome_programma.java), es: cd C:\Users\Mary.Marco-NB\Documents
  1. Compilo il programma: javac nome_programma.java
  2. Eseguo il programma: java nome_programma

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

Creare una nuova classe

  1. Decidere l’interfaccia pubblica Intestazione dei metodi per manipolare oggetti di quella classe Dichiarazione dei costruttori per costruire oggetti di quella classe
  2. Implementare metodi e costruttori trovare una rappresentazione dei dati degli oggetti di quella classe ( variabili d’istanza ) scrivere le istruzioni di metodi e costruttori
  3. Documentare e fornire strumenti di collaudo classe Tester testare metodi scritti da altre parti

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à.

  • Dichiarare le variabili d’istanza come private
  • Dichiarare i metodi public che accedono alle variabili

Progettare l’interfaccia pubblica di una classe

BankAccount: classe conto bancario.

Metodi:

Descrivere l’intestazione del metodo :

  • Specificatore d’accesso: public
  • Tipo restituito: void o double
  • Nome del metodo: deposit
  • Parametri variabili: double amount

Costruttori : inizializzano le variabili d’istanza e danno loro un valore iniziale

Descrivere la dichiarazione del costruttore :

  • Specificatore d’accesso: public
  • Nome del costruttore = nome della classe: ContoBancario
  • Parametri variabili: double initialBalance

Realizzare la classe sviluppando metodi e costruttori:

  • Definire variabili d’istanza che memorizzano i dati di un oggetto:
  • Definire costruttori che inizializzano le variabili d’istanza:
  • Invocare il costruttore , ovvero creare un nuovo oggetto (new) e inserire dei parametri.
  • Definire metodi

Classe tester: classe con metodo main che contiene istruzioni per testare un’altra classe.

  • Costruire uno o più oggetti della classe testata
  • Invocare uno o più metodi
  • Stampare uno o più risultati
  • Stampare i risultati attesi

% indica il resto della divisione 7%4 = 3 Altri metodi della classe Math:

  • sqrt radice quadrata Math.sqrt(x)
  • pow potenza Math.pow(a, n)
  • exp esponenziale Math.exp(x)
  • log logaritmo Math.log(x)
  • round arrotondamento all’intero più vicino Math.round(x)

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.

Classe String

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

  • length : restituisce la lunghezza: “Ciao”.length();
  • parseInt/parseDouble: converte una stringa in un numero double/int: Integer.parseInt(str); Double.parseDouble(str); nb: entrambi sono metodi statici!
  • charAt: mi seleziona il carattere (di tipo char) in una certa posizione: charAt(i)
  • equals/equalsIgnoreCase: indica due oggetti con identico contenuto, ma sono due oggetti tra loro distinti. String1.equals(String2) Creare sottostringhe: Sottostringa parte di una stringa. String nome = “Mariagrazia”; 0 1 234 String sub = nome.substring(0, 5); M a r i a nb: (posizione iniziale, posizione finale -1)

Decisioni

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.

= < >= == !=

  • Per evitare errori di arrotondamento, non usare == per comparare numeri con la virgola, piuttosto testo quanto sono vicini: | x + y | < e: final double EPSILON = 1E-14;

if (Math.abs(x - y) <= EPSILON)

  • compareTo: serve a confrontare stringhe secondo l’ordine alfabetico String1.compareTo(String2) <0 significa che String1 viene prima di String2 nell’ordine alfabetico;

    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

Il tipo boolean e le espressioni booleane: un tipo booleano ha 2 valori: true e false ;

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:

  • int [ ] numeri = new int[10];
  • final int LUNGHEZZA_NUMERI = 10; int[ ] numeri = new int[LUNGHEZZA_NUMERI];

Ciclo for esteso : Scorre tutti gli elementi di una collezione (Array o ArrayList).

double[ ] valori = …; double somma = 0;

for(double elemento : valori) leggo per ogni elemento in valori { somma = somma + elemento; }

Array parzialmente riempiti

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 e inserire elementi in Array e ArrayList

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;

}

EREDITARIETA’

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:

  • String toString() restituisce una stringa che descrive l’oggetto
  • boolean equals(Object otherObject) verifica se l’oggetto è uguale a un altro
  • Object clone() crea una copia completa dell’oggetto ottenendo due riferimenti al medesimo oggetto

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.

  • Insertion sort: algoritmo di ordinamento. Ho una sequenza iniziale a[0]…a[k] (k=0) del tipo 11,9,16,5,7. L’elemento in posizione a[1] va messo prima di a[0] perché 11>9. Ottengo quindi 9,11,16,5,7. L’elemento in posizione a[2] resta dove sta perché 16>11. L’elemento in posizione a[3] va messo prima di a[2] perché 16>5. Ottengo quindi 9,11,5,16,7. L’elemento in posizione a[2] va messo prima di a[1] perché 11>5. Ottengo quindi 9,5,11,16,7. L’elemento in posizione a[1] va messo prima di a[0] perché 9>5. Ottengo quindi 5,9,11,16,7. Faccio lo stesso con a[4].
  • Merge sort : prendere tutti gli elementi, dividerli a metà, ordinare ogni metà e poi metterli insieme.
  • Selection sort: ordina un array eseguendo dei passi in modo ripetuto: