Il numero di classi è assurdo, e pensare che originariamente il sistema I/O java era pensato per limitare l esplosione delle classi!
|
|
- Marta Regina De Marco
- 7 anni fa
- Visualizzazioni
Transcript
1 1
2 Il numero di classi è assurdo, e pensare che originariamente il sistema I/O java era pensato per limitare l esplosione delle classi! 2
3 3
4 4
5 Se i dati sono in formato testo, allora sono rappresentati da caratteri, altrimenti da byte. Distinguiamo in questo modo file contenenti caratteri, detti anche file di testo e file contenenti sequenze di dati (che possono essere letti byte a byte) e che prendono il nome di file binari. È chiaro che il primo tipo è intelligibile dall uomo mentre il secondo non necessariamente lo è. 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 Un esempio in cui i flussi orientati ai caratteri non sono utili è la compressione. Se prendiamo ad esempio la libreria java.util.zip, essa è orientata ai byte: perché leggere caratteri quando abbiamo tra le mani contenuti che possono andare da un file immagine a una presentazione, tutti file di tipo binario? Non ha senso, ed infatti in questi casi si preferisci usufruire della lettura orientata ai byte. 14
15 15
16 16
17 Classi modificatori (si vedano le precedenti slide sul pattern decorator). 17
18 18
19 19
20 Per aprire un file per l input di caratteri potete utilizzare FileReader specificando il file da utilizzare con un oggetto String (rappresentante il path del file) o direttamente un oggetto File. Le prestazioni di lettura vanno però incrementate e invece di leggere ogni volta è meglio bufferizzare (cioè creare un buffer, un contenitore, che legge alcune righe e le mette a disposizione del programmatore); potete ottenere questo risultato incapsulando l oggetto in un BufferedReader (ecco un tipico esempio di pattern decorator!). La sezione b mostra come potete utilizzare i filtri nella lettura dell input da console con l oggetto System.in (che rappresenta appunto lo standard input, di default la console). Il tipo di quest ultimo è InputStream quindi, poiché BufferedReader necessita di un argomento Reader, viene utilizzata la classe InputStreamReader per eseguire l adattamento. 20
21 Questa sezione accetta la stringa s2 (dove è contenuto il file) e la utilizza per creare uno StringReader. Viene quindi utilizzato il metodo read() per leggere tutti i caratteri, uno di seguito all altro, e inviarli alla console. Notate che read() restituisce il byte letto come un int che, quindi, dev essere convertito in un char per essere stampato correttamente. Nulla vieta che usiate un decoratore per bufferizzare la stringa, scriviate cioè: BufferedReader b = new BufferedReader(new StringReader(s2)); usando poi il metodo readline(), di BufferedReader. Tramite StringReader la lettura avverrà carattere a carattere invece. Questo può essere uno dei pochi motivi per utilizzare BufferedReader con una stringa. 21
22 Per leggere dati formattati potete utilizzare un oggetto di tipo DataInputStream, che è una classe di I/O orientata ai byte (e non orientata ai caratteri). Di conseguenza, dovete utilizzare la gerarchia di classi basata su InputStream invece delle classi basate su Reader. Naturalmente, potete leggere qualsiasi oggetto (ad es. un file) come sequenza di byte utilizzando le classi InputStream ma, per comodità, in questo caso viene utilizzato un oggetto di tipo String. Per convertire la stringa in un array di byte, che è il tipo necessario per costruire un oggetto ByteArrayInputStream, è possibile usare il metodo getbytes() della classe String. A questo punto, avete un appropriato InputStream da gestire con la classe DataInputStream. 22
23 In primo luogo viene creato un oggetto FileWriter per connettersi al file. Praticamente sempre sarà utile bufferizzare l output utilizzando un BufferedWriter (i buffer, lo ricordiamo, migliorano sensibilmente l I/O da file). Quindi, per la formattazione, l oggetto BufferedWriter viene incapsulato in un PrintWriter. Il file di dati così creato è leggibile come un normale file di testo. Notate che il numero di righe non viene tenuto con LineNumberInputStream che è una classe di non facile gestione. Al termine del flusso di input, il metodo readline() restituisce null. Alla fine dell elaborazione potete osservare un operazione esplicita di close(). Questa operazione è necessaria poiché l uso di flussi bufferizzati non garantisce che il contenuto del buffer venga scritto fisicamente nel file nel momento in cui i metodi di scrittura sono stati invocati. Il metodo close() forza la scrittura dei dati ancora in memoria e chiude il file. 23
24 Gli oggetti della classe PrintWriter formattano i dati in modo che possano essere letti dalle persone. Viceversa, per eseguire l output dei dati in modo che possano essere letti da un altro flusso, dovrete utilizzare gli oggetti DataOutputStream (e gli oggetti DataInputStream per leggerli). Naturalmente, questi flussi possono essere di qualsiasi tipo, ma nell esempio viene utilizzato un file bufferizzato, sia per la lettura sia per la scrittura. Le classi Data.. Sono orientate ai byte per cui richiedono degli InputStream e degli OutputStream. Se si utilizza un DataOutputStream per scrivere i dati, Java garantisce di poter leggere correttamente i dati con un DataInputStream, in modo indipendente dal sistema utilizzato. Questo aspetto è particolarmente importante, poiché è ben noto quanto tempo può venire sprecato per risolvere eventuali problemi di porting dei dati verso uno specifico sistema. Se disponete di Java su entrambe i sistemi questo problema è completamente eliminato. Utilizzando un DataOutputStream, l unico modo affidabile per scrivere un oggetto di tipo String in modo che possa essere letto da un DataInputStream consiste nell usare la codifica UTF-8. Come è facile notare i metodi vengono chiamati dualmente: in scrittura viene chiamata la scrittura di un reale seguito da una stringa e infine un reale, in lettura viene letto un reale e quindi una stringa e di nuovo il reale. Tuttavia, affinchè tutti i metodi di lettura funzionino correttamente, dovreste conoscere la posizione esatta dell elemento nei dati del flusso, poiché sarebbe ugualmente possibile leggere il valore double memorizzato come semplice sequenza di byte, o come un valore char e così via. Di conseguenza, dovete avere un formato fisso per i dati presenti nel file oppure dovete memorizzare ulteriori informazioni nel file per determinare la posizione dei dati. 24
25 25
26 26
27 27
28 Esistono diverse classi File nel mondo Java, due delle quali inserite nel runtime Java distribuito dalla Sun. Quella cui ci riferiamo, e ci riferiremo sempre, è la classe contenuta in java.io: quando effettuate l import assicuratevi che sia questa la classe che inserite, altrimenti vi ritroverete con errori di difficile comprensione Come riportato in slide, la creazione di un nuovo file è possibile SOLO e SOLTANTO in una cartella (directory) già preesistente. Nel caso tentiamo di generare un file con un percorso la cui cartella non esiste, vedrete lanciare un eccezione e la creazione del file, ovviamente, non andrà a buon fine. Fate quindi attenzione e sfruttate i metodi messi a disposizione della classe File per verificare che le directory in cui state navigando esistano. 28
29 29
30 Unix utilizza / mentre Windows usa \ (ma viene accettato anche // ). Quest ultimo carattere non può essere usato direttamente in Java in quanto carattere di escape (cfr. le prime slide) per cui va escepato a sua volta ( \\ ). Ne segue che un percorso del tipo dir1/dir2/dir3 per ambiente linux, debba essere rappresentato come dir1\\dir2\\dir3\\ sotto Windows! Per ovviare a questi problemi possiamo sostituire i separatori con il membro statico di file riportato in slide. In questo modo otteniamo: dir1 + File.Separator + dir2 + File.Separator + dir3 30
31 31
32 32
33 33
34 Sotto windows il percorso relativo sarebbe:../../products/testo.txt ---- Ricordate sempre che la chiamata al metodo di creazione del nuovo file può lanciare un eccezione IOException e va quindi opportunamente circondata da un blocco try; alternativamente potete sempre demandare la gestione al chiamante del metodo (dichiarazione throws ). 34
35 35
36 36
37 37
38 38
39 39
40 Potete usare anche lo spazio, come fatto alla slide 38 dallo StringTokenizer: Stringa.split( ); 40
41 Se scriviamo: [abc]* viene accetta dalla regola qualsiasi sequenza di zero o più lettere abc, quindi ad esempio: aabac Acacbb e così via Se scriviamo invece: [a][1-9]* accettiamo sequenze composte dalla lettera a seguita da 1 o più cifre in base 10, diverse dallo 0 (con compreso). Quindi ad esempio: a a Ma non: Arfjnfj3443 A30049 B30903 E così via. 41
42 Il risultato è lo stesso dell applicazione di o : viene cercata una o più occorrenze di o sequenziali. Nel nostro testo le o sono però singole per cui, appunto, non si hanno risultati diversi. Ben differente è il caso di una stringa del tipo: moo:too:soo In questo caso, l applicazione dell espressione o provoca la generazione di diverse posizioni vuote, in particolare il risultato è: m,, :t,, :s (l ultimo vuoto viene eliminato da Java) Questo risultato è dovuto al fatto che viene riconosciuta una o alla volta per cui la divisione avviene sulla prima e poi sulla seconda, lasciando una stringa vuota. Ecco la sequenza di scissione: moo m o o o Viceversa nel caso dell espressione o+, vengono riconosciute anche le sequenze, per cui moo:too viene spezzata correttamente come segue: moo:too m oo too t oo *sequenza successiva* E si ottiene infatti come risultato m, :t, :s Che è decisamente di più facile gestione dell altro risultato dato dall espressione o. 42
43 43
44 44
45 Come la maggior parte dei flussi, in andrebbe sempre bufferizzato. 45
46 46
47 Il programma collega l input standard ad un file e reindirizza l output standard e il flusso di errore standard verso un altro file. Il re-indirizzamento dell I/O manipola flussi di byte, non flussi di caratteri. Per questo motivo vengono utilizzate le classi InputStream e OutputStream invece di Reader e Writer. 47
48 48
49 49
50 Tutte le classi collection sono tipizzate con Object, tutti i loro metodi che devono tornare degli elementi della collezione, tornano un oggetto (o un insieme di oggetti) di tipo Object. Perché, vi potreste chiedere. È molto semplice e dovreste intuirlo. Le collezioni devono poter contenere qualsiasi tipo di oggetto, sia definito nelle API, sia definito dall utente. Tutti gli oggetti ereditano da Object (gerarchia a radice unica) per cui tipizzando le collezioni su questo tipo, si garantisce che qualsiasi oggetto possa essere inserito nelle strutture dati Java. Il rovescio della medaglia è che nell inserimento si ha l upcast automatico (dal tipo inserito ad Object) e si perde (in realtà nasconde, come abbiamo visto parlando di ereditarietà) informazione sul contenuto effettivo della collezione. Noi sappiamo di aver inserito certi oggetti, però, per cui all estrazione possiamo effettuare il casting al tipo specifico desiderato. Chiaramente se commettiamo un errore nell inserimento, all estrazione e soprattutto al cast, avremo un errore e il lancio di un eccezione (ClassCastException). 50
51 51
52 Qualsiasi tipo di oggetto può essere una chiave, non esistono (e non possono ovviamente esistere) vincoli sulla natura e complessità della chiave scelta. 52
53 Se remove() viene chiamato senza mai chiamare next () oppure se remove() viene chiamato più di una volta in sequenza, si genera una IllegalStateException. Ricordate inoltre che non tutti gli iteratori supportano l operazione di remove() per cui potreste ottenere alla chiamata un eccezione UnsupportedOperationException. 53
54 54
55 Il richiamo di previous() subito prima di next() (e viceversa) restituisce il medesimo elemento attuale. 55
56 Nel caso di set() aggiungiamo che, se next() non è stato chiamato o se add() oppure remove() sono stati chiamati da poco, il metodo può generare una eccezione IllegalStateException ---- Ancora una volta fate attenzione: alcune di queste operazioni non sono supportate da tutte le collezioni, per cui potreste ricevere un UnsupportedOperationException. Non vi preoccupate, non è un vostro errore ma una limitazione della struttura dati che state usando! 56
57 Questo grafico riassume le relazioni tra interfacce e classi collection. Al top abbiamo l interfaccia Iterable che definisce il metodo getiterator() per ottenere un iteratore di scorrimento degli elementi della collezione: in questo modo la definizione del codice è del tutto generica e poi specializzata nella struttura dati considerata. Abbiamo poi una sua sottointerfaccia Collection cui afferiscono le interfacce di tre dei tipi base di strutture dati. Notate che le mappe non afferiscono alla stessa gerarchia per cui non possono essere definiti degli iteratori su di esse allo stesso modo delle altre. Come detto, comunque, si possono ottenere gli elementi chiave o gli elementi puntati dalle chiavi come oggetti Set e quindi usufruire degli iteratori su questi insiemi. Alternativamente potete ottenere una lista da una mappa e quindi iterare su quella. 57
58 58
59 59
60 60
61 61
62 ArrayList è la classe che potreste usare per gestire in maniera flessibile insiemi di oggetti del progetto. Esiste anche la classe Vector, del tutto simile a quella disponibile in C++. Non usatela. Si tratta di una classe legavy cioè mantenuta solo per motivi di compatibilità col vecchio codice che ne fa uso. In realtà ArrayList è più veloce sia nella lettura, sia nella scrittura, sia nell accesso casuale; a meno di specifici casi, dovrete sempre preferirla alla più vecchia Vector. Ricordate di importarla dal package util, per utilizzarla, attraverso la direttiva: import java.util.arraylist; 62
63 63
64 Quello riportato tra brackets ( <, > ) viene chiamato generic. Corrisponde (all incirca) ai template C++ e sarà presentato come ultimo argomento di questo set di slide. Per ora sappiate che usando questa forma stiamo tipizzando l oggetto ArrayList creato in maniera tale che possa contenere solo e soltanto oggetti di tipo String. Se così non facessimo, l oggetto lista accetterebbe oggetti Object e quindi anche qualsiasi altra istanza di qualsiasi altra classe oltre gli oggetti di String. 64
65 65
66 Notate che la terza parte del for, l incremento, è spostato nel corpo del metodo. Il for si struttura in 3 parti: - Dichiarazione - Controllo - incremento In questo caso l incremento non è presente (nelle parentesi del for al secondo ; non segue nulla!). Il motivo risiede nel fatto che l incremento, quello che dovrebbe essere inserito nelle parentesi tonde del for, ci ritorna effettivamente il prossimo elemento e non è un indice, possiamo quindi inserirlo nel corpo del for (metodo next()). Eseguiamo quindi l inizializzazione dell iteratore nella dichiarazione del for ed eseguiamo ogni volta il controllo (c è un ulteriore elemento nell iteratore hasnext()) per poi ottenerlo nel corpo del for come detto poco sopra. Alla chiamata viene effettuato il cast dato che la collezione contiene in linea teorica oggetti di tipo Object (in realtà la definizione con i generics, di alcune slide precedenti, ci permette di evitare questo cast ma lo vedremo poi). 66
67 La riga rossa modifica l oggetto riferito dalla variabile acct. Quando stamperemo le due liste, entrambi avranno il valore dell oggetto inserito uguale. L oggetto riferito, infatti, è lo stesso. 67
68 68
69 E ne esistono anche altri! Il comportamento della maggior parte di essi è facilmente deducibile dal loro nome. Vi invito comunque a consultare le API per maggiori dettagli sul loro funzionamento e uso. 69
70 Notate che in questo caso abbiamo concatenato la chiamata all iteratore con la chiamata next(), avevamo infatti coscienza di aver inserito un elemento nella lista e potevamo quindi chiamare subito il metodo next() per ottenerlo senza verifica della sua presenza (con hasnext()). Ovviamente avremmo potuto anche usare mialista.get(0), per avere il primo elemento inserito (effettivamente quello ritornato tramite la chiamata next() fatta nel codice). 70
71 71
72 72
73 73
74 74
75 75
76 Voi, ovviamente, non dovete mantenere compatibilità con alcun codice per cui assicuratevi di tipizzare sempre e comunque le collezioni che userete e di usare su di esse, sempre e comunque, iteratori tipizzati! 76
77 Il tipo è detto sconosciuto in questo caso ( unknown ). Qualsiasi lista tipizzata con qualsiasi tipo è accetta in questo contesto. 77
78 Java 5 mette a disposizione un nuovo for (detto for-each) che può essere utilizzato sia con le collection che derivano da Iterable (quindi tutte, tranne le map) e anche con gli array. 78
79 A seconda del caso, potete utilizzare il vecchio o il nuovo for. Molto dipenderà dalla necessità o meno di accedere agli indici della struttura dati dato che quest ultimi, come specificato nella slide, non sono disponibili se usate il for-each. 79
80 80
81 81
82 82
83 In altre parole, se volete assicurarvi una buona preparazione, usate come traccia per lo studio le slide di Tesei per gli argomenti che lui ha affrontato e le mie per gli argomenti che vi ho presentato io ma studiate sul libro! Sebbene sia un tomo di tutto rispetto (ma fidatevi, ne esistono di ben più grandi sull argomento!) non dovete studiarlo tutto dato che esso introduce argomenti avanzati che non abbiamo affrontato né io, né il prof. Tesei (concorrenza, GUIs, ecc ). 83
84 Buon lavoro! 84
Creazione, eliminazione, lettura e scrittura di file di testo
Creazione, eliminazione, lettura e scrittura di file di testo Creazione Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file
DettagliCorso 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
DettagliINPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte)
INPUT OUTPUT 2004-05 Le operazioni di I/O avvengono attraverso stream (sequenze di byte) programma stream in lettura sorgente Programmazione in rete e laboratorio programma stream in scrittura destinazione
DettagliL input da tastiera in Java. Dott. Ing. M. Banci, PhD
L input da tastiera in Java Dott. Ing. M. Banci, PhD La lettura di un flusso di input in Java avviene attraverso l'oggetto in della classe System. System.in appartiene alla classe InputStream (letteralmente
DettagliCreazione, eliminazione, lettura e scrittura di file di testo
Creazione, eliminazione, lettura e scrittura di file di testo Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file La classe
DettagliInput/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
DettagliUnità A1 I file testo
Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA stream file testo file binari file di tipi primitivi bufferizzazione InputStreamReader OutputStreamWriter Reader Writer FileReader
DettagliVariabili 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
DettagliFondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline
Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 http://polaris.ing.unimo.it/fic/laboratorio.html Ing. Francesco De Mola demola.francesco@unimore.it DII, Modena Via Vignolese (lab. Dottorandi
DettagliCorso 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
DettagliErrata Corrige di Manuale di Java 8
Errata Corrige di Manuale di Java 8 pag. 43 - par. 2.5.1 - primo riquadro che riporta linee di codice public class Punto { public Punto() //metodo costruttore { deve essere corretto come di seguito: public
DettagliUnità 2 I file binari
Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA file binari file di tipi primitivi file di oggetti serializzazione (B) CONOSCENZA E COMPETENZA Rispondere alle seguenti domande
DettagliFondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario La classe String Lettura da input di dati numerici (tipo int) Stampa di dati numerici Uno sguardo al codice Esercizi 21/03/2011 2
DettagliRETI DI CALCOLATORI Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione
DettagliInformatica I. Ingegneria Medica. Prof. Diego Salamon
Informatica I Ingegneria Medica Prof. Diego Salamon Gestione I/O Prof. Diego Salamon Introduzione Nella creazione e gestione del software è necessario interagire con entità esterne a quelle del programma
DettagliEccezioni. Comportamento di default (esempio) Propagazione delle eccezioni
Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Eccezioni L esistenza di
DettagliAlgoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema
Algoritmo 2 Procedimento di risoluzione di un problema La programmazione Ver. 2.4 Permette di ottenere un risultato eseguendo una sequenza finita di operazioni elementari Esempi: Una ricetta di cucina
DettagliEccezioni Precisazioni e approfondimenti
Eccezioni Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all eccezione Metodi particolarmente significativi getmessage(): ritorna l istanza di
DettagliJav@Lab Il linguaggio Java I file sequenziali
Jav@Lab Il linguaggio Java I file sequenziali Input e Output Secondo i canoni dei linguaggi di programmazione "procedurali" il concetto di input e output è strettamente legato al tipo di dispositivo esterno
DettagliProgrammazione ad oggetti
Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.
Dettaglidomenica 9 giugno 13 Serializzazione
Serializzazione A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe
DettagliOperazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni
Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliJava Le stringhe. Stringhe
Java Le stringhe 1 Le stringhe in Java In Java le stringhe non sono semplicemente array di caratteri terminati con zero come avviene in C In Java le stringhe sono oggetti appartenenti alla classe String
DettagliInput/Output in Java
Corso Java Input/Output in Java Docente: Dott. Marco Bianchi Slide realizzate da Ing. A.Bei, Dott. M.Bianchi, Dott. F.Lombardi Input/Output in Java Per effettuare operazioni di I/O in Java è possibile
DettagliProgrammazione 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
DettagliEsercitazione OBIETTIVI DELL ESERCITAZIONE
Esercitazione OBIETTIVI DELL ESERCITAZIONE Sperimentare le classi di i/o relative a file di testo e a stream di byte Prendere confidenza con i meccanismi delle eccezioni Esercizi I/O Lo scenario GESTIONE
DettagliEsempio 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
DettagliDefinizione di file. Directory e file File binari e file di testo
I/O Avanzato e File Definizione di file Directory e file File binari e file di testo 5 Definizione di file Directory e file Tutti i sistemi operativi permettono di organizzare le informazioni su hard disk
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 16 ottobre 2007 1 Rappresentazioni di caratteri in C In C un carattere è una costante intera il cui valore è dato dal codice ASCII
DettagliLettura e scrittura - Stream
Lettura e scrittura - Stream Obiettivo(fine della lezione): leggere/scrivere da/su file (e quindi verso qualsiasi dispositivo)! Tipi di stream " Stream di caratteri " Stream di byte! Classi astratte che
Dettagli20 - Input/Output su File
20 - Input/Output su File 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
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
Dettagli18 - 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
DettagliLaboratorio 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[]
DettagliUnità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi
Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio
DettagliSistema Operativo (Software di base)
Il Software Il software del PC Il computer ha grandi potenzialità ma non può funzionare senza il software. Il software essenziale per fare funzionare il PC può essere diviso nelle seguenti componenti:
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio 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
DettagliUso 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
DettagliRappresentazione dell Informazione
Rappresentazione dell Informazione Rappresentazione delle informazioni in codice binario Caratteri Naturali e Reali positivi Interi Razionali Rappresentazione del testo Una stringa di bit per ogni simbolo
DettagliLettura da tastiera e scrittura su monitor
Lettura da tastiera e scrittura su monitor Per poter leggere UN SINGOLO CARATTERE dalla tastiera e visualizzare UN SINGOLO CARATTERE sul monitor si possono utilizzare le funzioni: int getchar (void) (per
DettagliRappresentazione binaria delle variabili (int e char)
Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliErrori 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
DettagliGestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi
Fondamenti di Informatica T-1 modulo 2 Laboratorio 10: preparazione alla prova d esame 1 Esercizio 1 - Gestione degli impegni Gli impegni giornalieri dei dipendenti di un azienda devono essere aggiornati
DettagliUtilizza 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
DettagliUniversità degli studi di Bergamo. Informatica II. Programmazione Object Oriented Tutorato. Lezione 1. Dott. Marco Guarnieri Dott. Eros Magri
Università degli studi di Bergamo Informatica II Programmazione Object Oriented Tutorato Lezione 1 Dott. Marco Guarnieri Dott. Eros Magri 05.10.11 Informazioni Contatti 0guarnieri.marco0@gmail.com erosmagri@gmail.com
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Sintassi e Semantica: Convenzioni di Stile versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi
DettagliPrima prova intercorso 29 Novembre 2005
Laboratorio di Algoritmi e Strutture Dati R.Zizza (matr. dispari-dispari) Anno Acc. 2005-06 Prima prova intercorso 29 Novembre 2005 Cognome: Nome: Matricola: Regole del gioco: La soluzione del compito
DettagliModulo 2: Strutture fondamentali della programmazione Java
Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti
DettagliEsercizio 1: archivio CD e DVD
Esercizio 1: archivio CD e DVD Realizzare un applicazione Java per la creazione e la consultazione di un archivio di dischi ottici (CD e DVD). L applicazione riceve da standard input in maniera interattiva
DettagliProgrammazione 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
DettagliRiferimenti 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?
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliLa gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
Dettagli4 GLI ARRAY E LE STRINGHE
13 4 GLI ARRAY E LE STRINGHE 4.1 Gli array monodimensionali Un array è un insieme di variabili dello stesso tipo, cui si fa riferimento mediante uno stesso nome. L accesso ad un determinato elemento si
DettagliHomework 2. 1 Il problema. Corso di Fondamenti di Informatica II. 26 Novembre L'Albero dei divisori
Homework 2 Corso di Fondamenti di Informatica II BIAR2 (Ing. Informatica e Automatica) e BSIR2 (Ing. dei Sistemi) A.A. 2010/2011 26 Novembre 2010 Sommario Questo documento fornisce informazioni relative
DettagliClassi 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
DettagliLinguaggio C: i file
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa
DettagliPermutazioni. 1 Introduzione
Permutazioni 1 Introduzione Una permutazione su un insieme di n elementi (di solito {1, 2,...,n}) è una funzione biiettiva dall insieme in sé. In parole povere, è una regola che a ogni elemento dell insieme,
DettagliSviluppo di programmi
Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliFILE E INDICI Architettura DBMS
FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni! Dischi! si può leggere qualunque pagina a costo medio fisso! Nastri! si possono leggere le
DettagliIntroduzione alle stringhe e algoritmi collegati
Introduzione alle stringhe e algoritmi collegati Algoritmicamente August 15, 2009 1 Introduzione 1.1 Introduzione ai caratteri In informatica o più generalmente in una terminologia scientifica, il carattere
DettagliCorso Programmazione Java Standard
Corso Programmazione Java Standard Codice: ITJS0113 Durata: 40 ore Descrizione corso Questo corso fornisce una panoramica sulle varie sfaccettature della sintassi del linguaggio Java, integrata con mirate
DettagliINDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso
INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo
DettagliA = Quindi > b=a(:) b =
Una breve digressione. Se si vuole uscire da Matlab, occorre digitare ( come già riferito)il comando >> quit Se si vogliono utilizzare le variabili create per una successiva sessione di lavoro, prima di
Dettagli6 - 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
DettagliClassi 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
DettagliEsercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
DettagliProva d Esame Compito A
Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public
DettagliIL 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
DettagliProprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
DettagliOperazioni numeriche - Input
Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di input 11/11/2004 Laboratorio di Programmazione - Luca Tesei 1 Operazioni fra interi e decimali In Java
DettagliIntroduzione a Java. Riferimenti
Introduzione a Java Si ringraziano Massimiliano Curcio e Matteo Giacalone 1: Introduction 1 Riferimenti! Java tutorial: http://java.sun.com/docs/books/tutorial/! Il Java tutorial è parte di una più ampia
DettagliIndice. Prefazione. 3 Oggetti e Java 53
Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware
DettagliFlussi, lettori e scrittori
Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,
DettagliFile e Stream In Java. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132
File e Stream In Java Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132 Lettura da e scrittura su file Java fornisce operazioni di input/output tramite le classi del package java.io. La
DettagliI/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere
I/O INTERATTIVO scanf: quello che è indispensabile sapere printf: quello che è utile sapere Input da tastiera Funzioni disponibili (tra le altre): scanf getchar Schema di funzionamento Tastiera Sistema
DettagliOggetti e classi. Cos è un oggetto
Oggetti e classi Cos è un oggetto Basta guardarsi intorno per scoprire che il mondo reale è costituito da oggetti: libri, biciclette, giocattoli, ma anche ragazzi, bambini, fiori, gatti, cani, fiumi, montagne,
DettagliModulo III - Creazione di documenti, presentazioni e report
Modulo III - Creazione di documenti, presentazioni e report Elisabetta Ronchieri Università di Ferrara Dipartimento di Economia e Management e-mail: elisabetta.ronchieri@unife.it 1 Dicembre 2016 Elisabetta
DettagliMini-dispensa sui puntatori in C
Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile
DettagliInput e Output in Java
Input e Output in Java Stream Redirecting Scomposizione dell input Uso di file Set di caratteri 1 Inserimento dati e test Riconsideriamo la versione iniziale della classe DataSet usata per illustrare le
DettagliC3 IL DBMS MICROSOFT ACCESS
C3 IL DBMS MICROSOFT ACCESS 1 GERARCHIE OBBLIGATORIE Nella progettazione di una base di dati abbiamo moltissimi gradi di libertà ma anche alcune regole rigide che siamo costretti a rispettare. Il primo
DettagliIntroduzione. Java. Streams. Streams
Java il sistema di I/O G. Prencipe prencipe@di.unipi.it Introduzione La gestione del sistema di I/O è una parte fondamentale di qualsiasi linguaggio di programmazione In questa lezione approfondiremo la
DettagliDesign Patterns. Introduzione 2. Introduzione 3
Design Patterns Introduzione Design patterns: factory, singleton, adapter, composite, decorator, observer Introduzione I Design Patterns sono stati applicati per la prima volta nell architettura Per costruire
DettagliIntroduzione alla Programmazione in Java attraverso un esempio commentato
Corso di Studi in Informatica Programmazione 1 corso B prof. Elio Giovannetti Introduzione alla Programmazione in Java attraverso un esempio commentato Programmazione 1 B - a.a. 2002-03 53 Modello di memoria
Dettagli14 - Metodi e Costruttori
14 - Metodi e Costruttori 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
DettagliProgetto Gennaio 2016
UNIVESITÁ DEGLI STUDI DI MILANO LAUREA TRIENNALE IN COMUNICAZIONE DIGITALE PROGETTO LABORATORIO DI RETI DI CALCOLATORI Progetto Gennaio 2016 Matteo Zignani 15 dicembre 2015 1 PRESENTAZIONE DEL PROBLEMA
DettagliProgrammazione. 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
DettagliSockets in Java. Lorenzo Gallucci
Sockets in Java Lorenzo Gallucci Sockets La libreria Java dispone di un API per la gestione dell I/O di rete Il package di riferimento è java.net Vari compiti: Gestione dell I/O su socket (sia TCP che
Dettagli22 - Strutture Dati (Java Collections Framework)
22 - Strutture Dati (Java Collections Framework) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliProgrammazione 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
DettagliProgrammazione I. 11 gennaio Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): +f(double x):
Programmazione I 11 gennaio 2012 Matricola:........................................................................ Cognome:........................................................................ Nome:...........................................................................
DettagliTipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.
Tipi di dato Le variabili in C KP Cap.3 pp.95-129 Cap.5 pp.190-193 DD Cap. 9 pp.352-355 Abbiamo già parlato delle variabili, ed abbiamo fin ora usato il tipo int, ma abbiamo molte altre possibiltà I tipi
DettagliIL PRIMO PROGRAMMA IN C
IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE
DettagliUnità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
DettagliIl 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