Pila.h struct Pila { int size; int defaultGrowthSize; int marker;

Slides:



Advertisements
Presentazioni simili
Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Advertisements

Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public class Up extends Object { public.
Interfacce Java.
Costruttori e Distruttori
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Esempio: Tombola! Parte seconda.
1 Il nostro esempio guida: La costruzione di uno stack.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Costruzione di Interfacce Lezione 11 Dal Java al C++ parte 2
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Introduzione al linguaggio Java
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
Soluzione Esercizio - Classe Vettore
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Approfondimento delle classi
Selezione (=scelta) con “if-else”
OGGETTI COMPOSTI Una classe può contenere riferimenti a altre classi (o anche a se stessa): public class Orologio { Counter ore, minuti; } Loggetto Orologio.
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
void binario(int n); …………………
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
Introduzione alle Classi e agli Oggetti in Java 1.
Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.
La codifica di Huffman Un'implementazione in C++ (parte del materiale è opera di Mark Nelson, Dr. Dobb’s Journal, Gennaio 1996)‏
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Gestione della memoria
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
ODMG.
Java: concetti e costrutti base
Elementi di Informatica
Strutture classi e oggetti
Unità didattica 1: Introduzione al linguaggio Java
Vettori dinamici Definiremo la classe vector.
Richiami di C++ di base.
Programmazione e Laboratorio di Programmazione
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a. a
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Ese 2 (del 31 Marzo 2004).
Esercizio 2.
concetti ed applicazioni
Array Un array è un contenitore “contiene” al massimo un numero predefinito di oggetti dello stesso tipo. Ogni oggetto dell'array è detto “elemento” Ad.
Programmazione e Laboratorio di Programmazione
UML Diagramma statico di una classe
Dalla programmazione tradizionale al paradigma OO
Passaggio di parametri per indirizzo
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Transcript della presentazione:

Pila.h struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; } ; Pila * crea(int initialSize) ; void distruggi(Pila * s) ; Pila * copia(Pila * from) ; void cresci(Pila *s, int increment); void inserisci(Pila *s, int k) ; int estrai(Pila *s) ; void stampaStato(Pila *s) ;

Pila.h versione 2 struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai() ; } ; Pila * crea(int initialSize) ; void distruggi(Pila * s) ; Pila * copia(Pila * from) ; void cresci(Pila *s, int increment); void inserisci(Pila *s, int k) ; // int estrai(Pila *s) ; vecchia versione void stampaStato(Pila *s) ;

Re-implementazione di estrai int estrai(Pila *s) { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(s->marker>0); return s->contenuto[--(s->marker)]; } Re-implementazione di estrai int estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this-> contenuto[--(this-> marker)]; }

Re-implementazione del main int main() { Pila * s=crea(5); cout<<"s";stampaStato(s); for (int k=1; k<10;k++) inserisci(s,k); cout<<"s"; stampaStato(s); Pila * w = copia(s); cout<<"w"; stampaStato(w); for (int k=1; k<8;k++) //cout<<estrai(s)<<endl; cout<<s->estrai()<<endl; … }

Re-implementazione di estrai: dove scrivo il codice? struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this->contenuto[--(this->marker)]; } };

Re-implementazione di estrai: dove scrivo il codice? struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai(); }; int Pila::estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this->contenuto[--(this->marker)]; }

Re-implementazione di estrai con this implicito int estrai(Pila *s) { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(s->marker>0); return s->contenuto[--(s->marker)]; } Re-implementazione di estrai con this implicito int estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(marker>0); return contenuto[--(marker)]; }

Re-implementazione di crea Pila * crea(int initialSize) { Pila * s= new Pila ; s->size=initialSize; s->defaultGrowthSize=initialSize; s->marker=0; s-> contenuto=new int[initialSize]; return s; } Re-implementazione di crea Pila::Pila(int initialSize) { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[initialSize]; } “Il costruttore”

