




























































































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
appunti di Java ben presi, inclusi esercizi fatti in classe. indice: - come nasce - idea dell'object oriented programming - introduzione a Java - classi - costruttori - metodi - proprietà static - sottoclassi e ereditarietà - binding dinamico e statico - overriding e overloading - array - metodi ricorsivi - classi astratte - interfacce - collections - arraylist -hashmap - eccezioni -package, file voto conseguito con questi appunti: 30L
Tipologia: Sbobinature
1 / 106
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































In offerta
Introduzione al Future Internet – Object Oriented programming Lezione 1.
Constraint Parallel PHP I annoProcedurale. In questo periodo nasce l’esigenza di ripensare globalmente come l’informatica si stava evolvendo. Siamo a metà degli anni ’70 il problema nasce da una serie di esigenze
Cercare di fare in modo di individuare quali sono le strutture dati e le funzionalità su quelle strutture dati. Nei linguaggi di programmazione nasce l’idea di introdurre attraverso il class diagram le strutture dato che mi servono. Tipi di dati verso Object Oriented 2 principi.
Ci sono però dei problemi: La definizione non è nascosta, non è nascosto che ho quelle variabili che si chiamano in quel modo. Nella programmazione tradizionale non ho nessun modo per nascondere all’esterno l’implementazione. Se poi questo programma è gestito da altre persone si complicano le cose (se due persone chiamano due variabili allo stesso modo poi si creano conflitti). IDEA DELL’OBJECT ORIENTED public class Tessera { private int punti; private int matricola; Public Tessera() {punti=0; matricola=0;} public void reset() {punti=0; matricola=0} public void inc(int x) {punti=punti+x;} public void setMatricola (int x) {matricola = x;} public int getValue() {return punti;} } Tutto ciò che riguarda una tessera punti deve essere incapsulato nella classe; ciò che è etichettato private non è visibile all’esterno, public sono le API esterne Vado a definire la classe tessera e andrò a metterla in un file chiamato tessera.java. il nome del file dovrà essere lo stesso del nome della classe !!
Ad esempio, se io voglio che dall’esterno nessuno veda quelle variabili quelle variabili int punti e int matricola saranno precedute dalla parola chiave private. Nel Main io posso crearmi degli oggetti di tipo tessera : dichiarando una variabile tessera t= new tessera () con questo comando dico che voglio creare una nuova tessera. A questo oggetto t posso mandare dei messaggi per operare su quella tessera. Ad una tessera posso chiedere di incrementare punti e dire i punti. Come mandare messaggi ad un oggetto? t. la sintassi che si usa è il punto quando metto il punto vuol dire che sto mandando un messaggio es.: t. incrementa Punti ($x) Se la variabile viene impostata con privata, qualsiasi tentativo di leggere la variabile dall’esterno fallisce. Dentro al file java deve esserci la lettera maiuscola T essera.java Usare programma: IntelliJ “tessera” è una classe e definisce una struttura dati astratta e le operazioni che deve supportare (metodi). Di una classe posso creare delle istanze che prendono nome di OGGETTI. Offre l’operatore new che crea e inizializza un oggetto (crea istanze di classi) Ogni istanza è caratterizzata da una copia locale. T1 e t2 sono puntatori a tali due istanze Il punto permette di operare sulle istanze messaggio è invocazione di metodo.
La funzione di inizializzazione che ha lo stesso nome della classe prende il nome di costruttore. Questo permette il raggruppamento e hiding dell’implementazione. Public perché quelle funzioni sono usabili dall’esterno, posso mandare messaggi. Sottoclassi ed ereditarietà Idea che posso fare il riuso del software senza scriverlo nuovo ogni volta per funzionalità simili. Es. immaginiamo che esistono due tipi di tessera (sottoclassi): tessera gold e normale. Ereditano le variabili ed i metodi ma si possono aggiungere nuove variabili e nuovi metodi. Verso i linguaggi Object Oriented
B= a+ c variabile di tipo byte e variabile di tipo int. In questo caso il byte viene trasformato in int. Posso però forzare il cambio di tipo verso l’alto (non viene fatta in automatico). Se scrivo int= decimale viene fuori un errore perché non posso metterle un decimale dentro un intero però posso forzare la conversione mettendo il tipo tra parentesi. A= (byte) (a2). In alcuni casi java fa un’operazione chiamata Casting modifica il tipo di una variabile per adattarlo ad un’espressione ma solo da più stretto a più grande (per widening). Se in un’espressione compaiono Byte, short e int il risultato è sempre promosso a int. Posso anche renderli più bassi ma non viene fatto in automatico! In questo caso posso forzare la conversione mettendo il tipo tra parentesi. Es. byte a= a=(byte)(a2); Usuali operatori aritmetici:
C=++b stesso risultato ma operazione al contrario quindi prima assegnamento a C e poi incremento di b. int a=1, b=2; int c=++b, //c: prima ++ poi assegno d=a++; //d: prima assegno poi++ c++; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); } } stampa: 2 3 4 1 Operatori bitwise su interi
N shift right di N posizioni in versioni con e senza segno (a seconda di come trattano il bit più a sinistra)
$punto= array (5,3); $punto[0]; $punto[1]; $rettangolo=array( array(1,2), array(5,3)); $rettangolo [0,0]; un rettangolo posso definirlo come un array con dentro due punti. CLASSE JAVA Pensate per rappresentare delle informazioni composte costruite a partire da queste informazioni Class Point ( nome della struttura dati che vogliamo introdurre) {definizione della classe fatta da 3 parti Insieme di variabili (definiscono la struttura informativa corrispondendo a quella classe) ….. Insieme di funzioni (operazioni che vogliamo definire su quella struttura dati) } SINTASSI DELLE CLASSI. Le variabili devono essere tipate. Class point { int x; int y; … Setx( parametro: int cx)
{x=cx;} int Get x( ) { return x;} …. Void trasla ( int tx, int ty) { x=x+tx ; y= y+ty;} DistanzaOrigine( ) { Le classi vanno messe in un singolo file java con lo stesso nome della classe. Es classe Point - file Point.java Può anche essere compilata con Point.class che può essere eseguito da una macchina java. Come usare la classe in un main? Il main di un programma è fatto da una serie di dichiarazioni di variabili, eventualmente inizializzate e poi da una sequenza di istruzioni. Nel momento in cui si dichiara una variabile queste possono essere associate ad un tipo base. Posso definire delle variabili di tipo punto, che rappresenterà un oggetto appartenente a quella classe. Il modo in cui viene inizializzato è con new seguito dal nome della classe ed eventualmente dei parametri. Questa istruzione crea un oggetto.
Public car (string a, string b, int p, int d){ Color=a; model=b; power=p; porte=d; } NEL MAIN Car auto2= new Car(“grigia”, “alfa romeo giulia”, 140, 4); TERZO ESEMPIO COSTRUTTORE Public Car (String a, String b, int p){ Color=a; model=b; power=p; porte=4; } NEL MAIN Car auto3=new Car(“blu”, “merchedez”, 90); crea auto3 del colore, tipo, potenza attuali e 4 porte (usa quello che abbiamo inserito nel costruttore). UN ALTRO ESEMPIO: PUNTO IN UN PIANO CARTESIANO Class Point ( ) { int x; int y;
costruttore/i Point ( ) { x=0; y=0; } Point ( int cx, int cy) {x=cx; y=cy; } Metodi void setx (int cx) {x=cx;} Int getx ( ) {return x;} Void sety (int cy) {y=cy;} Ecc… } Nel main posso creare delle istanze quindi dichiaro Point p=new Point(); quello che faccio è andare ad usare il costruttore associato alla classe per creare la nuova istanza e inizializzarla. Dentro una classe devo avere sempre almeno un metodo con lo stesso nome della classe e che svolge il ruolo di ALLOCARE all’istanza all’interno della memoria del programma, cosicché quella istanza sia utilizzabile. L’operazione di new è l’operazione con cui creo l’istanza e deve corrispondere ad uno dei costruttori che ho nella classe. Nel momento in cui eseguo questa chiamata nel main viene creato un punto p, inizializzando le coordinate e 0,0; SIGNATURE deve essere sempre diversa. CLASSE PUNTO IN UN PIANO CARTESIANO. DEFINIZIONE CLASSE class Point { int x; int y; costruttorePoint()
{ …. This.operazioni:0; } METODI Un altro standard: il primo gruppo di metodi che si introducono sono i getter e setter. Sono metodi che permettono di leggere o scrivere il valore di singole variabili. Se su un oggetto di tipo conto voglio sapere il cognome del titolare o settare il cognome andrò a mettere i metodi rispettivamente di getter o setter. Sono tipicamente dei metodi pubblici e void nel caso del setter ( va a settare la variabile ). Tipicamente hanno un nome standard ovvero: setnomevariabile. Nel caso di nomi composti mettere la maiuscola Public void setCognome (string cognome) {This.cognome=cognome; } Public string getCognome ( ) non ha parametri {return this.cognome;} Questa coppia di metodi si usa per tutte le variabili che vogliamo leggere o scrivere dall’esterno. Public void setNome (string nome) {…} Public string getNome () {…} Tutti questi standard sono implementati negli ambienti java. Public void versa ( int x ) con void non restituisce nulla {this.cifra=this .cifra+x; } incrementa il valore della variabile cifra. Public int versa (int x)