1 Pila h versione 6 struct Pila class
- Slides: 29
1 Pila. h versione 6 struct Pila { class Pila { private: int size; int default. Growth. Size; int marker; int * contenuto; void cresci(int increment); public: Pila(int initial. Size) ; Pila(); ~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampa. Stato() ; }; };
La Pila in Java - 1 package strutture; public class Pila { int size; int default. Growth. Size; int marker; int contenuto[]; final int initial. Size=3; Pila() { size=initial. Size; default. Growth. Size=initial. Size; marker=0; contenuto=new int[size]; }
La Pila in Java - 1 package strutture; public class Pila { int size; int default. Growth. Size; costante int marker; int contenuto[]; final int initial. Size=3; Pila() { size=initial. Size; default. Growth. Size=initial. Size; marker=0; contenuto=new int[size]; }
La Pila in Java - 2 private void cresci(int dim){ size+=dim; int temp[ ]=new int[size]; for (int k=0; k<marker; k++) temp[k]=contenuto[k]; contenuto=temp; }
La Pila in Java - 3 void inserisci(int k) { if (marker==size){ cresci(default. Growth. Size; )} contenuto[marker]=k; marker++; } int estrai() { if (marker==0) { System. out. println( "Non posso estrarre da una pila vuota"); System. exit(1); } return contenuto[--marker]; }
La Pila in Java - 4 public static void main(String args[]) { int dim=10; Pila s=new Pila(); for (int k=0; k<2*dim; k++) s. inserisci(k); for (int k=0; k<3*dim; k++) System. out. println(s. estrai()); } }
Using assertions (da Java 1. 4) int estrai() { assert(marker>0): "Invalid marker"; return contenuto[--marker]; } Compilare con: java –ea Pila. java. lang. Assertion. Error: Invalid marker at pila. Pila. estrai(Pila. java: 22) at pila. Pila. main(Pila. java: 39)
Using System. array. Copy() System. arraycopy( Object src, int src_position, Object dst, int dst_position, int length ); Copies the specified source array, beginning at the specified position, to the specified position of the destination array.
La Pila in Java - 2 private void cresci(int dim){ size+=default. Growth. Size; int temp[ ]=new int[size]; System. arraycopy( contenuto, 0, temp, 0, marker-1); contenuto=temp; }
Tipi di dato derivati (reference data) n. Java, come tutti i linguaggi OO, permette di definire NUOVI TIPI DI DATO (classi). n. Alcuni tipo tipi di dato (classi) sono predefinite: nad esempio le stringhe. (String) Operatore identificatore costruttore di creazione n. Point punto = new Point(10, 10); n. No Structures or Unions Java does not support C struct or union types. Note, however, that a class is essentially the same thing as a struct, but with more features. And you can simulate the important features of a union by subclassing.
“Java non ha i puntatori” Ma è vero? Point punto = new Point(10, 10); l’identificatore di un oggetto (“punto”) sembra proprio un puntatore! Quel che Java non ha è l’aritmetica dei puntatori n.
Confronto dell’operatore new in C++: in Java: Point * punto = new Point(10, 10); Point punto. x di Java punto = new Point(10, 10); equivale a punto->x del C++ In Java gli oggetti sono accessibili SOLO per referenza n.
memory management La gestione (dinamica) della memoria e’ automatica, tramite la creazione (operatore new ) e la distruzione (garbage collection) di oggetti. GC interviene quando serve memoria. GC elimina gli oggetti per i quali non vi sono piu’ riferimenti attivi. GC puo’ essere attivato su richiesta esplicita: System. gc()
memory management - costruttori Operazioni da eseguirsi alla nascita di un oggetto vanno definite nel metodo “costruttore”. Ogni classe deve avere uno (o più) costruttori. I costruttori possono differire per numero e tipo di parametri. Es. : Pila() { size=100; … } Pila(int size) { this. size=size }
memory management - distruttori Operazioni da associarsi con l’eliminazione di un oggetto possono essere definite nel metodo “distruttore” finalize() (opzionale) NOTA: il metodo finalize POTREBBE NON ESSERE CHIAMATO DAL SISTEMA (es. se il programma finisce prima…) Per essere certi che vengano chiamati i metodi finalize, occorre chiamare la System. run. Finalization() subito DOPO la System. gc()
System agisce come libreria System. out. println(…); System. gc(); System. run. Finalization(); System. exit(int status); System. arraycopy(Object src, int src. Pos, Object dest, int dest. Pos, int length); long System. current. Time. Millis();
I parametri del main sono inclusi in un vettore di String Parametri di ingresso /* sum and average command lines */ class Sum. Average { public static void main (String args[]) { int sum = 0; float avg = 0; for (int i = 0; i < args. length; i++) { sum += Integer. parse. Int(args[i]); } System. out. println("Sum is: " + sum); System. out. println("Average is: " + (float)sum / args. length); } } prompt> java Sum. Average 7 9 12
Arrays E’ possibile definire arrays di tutti i tipi di dati (elementari o classi). In fase di DEFINIZIONE non e’ necessario specificare la dimensione del vettore. Solo al momento della ALLOCAZIONE viene richiesto lo spazio desiderato. String[ ] strings; // this variable can refer to any String array strings = new String[10]; // one that contains 10 Strings strings = new String[20]; // or one that contains 20. int f[ ][ ] = new int[5][3]; //array bidimensionale char s[]={'+', '-', '*', '/', '=', 'C'}; // array inizializzato in creazione
Convenzioni I nomi delle Classi iniziano con la MAIUSCOLA I nomi degli Oggetti iniziano con la MINUSCOLA Pila p=new Pila();
Passaggio di parametri Le variabili dei tipi di dati primitivi sono sempre passati per copia. Gli oggetti sono sempre passati per referenza. (a pensarci, é ovvio: si copia l’identificatore dell’oggetto)
Passaggio di parametri public class Numero { public int valore=0; Numero(int valore) { this. valore=valore; } }
Passaggio di parametri public class Parametri { void incrementa(int x) {x++; } void incrementa(Numero x) { x. valore++; } public static void main(String a[]){ Parametri p=new Parametri(); } Parametri() { int z=5; incrementa(z); System. out. println(z); Numero n=new Numero(z); incrementa(n); System. out. println(n. valore); } } public class Numero { public int valore=0; Numero(int valore) { this. valore=valore; } } Output: 5 6
Class String
Class String
Class String
Class String
Class String
String Per trasformare il contenuto di una stringa in un intero: int Integer. parse. Int(String s) Per trasformare il contenuto di una stringa in un float: float Float. parse. Float(String s)
29 Esercizio: Costruite una Coda analoga alla Pila
- Typedef struct node
- Struct node int data struct node* next
- Typedef struct tree int info
- Copying structs in c
- Int tree
- Giove scatena il diluvio universale versione latino
- Figlio di cipselo
- Legge delle xii tavole
- Figura misteriosa
- A zacinto
- Charles darwin origine della specie
- Ille mi par esse deo videtur saffo
- Parafrasi iliade proemio
- What is the difference between class and struct
- C# struct vs class
- Pricechar
- Module_init vs probe
- C++ struct partial initialization
- Struct char name 25 charlanguage 10
- Typedef struct in c
- Struct em c
- Struct dirent
- Bb. v. c
- I struct
- Struct sample int a=0
- C++ struct private members
- Struct node int i float j
- Struct in c++
- C doubly linked list
- Array of structs c