Re-implementazione di distruggi void Pila:: distruggi () { //distruggi lo Pila cout<<"entro in distruggi"<<endl; delete []contenuto; delete this; } Re-implementazione di distruggi Pila::~Pila() { //distruggi lo Pila cout<<"entro nel distruttore"<<endl; delete []contenuto; // NO! delete this; } “Il distruttore”

Re-implementazione del main int main() { Pila * s=new Pila(5); // OLD: =crea(5) cout<<"s";s->stampaStato(); for (int k=1; k<10;k++) s->inserisci(k); cout<<"s"; s->stampaStato(); Pila * w = s->copia(); cout<<"w"; w->stampaStato(); for (int k=1; k<8;k++) cout<< s->estrai()<<endl; delete s; // OLD: s->distruggi(); for (int k=1; k<15;k++) cout<< w->estrai()<<endl; }

Pila.h versione 3 struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; Pila(int initialSize) ; ~Pila() ; Pila * copia() ; void cresci(int increment); void inserisci(int k) ; int estrai() ; void stampaStato() ; } ; Variabili di istanza, Dati membro Metodi, Funzioni membro

Pila.h versione 4 struct Pila { Pila(int initialSize) ; Pila(); void copia(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ; private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); } ; Pila.h versione 4

Pila.h versione 5 class Pila { int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila(); ~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ; } ;

Pila.h versione 6 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila(); ~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ; } ; class Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila(); ~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ; } ;

La Pila in Java - 1 package strutture; public class Pila { int size; int defaultGrowthSize; int marker; int contenuto[]; Pila(int initialSize) { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[initialSize]; } in C++ class Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; in C++ Pila::Pila(int initialSize) { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[initialSize]; }

La Pila in Java - 2 private void cresci(){ size+=defaultGrowthSize; int temp[]=new int[size]; for (int k=0;k<marker;k++) temp[k]=contenuto[k]; this.contenuto=temp; } in C++ void cresci(){; this->size+=defaultGrowthSize; int * temp=new int[this->size]; //int temp[]=new int[size]; for (int k=0; k<s->marker;k++) { temp[k]=this->contenuto[k]; } delete [](this->contenuto); this->contenuto=temp;

La Pila in Java - 3 void inserisci(int k) { if (marker==size) cresci(defaultGrowthSize); contenuto[marker]=k; marker++; } in C++ void inserisci(int k) { if (marker==size) cresci(defaultGrowthSize); contenuto[marker]=k; marker++; }

La Pila in Java - 4 int estrai() { assert(marker>0) : "Estrazione da un pila vuota!"; return contenuto[--marker]; } int estrai() { assert(marker>0); return contenuto[--(marker)]; } in C++ java –ea Pila java.lang.AssertionError: Estrazione da un pila vuota! at pila.Pila.estrai(Pila.java:22) at pila.Pila.main(Pila.java:39) 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 - 5 public static void main(String args[]) { Pila s=new Pila(5); for (int k=0;k<10;k++) s.inserisci(k); for (int k=0;k<12;k++) System.out.println(s.estrai()); } int main() { Pila * s=new Pila(5); for (int k=0; k<10;k++) s->inserisci(k); for (int k=0; k<12;k++) cout<<s->estrai()<<endl; }

Using 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-alt private void cresci(){ size+=defaultGrowthSize; int temp[ ]=new int[size]; System.arraycopy(contenuto, 0, temp, 0, marker-1); contenuto=temp; }

Tipi di dato derivati (reference data) Java, come tutti i linguaggi OO, permette di definire NUOVI TIPI DI DATO (classi). Alcuni tipi di dato (classi) sono predefinite: ad esempio le stringhe. (String) Point punto = new Point(10,10); 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. Operatore di creazione identificatore tipo costruttore

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

Confronto dell’operatore new in C++: Point * punto = new Point(10,10); in Java: Point punto = new Point(10,10); punto.x di Java equivale a punto->x del C++ In Java gli oggetti sono accessibili SOLO per referenza .

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.runFinalization() subito DOPO la System.gc()

System agisce come libreria System.out.println(…); System.gc(); System.runFinalization(); System.exit(int status); System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); long System. currentTimeMillis();

Class String

Class String

Class String

Class String

Class String

String int Integer.parseInt(String s) float Float.parseFloat(String s) Per trasformare il contenuto di una stringa in un intero: int Integer.parseInt(String s) Per trasformare il contenuto di una stringa in un float: float Float.parseFloat(String s)

Costruite una Coda analoga alla Pila Esercizio: Costruite una Coda analoga alla Pila

Pila e Coda IN OUT CODA IN OUT PILA