Processare più oggetti (1) Lavorare con più oggetti. Cicli. Processare più oggetti (2) L istruzione while. Il calcolo degli stipendi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Processare più oggetti (1) Lavorare con più oggetti. Cicli. Processare più oggetti (2) L istruzione while. Il calcolo degli stipendi"

Transcript

1 2 Processare più oggetti (1) Lavorare con più oggetti Iterazioni. Ciclo while Collezioni ed enumerazioni. La classe Vector Supponiamo di voler leggere e calcolare lo stipendio di più di un impiegato Al momento sappiamo come leggere i dati di un impiegato e calcolarne la paga Employee e = Employee.readIn(br); int hours = Integer.parseInt(br.readLine()); System.out.print("Employee " + e.getname() + " has earned " + e.calcpay(hours)); 3 4 Processare più oggetti (2) Vorremmo ripetere queste istruzioni un certo numero di volte Employee e = Employee.readIn(ds); int hours = Integer.parseInt(ds.readLine()); System.out.print("Employee " + e.getname() + " has earned " + e.calcpay(hours)); ripetere fino a quando è necessario Cicli Un costrutto che supporta l esecuzione ripetuta di una sequenza di istruzioni è noto come ciclo (loop) Un ciclo consiste di due parti Il corpo (body) del ciclo, ossia la sequenza di istruzioni che deve essere eseguita ripetutamente Il meccanismo di ciclo (nel lucido precedente questo era composto dal termine ripetere fino a quando è necessario e dalla freccia Il meccanismo di ciclo dovrebbe permettere di specificare quando fermare l esecuzione ripetuta Questa condizione è nota come terminazione del ciclo (loop termination) 5 6 L istruzione while Forma generale while (condition) body Condition e body sono simili a quelli visti per l istruzione if La condizione deve essere un espressione booleana Il corpo è una sequenza di istruzioni (single o compound statement) Semantica La condizione è verificata Se falsa, il ciclo termina e l esecuzione procede con l istruzione immediatamente seguente il ciclo Se vera, il corpo è eseguito e si ripete la verifica della condizione Il calcolo degli stipendi Ecco il nostro ciclo per il calcolo degli stipendi degli impiegati Employee e = Employee.readIn(br); while (e!= null) { int hours = Integer.parseInt(br.readLine()); System.out.println("Employee " + e.getname() + " has earned " + e.calcpay (hours)); e = Employee.readIn(br); La condizione (e!= null) termina il ciclo quando non ci sono più dati nel file di ingresso.

2 Versione scorretta La seguente versione è scorretta Employee e; while (e!= null) { e = Employee.readIn(br); int hours = Integer.parseInt(br.readLine()); System.out.println("Employee " + e.getname() + " has earned " + e.calcpay(hours)); Notare come nella condizione si verifichi il valore della variabile e senza che questa sia stata inizializzata La compilazione causa un errrore "uninitialized variable" 7 Un altra versione scorretta Employee e = Employee.readIn(br); while (e!= null) { int hours = Integer.parseInt(br.readLine()); System.out.println("Employee " + e.getname() + " has earned " + e.calcpay (hours)); In questo caso vengono letti solo i dati del primo impiegato non c è nessun Employee.readIn nel corpo del ciclo Il ciclo quindi non fa progressi verso la terminazione (ciclo infinito -- una volta entrati non si esce più!!!) 8 Loop patterns (1) 9 Loop patterns (2) 10 Altri task di lettura e calcolo ripetitivi sono simili nella forma al ciclo per il calcolo degli stipendi Per esempio, per calcolare i pedaggi: TollBooth tollbooth = new TollBooth( Benevento ); Truck truck; truck = Truck.read(br); // read first while (truck!= null) { // as long as lastreadwas successful tollbooth.calculatetoll(truck); // processing truck = Truck.read(br) // read next un ciclo per la lettura e stampa di stringhe String s; s = br.readline(); // read first while (s!= null) { // as long as lastread was successful System.out.println(s); // processing s = br.readline(); // read next Loop patterns (3) lettura di interi e stampa del loro quadrato int i; String temp; temp = br.readline(); // read first while (temp!= null) { // as long as last readwas successful i = Integer.parseInt(temp); // processing - first convertto int System.out.println(i*i); // - now print square temp = br.readline(); // read next Non possiamo comporre read e parseintnel solito modo: i = Integer.parseInt(br.readLine()); poiché dobbiamo controllare se readlline ha avuto successo (non ha restituito null) prima di convertire la stringa 11 Loop patterns (4) una variante consiste nel ciclare finché non viene letto un valore negativo int i; i = Integer.parseInt(br.readLine()); // read first while (i >= 0) { // as long as last read was successful System.out.print(i*i); // print square i = Integer.parseInt(br.readLine()); // read next In questo caso possiamo comporre read e parseint perché il test di terminazione usa un valore intero NB: non funziona se si arriva alla fine del file senza aver trovato un numero negativo! 12

3 Versione corretta Loop patterns (5) int i; String temp; boolean done = false; temp = br.readline(); while (temp!= null &&!done) { i = Integer.parseInt(temp); if (i >= 0) { System.out.println(i*i); temp = br.readline(); else done = true; 13 Loop patterns (6) Tutti i cicli precedenti hanno la stessa forma // Loop Pattern: read/process read first item while (a valid item has been read) { // as long as an item // was successfully obtained process the item read the next item Una tale frammento di codice è chiamato loop pattern, in quanto può essere usato per creare strutture di ciclo Questo in particolare è chiamato read/process loop pattern 14 Read/Process Loop Pattern Per usare questo pattern, bisogna definire: Il metodo per leggere l item La condizione che indica che nessun item valido è stato letto Il codice per elaborare l item 15 Impatto dei cicli sulla verifica In una sequenza l esecuzione procede linearmente Con le strutture di selezione sono possibili diverse sequenze di esecuzione alternative In assenza di infeasible paths si possono ancora verificare tutti i cammini (sempre che il loro numero non cresca in maniera esponenziale) Con i cicli non è più possibile una verifica esaustiva (numero di iterazioni arbitrario), ma bisogna almeno verificare i seguenti casi: La condizione del ciclo è falsa la prima volta Il corpo del ciclo è eseguito una sola volta Il corpo del ciclo viene eseguito più di una volta 16 Libreria di canzoni (1) 17 Libreria di canzoni (2) 18 Problema WOLD, una stazione radio locale, vuole informatizzare la propria libreria di canzoni. Si è creato un file in cui sono stati inseriti degli elementi composti dai titoli e dai compositori delle canzoni. Si intende dare al disc-jockey la possibilità di cercare nella libreria tutte le canzoni di un particolare artista. Scenario d esempio Inserisci il nome del file della libreria di canzoni: ClassicRock.lib File ClassicRock.lib loaded. Inserisci l artista da cercare: Beatles Canzoni dei Beatles trovate: Back in the USSR Paperback writer She Love You Inserisci l artista da cercare: Mozart Nessuna canzone di Mozart trovata

4 Determinare gli oggetti primari Sostantivi: song library, song, file, entry, title, artist Artist e title sono parti di song, che è sussidiaria di song library File e entry (in un file) rappresentano solo dati da leggere Classe primaria: SongLibrary 19 Determinare il comportamento desiderato Capacità di creare una SongLibrary Costruttore Necessità di cercare le canzoni di un artista Un metodo lookup 20 class SongLibrary {... Tipico codice di utilizzo Definire l interfaccia SongLibrary classical = new SongLibrary("classical.lib"); SongLibrary jazz = new SongLibrary("jazz.lib"); classical.lookup("gould"); classical.lookup("marsalas"); jazz.lookup("corea"); jazz.lookup("marsalas"); Interfaccia class SongLibrary { public SongLibrary(String songfilename) {... public void lookup(string artist) throws Exception { Definire le variabili di istanza ed il costruttore Ogni volta che viene invocato lookup crea un nuovo BufferedReader associato al file su disco specificato dal nome del file di canzoni (passato al costruttore). Questo nome deve quindi essere mantenuto in una variabile d istanza class SongLibrary { public SongLibrary(String songfilename) { // costruttore this.songfilename = songfilename;... // Metodo lookup private String songfilename; // variabile d istanza Implementazione del metodo lookup public void lookup(string artist) throws Exception { BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(songFileName))); Song song = Song.read(br); // necessità di una classe Song while(song!= null) { if (artist.equals(song.getartist())) System.out.println(song.getTitle()); song = Song.read(br); 23 L interfaccia e le variabili d istanza La classe Song class Song { // Metodi public static Song read(bufferedreader br) throws Exception { public Song(String title, String artist) { public String gettitle() { public String getartist() { // Variabili d istanza private String title, artist; 24

5 25 26 La classe Song Implementazione del metodo read public static Song read(bufferedreader br) throws Exception { String title = br.readline(); if(title == null) return null; String artist = br.readline(); return new Song( title, artist); La classe Song Implementazione del costruttore e degli altri metodi public Song(String title, String artist) { this.title = title; this.artist= artist; public String gettitle() { return this.title; public String getartist() { return this.artist; Discussione Nell esempio di Truck e TollBooth le due classi primarie sono state individuate all inizio Uno dei metodi di TollBooth prendeva Truck come argomento In questo esempio Song è subordinato a SongLibrary Quindi si è preferito concentrarsi prima sulla seconda e poi si è vista la necessità di introdurre la classe Song (perché usata nell implementazione dei metodi) Il procedimento di sviluppo delle classi è di natura iterativa Gestione di valori multipli Il metodo lookup deve scorrere il file ogni volta che viene invocato Per migliorare l efficienza si può pensare di mantenere in memoria il contenuto del file Non si conosce a priori il numero di canzoni nel file non si conosce il numero di variabili da dichiarare Occorre dichiarare una collezione di oggetti Un gruppo di oggetti che può essere dichiarato come entità singola Esempi di applicazione Leggere una lista di nomi e stamparla in ordine inverso Leggere dei nomi e stamparli in ordine alfabetico Verificare se i voti degli studenti sono al di sopra o al di sotto della media Restituire le diverse parole contenute in un file con il relativo numero di occorrenze In questi casi non è solo un problema di efficienza Collezioni di oggetti: Vector Operazioni caratteristiche Creare una nuova collezione (costruttore) Aggiungere un oggetto ad una collezione Elaborare gli oggetti della collezione Java fornisce diverse classi collezione Contenute nel package java.util La più semplice classe collezione è la classe Vector Creazione: Vector v = new Vector();

6 Aggiungere oggetti a un Vector 31 Muoversi all interno di un Vector 32 v Leggiamo alcuni oggetti String e aggiungiamoli al Vector v String s; s = br.readline(); // Legge la prima stringa while (s!= null) { v.addelement(s); s = br.readline(); Vector v = new Vector(); v // Elaborazione: aggiunge s a v // Legge la stringa successiva v.addelement(s); v Più applicazioni di addelement Attraversare la collezione di oggetti e visitare (elaborare) ciascun elemento E un processo ripetitivo e quindi viene usata una struttura di ciclo while(ci sono ancora elementi da visitare) visitare l elemento successivo Per poter visitare tutti gli elementi di un Vector è necessario: Raggiungere in qualche modo gli elementi Ottenere l elemento successivo Verificare se ci sono altri elementi da visitare La classe Vector non fornisce questi metodi Enumeration 33 La classe Object 34 Java offre una classe Enumeration che modella l attraversamento In realtà non si tratta proprio di una classe Ogni classe collezione fornisce un metodo che crea e restituisce un riferimento a un oggetto della classe Enumeration L oggetto Enumeration fornisce i metodi per ottrenere l elemento successivo e verificare se ci sono altri elementi La classe Vector contiene un metodo, elements, che restituisce un riferimento ad un oggetto Enumeration Enumerationelements() { // Restituisce un Enumeration per Vector Enumeration fornisce i seguenti metodi boolean hasmoreelements() // Restituisce true se ci sono altri elementi da // visitare; restituisce false altrimenti Object nextelement() //Rrestituisce un riferimento all elemento successivo nextelementrestituisce un riferimento ad un oggetto di classe Object La classe predefinita Object modella un qualsiasi oggetto I riferimenti a Name, Employee, String, ecc. sono anche riferimenti a Object In questo modo nextelement può restituire riferimenti a oggetti di qualsiasi classe C è un prezzo da pagare per questa flessibilità Lavoro supplementare 35 Il ciclo di attraversamento 36 Il prezzo da pagare per tale flessibilità: Effettuare un operazione di cast davanti ad ogni invocazione di nextelement Name n = new Name( Gerald, Weiss ); Vector v = new Vector(); v.addelement(n); Enumeration e = v.elements(); // trasforma un Vector in una Enumeration Name n2 = (Name) e.nextelement(); // nextelementrestituisce un riferimento // ad Object che viene trasformato in un cast // riferimento a Name mediante cast Assicurarsi che in ogni oggetto Vector si aggiungono riferimenti ad un solo tipo di oggetto Il ciclo di attraversamento di una collezione Enumerationenum= ottenere un riferimento Enumeration dalla collezione while(enum.hasmoreelements()) { ClassName x = (ClassName) enum.nextelement(); // Estrae gli elementi elaborare x Un esempio: stampiamo le String di un Vector Enumerationenum= v.elements(); while(enum.hasmoreelements()) { String s = (String) enum.nextelement(); System.out.print(s);

7 Rivisitiamo la classe SongLibrary 37 Il Costruttore 38 Miglioriamo l implementazione lasciando inalterata l interfaccia. Il contenuto del file viene caricato in un Vector dal costruttore Il metodo lookup attraverserà la collezione import java.io.*; import java.util.*; // perché stavolta usiamo un Vector class SongLibrary { public SongLibrary(String songfilename) throwsexception {... void lookup(string artist) {... // Variabili di istanza private Vector songcoll; public SongLibrary(String songfilename) throws Exception { songcoll = new Vector(); BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream (songfilename))); Song song = Song.read(br); while(song!= null) { songcoll.addelement(song); song = Song.read(br); Il metodo lookup public void lookup(string artist) { Enumeration enum = songcoll.elements(); while(enum.hasmoreelements()) { Song song = (Song) enum.nextelement(); if(artist.equals(song.getartist())) System.out.println(song.getTitle()); Inserire dati di tipi primitivi in una collezione In un Vector è possibile inserire oggetti (Object) int, float, ecc. non sono oggetti, ma tipi primitivi Per risolvere questo problema si può ricorrere alle classi involucro (Integer, Boolean, Float, ) Ad esempio, per gli interi: Vector vi = new Vector(); inti; i = 1; vi.addelement(new Integer(i)); // Include il valore int // all interno di un oggetto Integer // altri inserimenti di interi nel Vector vi Per la visita invece: Visitare dati di tipi primitivi di una collezione Enumeration e = vi.elements (); while(e.hasmoreelements()) { Integer integer = (Integer) e.nextelement(); // estrae l oggetto System.out.println(integer.intValue()); // stampa il valore intero Da notare che il costruttore della classe Integer accetta come argomento un int Lo stesso vale per i costruttori delle altre classi involucro (Boolean, Float, Double) 41 Determinare i risultati di uno studente Si supponga di avere un file del registro degli studenti di un corso universitario. Per ogni studente il file contiene la coppia di linee: nome media Vogliamo stabilire quali studenti siano sopra e quali sotto la media della classe 42

8 Determinazione dell oggetto primario 43 Determinazione del comportamento 44 Candidati: file del registro, studente, nome e media Nome e media sono subordinati a studente che a sua volta è subordinato a file del registro Introduciamo la classe StudentRoster, associata al file d ingresso Notare l analogia con la classe SongLibrary In entrambi i casi gli oggetti subordinati sono letti dal file associato all oggetto primario Ovviamente abbiamo un costruttore StudentRoster E un metodo che percorre il registro e valuta gli studenti (ci dice se stanno sopra o sotto la media) evaluate Non è stato ancora detto quando di intende calcolare la media, né se si userà una collezione Questi aspetti riguardano l implementazione dei metodi e la definizione delle variabili d istanza Definizione dell interfaccia Utilizzo dei metodi StudentRoster roster = new StudentRoster( CS1.f98 ); roster.evaluate(); L interfaccia class StudentRoster { StudentRoster(String rosterfilename) { void evaluate() { 45 Definizione delle variabili d istanza (1) Occorre valutare la media della classe Può essere fatto dal costruttore e l informazione può essere mantenuta in una variabile d istanza (in tal modo può essere usata dal metodo evaluate) Le informazioni relative agli studenti sono richieste due volte: Per calcolare la media (nel costruttore) Per valutare gli studenti (nel metodo evaluate) Conviene usare una variabile di istanza (una collezione) 46 Definizione delle variabili d istanza (2) class StudentRoster { public StudentRoster(String rosterfilename) { pblic void evaluate() { private Vector studentcoll; private int classaverage; 47 public StudentRoster(String rosterfilename) throwsexception { studentcoll = new Vector(); BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(rosterFileName))); int total = 0; // somma le medie int count = 0; // conta gli studenti Student student = Student.read(br); // introduzione della classe Student while (student!= null) { // struttura di ciclo lettura/elaborazione total += student.getaverage(); count++; studentcoll.addelement(student); student = Student.read(br); classaverage = total / count; 48 Implementazione del costruttore

9 49 50 Implementazione di evaluate public void evaluate() { Enumeration enum = studentcoll.elements(); while (enum.hasmoreelements()) { // struttura di ciclo enumerare Student student = (Student)enum.nextElement(); System.out.print(student.getName()); System.out.print(" is performing "); if (student.getaverage() >= classaverage) System.out.println("aboveaverage"); else System.out.println("below average"); Uso della classe class Evaluator { public static main(string[] args) throws Esception { StudentRoster roster1 = new StudentRoster( CS1.f98 ); roster1.evaluate(); StudentRoster roster2 = new StudentRoster( CS2.f98 ); roster2.evaluate(); Considerazioni conclusive Occorre costruire la classe Student (farlo come esercizio ) Possibili diverse implementazioni (ad esempio, scorrere più volte il file invece di mantenere la collezione in memoria) in pratica un file non è altro che una collezione residente su disco Una classe insieme Una classe collezione che chiameremo Set Determinazione del comportamento Set Costruttore contains test di appartenenza isempty verifica dell insieme vuoto null addelement aggiunge un elemento a un Set copy fa una copia di un Set size restituisce il numero di elementi di un Set elements restituisce una Enumeration per l attraversamento union genera l unione di due Set intersection genera l intersezione di due Set print stampa l insieme Set s1, s2; s1 = new Set(); s2 = s1; s1 Il metodo copy Oggetto Set Notare che con l assegnamento le due variabili s1 e s2 fanno riferimento allo stesso oggetto i cambiamenti apportati ad s1 si ripercuotono su s2 e viceversa Noi vogliamo che il metodo copy crei un nuovo oggetto Set e copi gli elementi del vecchio insieme nel nuovo s1 Oggetto Set s2 s2 Oggetto Set Class UseSet { public static main(string[] args) { Set s1 = new Set(); s1.addelement( A ); s1.addelement( B ); s1.addelement( C ); s1.addelement( A ); System.out.println(s1.toString()); Set s2 = new Set(); s2.addelement( B ); s2.addelement( C ); s2.addelement( D ); s2.addelement( D ); s2.print(system.out); s1.union(s2).print(system.out); s1.intersection(s2).print(system.out); Definizione dell interfaccia: Esempio di codice d uso // il metodo tostring trasforma un oggetto in String 53 Definizione dell interfaccia Class Set { public Set () { public boolean contains(object o) { public boolean isempty () { public void addelement(object o) { public Set copy() { public int size() { public Enumeration elements() { public Set union(set s) { public Set intersection(set s) { public void print(printstream ps) { // notare il parametro Object usato per garantire la genericità // rispetto agli oggetti contenuti in un Set 54

10 55 56 Definizione delle variabili di istanza Un set contiene un numero arbitrario di elementi, per cui è richiesta una collezione Per la collezione scegliamo la classe Vector (è l unica che conosciamo) Class Set { // Metodi private Vector vector; Implementazione dei metodi (1) public Set() { vector = new Vector(); public boolean isempty () { return vector.isempty (); public int size() { return vector.size(); public Enumeration elements() { return vector.elements(); Implementazione dei metodi (2) public Set copy() { Set destset = new Set(); Enumeration enum = vector.elements (); while (enum.hasmoreelements()) destset.addelement(enum.nextelement()); return destset; public void addelement(objecto) { if (!contains(o)) // si aggiunge solo se non è già presente vector.addelement(o); Implementazione dei metodi (3) Per l unione il Set restituito si costruisce copiando prima gli elementi del Set argomento e poi aggiungendo gli elementi del Set ricevente public Set union(set s) { Set unionset= s.copy(); Enumeration enum = vector.elements(); while (enum.hasmoreelements()) unionset.addelement(enum.nextelement()); return unionset; Implementazione dei metodi (4) Per l intersezione il Set restituito si costruisce aggiungendo gli elementi del Set ricevente che sono anche contenuti nel Set argomento public Set intersection(set s) { Set interset = new Set(); Enumeration enum = this.vector.elements(); while (enum.hasmoreelements()) { Object elem = enum.nextelement(); if (s.contains(elem )) interset.addelement(elem); return interset; Implementazione dei metodi (5) public boolean contains(objecto) { Enumeration enum = vector.elements(); while (enum.hasmoreelements()) { Objectelem= enum.nextelement(); if (elem.equals(o)) return true; return false; Il metodo equals della classe Objectnon funziona in modo soddisfacente (vedremo dopo una soluzione al problema)

11 Implementazione dei metodi (6) public void print(printstream ps) { Enumeration enum = vector.elements(); while (enum.hasmoreelements()) { ps.print(enum.nextelement().tostring()); ps.print(" "); Il metodo tostring produce una stringa a partire da un oggetto, consentendo quindi la stampa dell oggetto (come vedremo anche questo metodo non è proprio soddisfacente) 61 Il metodo tostring funziona bene se l oggetto è di una classe predefinita, come ad esempio Integer Il numero 275 contenuto in un oggetto di classe Integer viene trasformato nella stringa 275 : Integer i = new Integer(275); System.out.print(i.toString()); Il metodo tostring della classe Object (1) Per una classe definita dall utente invece, poiché il metodo tostring non sa nulla sulla classe effettiva, viene prodotta una stringa con poche informazioni. 62 Ad esempio per la classe class Test { public Test () { // la classe non ha né comportamento, né stato Applichiamo tostring ad un oggetto Test Test t = new Test(); System.out.print(t.toString()); Il metodo tostring della classe Object (2) Viene invocato il metodo tostring della classe Object Il risultato in uscita è una stringa della forma Test@ Il metodo tostring della classe Object (3) Se vogliamo un comportamento diverso dobbiamo personalizzare il metodo tostring scrivendone uno che ha lo stesso prototipo di quello della classe Object public String tostring() { Questo approccio è noto con il termine overriding Sovrascriviamo il metodo pre-esistente con uno nuovo 64 Esempi di metodi tostring Un metodo tostring per la classe Test class Test { public Test () { public String tostring() { return I ama Test object ; Un metodo tostring per la classe Name class Name { public String tostring() { String result = this.title + + this.firstname + + this.lastname; return result; 65 Un metodo tostring per la classe Set public String tostring() { String result = { ; Enumeration e = elements(); while(e.hasmoreelements()) { // struttura ciclo enumerare result += e.nextelement().tostring(); result += ; result += ; return result; In alternativa si può usare il metodo tostring della classe Vector public String tostring() { return vector.tostring(); // vector è la variabile di istanza 66

12 Il metodo equals della classe Object (1) Lo scopo del metodo è quello di confrontare due oggetti per vedere se sono uguali Utile quando si cerca un particolare elemento in una collezione (come nel caso di Set) Il prototipo del metodo è: public boolean equals (Object o) In mancanza di informazioni dettagliate circa la classe effettiva dei due oggetti il metodo equals controlla semplicemente se il ricevente e l argomento fanno riferimento allo stesso oggetto 67 Il metodo equals della classe Object (2) L invocazione: n1.equals(n2) restituisce true nel caso in cui n1 e n2 sono: Name n1 = new Name( John, Smith ); Name n2 = n1; // n1 e n2 fanno riferimento allo stesso oggetto restituisce invece false nel caso in cui n1 e n2 sono: Name n1 = new Name( John, Smith ); Name n2 = new Name( John, Smith ); // n1 e n2 fanno riferimento ad oggetti diversi 68 Overriding del metodo equals Come personalizzare il metodo equals per una qualsiasi classe mantenendo lo stesso prototipo del metodo della classe Object? Occorre applicare un cast all Objectpassato come argomento Esempio per la classe Name: public boolean equals (Object o) { Name n = (Name) o; // cast return this.first.equals(n.first) && this.last.equals(n.last) && this.title.equals(n.title); 69

Muoversi all interno di un Vector. Vector e Enumeration. Enumeration. Collezioni di oggetti: Vector. La classe Object. Aggiungere oggetti a un Vector

Muoversi all interno di un Vector. Vector e Enumeration. Enumeration. Collezioni di oggetti: Vector. La classe Object. Aggiungere oggetti a un Vector Muoversi all interno di un Vector 4 Vector e Enumeration Attraversare la collezione di oggetti e visitare (elaborare) ciascun elemento E un processo ripetitivo e quindi viene usata una struttura di ciclo

Dettagli

Lavorare con più oggetti

Lavorare con più oggetti Lavorare con più oggetti Lavorare con piu oggetti Iterazioni. Ciclo while 2 Processare più oggetti (1) Supponiamo di voler leggere e calcolare lo stipendio di più di un impiegato Al momento sappiamo come

Dettagli

Gestione di Basi di Dati mediante l approccio File Processing

Gestione di Basi di Dati mediante l approccio File Processing Gestione di Basi di Dati mediante l approccio File Processing Prof. Giuseppe Polese Corso di Basi di Dati Anno Accademico 2005/06 File e classi predefinite 2 File su disco: un insieme di dati sul disco

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point Gli HashSet Tipo predefinito che rappresenta insiemi di Object Cosa succede se... Posso mettere un riferimento a un Point in una variabile Object Object o=new Point(12,3); è quasi tutto come se l oggetto

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Uguaglianza e copia di oggetti

Uguaglianza e copia di oggetti Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La

Dettagli

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

STRUTTURE DATI: OLTRE GLI ARRAY LISTE STRUTTURE DATI: OLTRE GLI ARRAY le strutture dati progettate per ospitare una collezione di elementi, sono variazioni di array Ma l'array ha dimensione fissa anche in Java determinata a priori, in linguaggi

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico

Dettagli

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Iterazioni. L istruzione while. while (condition) istruzione

Iterazioni. L istruzione while. while (condition) istruzione Iterazioni L istruzione while while (condition) istruzione Ripete l esecuzione di istruzione fino a che la condizione resta vera while (balance < targetbalance) year++; double interest = balance * rate

Dettagli

Uso di metodi statici. Walter Didimo

Uso di metodi statici. Walter Didimo Uso di metodi statici Walter Didimo Metodi di istanza Fino ad ora abbiamo imparato a creare oggetti e ad invocare metodi su tali oggetti i metodi venivano eseguiti dagli oggetti un metodo invocato su un

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzioni di controllo Iterative Condizionali Algoritmi e Diagrammi di flusso Esercizi 28/03/2011 2 Istruzioni iterative while do

Dettagli

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false; Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i

Dettagli

Fondamenti di Informatica I

Fondamenti di Informatica I Sapienza Università di Roma, Facoltà di Ingegneria Corso di Fondamenti di Informatica I Canale 1 (A-K) Anno Accademico 2009-2010 Corso di Laurea in Ingegneria Informatica Docente: Camil Demetrescu Esercitatore:

Dettagli

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito

Dettagli

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente

Dettagli

Progetto di cicli (1) Iterazione. Progetto di cicli (2) Scrivere cicli in un programma. I loop pattern che abbiamo visto. Progetto di cicli (3)

Progetto di cicli (1) Iterazione. Progetto di cicli (2) Scrivere cicli in un programma. I loop pattern che abbiamo visto. Progetto di cicli (3) 4 Progetto di cicli (1) Iterazione La costruzione dei cicli. Strutture tipiche. Ciclo for Il concetto di cortocircuito Gli statement break e continue Strategia: raffinamento di soluzioni approssimate.

Dettagli

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 11 Array A. Miola Dicembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Array 1 Contenuti Il problema degli studenti da promuovere

Dettagli

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe String Una stringa Java rappresenta uno specifico valore e come

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Lezione 6 programmazione in Java

Lezione 6 programmazione in Java Lezione 6 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi

Dettagli

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

TIPI PRIMITIVI E CLASSI WRAPPER

TIPI PRIMITIVI E CLASSI WRAPPER I tipi primitivi come oggetti Package java.lang In varie situazioni, può essere comodo poter trattare i tipi primitivi come oggetti per passarli per riferimento a una funzione quando una funzione pretende

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Richiami di Fondamenti di Informatica - 1

Richiami di Fondamenti di Informatica - 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 2 Richiami di Fondamenti di Informatica - 1 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Richiami di FdI-1

Dettagli

La definizione di un metodo. Definizione di classi. La definizione di una classe. La definizione di un costruttore. Utilizzare la classe Laugher1

La definizione di un metodo. Definizione di classi. La definizione di una classe. La definizione di un costruttore. Utilizzare la classe Laugher1 2 Definizione di classi Struttura della definizione di una classe. Definizione di metodi e costruttori. Dichiarazione, visibilità ed uso dei parametri. Variabili locali e variabili di istanza. Istruzione

Dettagli

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1 Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

Calcolare x n = x x x (n volte)

Calcolare x n = x x x (n volte) Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

Dettagli

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2) ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI

Dettagli

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei Input Il tipo char Alcune modalità di acquisizione di input 1 Lettura di dati in input Vediamo due modi per acquisire dei dati di input dall utente: 1. Tramite una finestra grafica di dialogo 2. Tramite

Dettagli

Esempio 2: Subtyping

Esempio 2: Subtyping Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Istruzione condizionale switch Istruzioni di salto break e continue Uso di variabili di tipo boolean Variabili di tipo array (monodimensionali)

Dettagli

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Programmazione II Compitino (Vers. B)

Programmazione II Compitino (Vers. B) Programmazione II Compitino (Vers. B) 15 gennaio 2015 Cognome Jackson Nome Michael Matricola 696969 Anno di corso 1 Nei seguenti quesiti, quando vi è richiesto di scrivere un programma, potete limitarvi

Dettagli

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso; Un esempio di definizione di classe con array di oggetti Sia data la classe StudUniv per gli studenti universitari (definita in una lezione precedente). Scrivere una nuova classe Corso, dove ciascun corso

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso AA 2015/2016 Tutor: Vincenzo Lomonaco vincenzo.lomonaco@unibo.it Programma Introduzione al calcolatore

Dettagli

Metodi statici. Dichiarazione e chiamata di metodi statici

Metodi statici. Dichiarazione e chiamata di metodi statici Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio) Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Riferimenti ad oggetti: Cosa si può fare con i riferimenti?

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E04 Esercizi sui problemi di ordinamento C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento

Dettagli

Ereditarietà (ultima)

Ereditarietà (ultima) Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...

Dettagli

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73 Capitolo 9 Tipi enumerativi, tipi generici e interfacce c 2005 Pearson Education Italia Capitolo 9-1 / 73 Sommario: Tipi enumerativi, tipi generici e interfacce 1 Definizione di tipi enumerativi La classe

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un giocatore, ogni giocatore una scheda Ci vengono già fornite le classi necessarie

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

Capitolo 5 - Funzioni

Capitolo 5 - Funzioni Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente

Dettagli

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Dettagli

COMANDI ITERATIVI. Ivan Lanese

COMANDI ITERATIVI. Ivan Lanese COMANDI ITERATIVI Ivan Lanese Argomenti Comando while Comando do while Comando for Comando while: reminder while (condizione) comando; Semantica: la condizione viene testata: se è vera, viene eseguito

Dettagli

Programmazione II Compitino (Vers. A)

Programmazione II Compitino (Vers. A) Programmazione II Compitino (Vers. A) 15 gennaio 2015 Cognome... Nome... Matricola... Anno di corso... Nei seguenti quesiti, quando vi è richiesto di scrivere un programma, potete limitarvi al corpo del

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 8 luglio 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t); Appello 12.09.2007-1- punti 15 (4+6+5) a) ctunes è un programma per la gestione di archivi musicali; serve per raccogliere informazioni riguardanti tutti i file musicali presenti su un computer e per creare

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Programmazione II Compitino (Vers. B)

Programmazione II Compitino (Vers. B) Programmazione II Compitino (Vers. B) 17 dicembre 2015 Cognome Jackson Nome Michael Matricola 696969 Anno di corso 1 Nei seguenti quesiti, quando vi è richiesto di scrivere un programma, potete limitarvi

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei Confronti, equals Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals 1 Operatori relazionali All interno delle parentesi tonde della condizione dell if è possibile, come abbiamo

Dettagli

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: 1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente

Dettagli

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Dettagli

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Dettagli

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010 Esercizio 1. Si deve modellare con una classe Java il contenuto di un portamonete, con delle opportune semplificazioni. Le monete da considerare sono di soli 4 tagli: 10, 20, 50 e 100 centesimi (cioè 1

Dettagli

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013 Laboratorio Progettazione Web Le funzioni in PHP Angelica Lo Duca IIT-CNR angelica.loduca@iit.cnr.it 2012/2013 Funzioni Una funzione è una sequenza di istruzioni che implementano una specifica funzionalità

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere: Metodi Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere: invocazione: esecuzione di un metodo assegnamento: cambia lo stato di un campo ripetizione:

Dettagli

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione Corso: Fondamenti di Informatica (Gruppo 2) a.a. 2017-18 Corsi di laurea: Ing. Settore Informazione Questionario a Risposte Multiple per auto-valutazione del Lab05 Domanda n. 1 Argomento: Iterazioni, array

Dettagli

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java 1 Specifica ed Implementazione di Tipi di Dato Astratti in Java cos è un tipo di dato astratto specifica di tipi di dati astratti un tipo

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017 Cognome Matricola Nome Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/2017 12 Giugno 2017 Testo Il database del sistema di gestione delle prenotazioni dei voli

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Il linguaggio Java: aggiunte in Java 1.5

Il linguaggio Java: aggiunte in Java 1.5 .. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:

Dettagli

Iterazione (introduzione)

Iterazione (introduzione) Fondamenti di informatica Oggetti e Java (introduzione) Capitolo 17 (estratto) ottobre 2015 1 Contenuti Accesso a sequenze Accumulazione Conteggio Altre aggregazioni Verifica esistenziale Verifica universale

Dettagli

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie 16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Rappresentazione degli algoritmi

Rappresentazione degli algoritmi Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti

Dettagli

Le strutture di controllo in C++

Le strutture di controllo in C++ Le strutture di controllo in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi di Napoli

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria Sapienza - Università di Roma Facoltà di Ingegneria Requisiti Corso di PROGETTAZIONE DEL SOFTWARE I (Corso di Laurea in Ingegneria Informatica) Prof. Giuseppe De Giacomo Canali A-L & M-Z A.A. 2006-07 Compito

Dettagli

ISTRUZIONI DI ITERAZIONE

ISTRUZIONI DI ITERAZIONE CHAPTER 6 CICLI 1 ISTRUZIONI DI ITERAZIONE Le istruzioni di iterazione sono usate per realizzare I cicli. Un ciclo è una istruzione il cui compito è di eseguire ripetutamente qualche altra istruzione (il

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011 13 aprile 2011 Cos è una collezione? Gerarchia delle collezioni Introduzione Una collezione è semplicemente un oggetto che raggruppa più oggetti (detti elementi della collezione) in una singola unità.

Dettagli