Il linguaggio Java e la progettazione di software object-oriented. Java 1

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il linguaggio Java e la progettazione di software object-oriented. Java 1"

Transcript

1 Il linguaggio Java e la progettazione di software object-oriented Java 1

2 ANTEFATTO/MOTIVAZIONE: un (cattivo) esempio Per realizzare un'applicazione gestionale, di una certa dimensione, vari programmatori sono incaricati di realizzarne parti diverse Alberto è incaricato di programmare l'interfaccia utente, e di definire il tipo Data per memorizzare le date. Bruno utilizza il tipo Data (definito da Alberto) per scrivere la parte di applicazione che gestisce paghe e contributi Java 2

3 Codice C di Alberto Codice C di Bruno typedef struct { int giorno; int mese; int anno; } Data; void stampadata(data d) { printf("%d", giorno); if (d.mese == 1) printf("gen"); else if (d.mese == 2) printf("feb"); printf("%d", anno); } La manipolazione dei dati avviene con accesso diretto alla rappresentazione del tipo: Data d; d.giorno=14; d.mese=12; } d.anno=2000; if (d.giorno == 27) paga_stipendi(); if (d.mese == 12) paga_tredicesime(); inizializzazione di un oggetto di tipo Data uso di un oggetto di tipo data Java 3

4 La definizione di Data cambia! Dopo avere rilasciato una prima versione, Alberto modifica la rappresentazione per semplificare stampadata typedef struct { int giorno; char mese[4]; int anno; } Data ; void stampadata(data d) { printf("%d", d.giorno); } printf("%d", d.mese); printf("%d", d.anno); Java 4

5 Disastro! Il codice scritto da Bruno non funziona più! Occorre modificarlo: Data d; if (d.giorno == 27) paga_stipendi(); if (strcmp(d.mese,"dic")) paga_tredicesime() Java 5

6 Le modifiche sono costose Se la struttura dati è usata in molti punti del programma, una modifica piccola della struttura comporta tante piccole modifiche. Fare tante (piccole) modifiche è: fonte di errori lungo e costoso difficile se documentazione cattiva La realizzazione interna (implementazione) delle strutture dati è una delle parti più soggette a cambiamenti (per maggiore efficienza, semplificazione codice...)! Java 6

7 Soluzione Il problema può essere risolto disciplinando o impedendo l'accesso alla realizzazione della struttura dati. Bruno non deve più scrivere: (d.mese == 12) Java 7

8 Come usare una Data? Se si impedisce a Bruno l'accesso ai campi della struttura Data, come può Bruno utilizzare le date di Alberto? struct Data { int giorno; int mese; int anno }; Il responsabile per Data (Alberto) deve fornire delle operazioni sufficienti agli utilizzatori o clienti del tipo Data (Bruno) Java 8

9 Funzioni predefinite per Data L accesso alla struttura dati è fornito unicamente tramite operazioni predefinite In C: void inizializzadata(data *d, int g, int m, int a) { d->giorno = g; { d->mese = m; d->anno = a; } int leggi_giorno(data d) {return(d.giorno);} int leggi_mese(data d){return(d.mese);} int leggi_anno(data d){return(d.anno);} Java 9

10 Uso delle operazioni predefinite Il codice di Bruno è scritto in modo tale da usare solo le operazioni predefinite: Data d; inizializzadata(*d, 14,12,2000); if (leggi_giorno(d) == 27) paga_stipendi(); if (leggi_mese(d) == 12) paga_tredicesime() Java 10

11 Modifica struttura dati Se Alberto cambia la rappresentazione interna di Data, deve modificare anche le operazioni predefinite (ma lasciandone immutato il prototipo): int leggi_mese(data d){ if (strcmp(d.mese,"gen")) return(1); else if (strcmp(d.mese,"dic")) return(12); } void inizializzadata(data *d, int g, int m, int a)) {d->giorno = g; if (m==1) d->mese = "Gen"; } Ma il codice di Bruno non cambia! Java 11

12 Incapsulamento Abbiamo INCAPSULATO la struttura dati! Ogni modifica alla struttura resta confinata alla struttura stessa Le modifiche sono più semplici più veloci meno costose Java 12

13 Tipo di dato astratto (ADT) Astrazione sui dati che non classifica i dati in base a loro rappresentazione (IMPLEMENTAZIONE), ma in base a loro comportamento atteso )(SPECIFICA). Il comportamento dei dati è espresso in termini di un insieme di operazioni applicabili a quei dati (INTERFACCIA) Le operazioni dell'interfaccia sono le sole che si possono utilizzare per creare, modificare e accedere agli oggetti L'implementazione della struttura dati non può essere utilizzata al di fuori della definizione della struttura. ADT incapsula tutte le operazioni che manipolano i valori del tipo: esporta il nome del tipo l'interfaccia: tutte e sole le operazioni per manipolare oggetti (cioè dati) del tipo e la loro specifica nasconde la struttura del tipo l'implementazione delle operazioni Java 13

14 Progettare l'interfaccia Interfaccia di un ADT: "promessa" ai clienti del tipo che le operazioni saranno sempre valide, anche in seguito a modifiche deve includere tutte le operazioni utili... giorno_dopo: passa al giorno successivo: in C sarebbe: void giorno_dopo(data *d){ d->giorno++; if (d->giorno > 31){/*ma mesi di 30, 28, 29?*/ d->giorno = 1; d->mese++; if (d->mese > 12) { d->mese = 1; d->anno++; } } } Se la funzione non fosse definita da Alberto, Bruno avrebbe difficoltà a scriverla senza accedere ai campi di una Data. Java 14

15 ADT in C? C non ha costrutti linguistici diretti per definire ADT (tipo abstracttypedef). Bruno potrebbe accedere direttamente ai campi della struct che rappresentano la data. Non possiamo impedirglielo. Ma con preprocessore, header files, puntatori, prototipi e una certa disciplina si può separare interfaccia e implementazione. C inoltre manca di molte altre astrazioni utili per programmazione inthe-large, che si ritrovano invece nei linguaggi orientati agli oggetti Java 15

16 Costrutti per ADT Esiste un certo numero di linguaggi di programmazione ("orientati agli oggetti") che: obbligano ad incapsulare le strutture dati all interno di opportune dichiarazioni (CLASSI); consentono facilmente di impedire l'accesso all'implementazione. Java 16

17 Il linguaggio Java Definito dalla Sun Microsystems nel 1995/96. Useremo la versione J2SE 1.5 (Java 2 Standard Edition) Esistono anche J2EE (Java 2 Enterprise Edition) costruita sopra J2SE, offre servlets e JSP, EJB per sviluppare applicazioni "server side" J2ME (Java 2 Micro Edition) per piccoli dispositivi (telefoni, PDA, ) Java 17

18 Caratteristiche Object-oriented (OO) Distribuito RMI Indipendente dalla piattaforma Bytecode e Java Virtual Machine Sicuro Esecuzione in una "sandbox" che garantisce che non si possa dannegiare l'host Java 18

19 Programmazione in-the-small e programmazione in-the-large Programmazione in piccolo (in-the-small) strutturazione del codice per mezzo di astrazioni procedurali adatta all implementazione di dettaglio di piccoli programmi non adatta al progetto di sistemi di grosse dimensione Programmazione in grande (in-the-large) astrazione dai dettagli implementativi per concentrarsi sulla struttura del sistema (information hiding) il concetto di ADT diventa fondamentale i linguaggi orientati agli oggetti (per esempio, Java) supportano esplicitamente la programmazione in grande usa i principi della programmazione in-the-small per rifinire i dettagli implementativi Java 19

20 Quadro d'insieme Programmazione in the small Tipi primitivi Dichiarazione di variabili Strutture di controllo: selezione condizionale, cicli sono identiche a quelle del C: if, switch, while, for... Array (differenze col C) Programmazione in the large Classi Interfacce Packages Java 20

21 Sorpresa! Non esistono i "tradizionali" concetti di "programma" "sottoprogramma" (funzione o procedura) Esistono le classi, che raggruppano (tra le altre cose) dati privati e metodi i metodi sono il termine OO usato per i sottoprogrammi (hanno sintassi analoga alle funzioni C) vedremo tra breve Java 21

22 Un anticipazione: il concetto di classe ADT in Java Java 22

23 La struttura di un programma Java - nozioni preliminari Un programma Java è organizzato come un insieme di classi Ogni classe corrisponde a una dichiarazione di tipo o a una collezione di funzioni Classe contiene dichiarazioni di variabili (attributi) e di funzioni (metodi) Il programma principale è rappresentato da un metodo speciale di una classe, detto main Java 23

24 Il primo programma Java file: HelloWorld.java public class HelloWorld { public static void main(string args[]){ System.out.println( Hello world! ); } } Java 24

25 Esempio di classe in Java class Data { private int giorno; private int mese; private int anno;... public int leggi_giorno(){ ensures (*restituisce il giorno*); public int leggi_mese(){ ensures (*restituisce il mese*); public int leggi_anno(){ ensures (*restituisce l anno*); } class ècome struct, ma alcuni campi possono essere funzioni. Dati e funzioni sono incapsulati. I private sono invisibili all esterno, mentre i public no. Java 25

26 Il costrutto class Una classe può essere vista come un tipo definito dall utente che specifica le operazioni utilizzabili sul tipo stesso. Il tipo può essere usato per dichiarare altre variabili. int a, b; dichiara due variabili a e b sulle quali è possibile fare tutte le operazioni predefinite per il tipo int. Data d; dichiara una variabile d sulla quale è possibile fare tutte le operazioni definite nella classe Data Definisce proprio un ADT. Java 26

27 Classi, istanze (esemplari), oggetti In un programma OO si dichiarano classi per potere definire degli oggetti Un oggetto è una entità viva, che può essere e modificata e letta tramite operazioni Una classe è una sorta di stampo per creare oggetti simili ma distinti. Es. Una classe Data permette di dichiarare variabili di tipo Data Creare oggetti di tipo Data (oggetti e variabili non sono la stessa cosa...) Un oggetto è detto istanza (o esemplare) della classe che abbiamo usato come stampo per crearlo Si dice anche che l oggetto appartiene alla classe Java 27

28 Attributi di una classe La struttura dati di una classe è definita dai suoi attributi class Data { private int giorno; private int mese; private int anno;... giorno, mese, anno sono gli attributi di Data ATTRIBUTI Java 28

29 Oggetti Tutti gli oggetti della stessa classe hanno la stessa struttura Il numero e tipo dei loro attributi di istanza è lo stesso Ad esempio, la classe Data definisce tutte le date possibili, tramite gli attributi giorno, mese, anno. Ogni oggetto, in ogni istante dell esecuzione del programma, è caratterizzato da uno stato, che è dato dal valore degli attributi dell oggetto Lo stato dell oggetto data1 di tipo Data è definito dal valore degli attributi giorno, mese, anno nome dell oggetto nome e valore degli attributi data1 Data giorno = 30 mese = 12 anno = 2001 nome della classe di cui l oggetto è istanza Java 29

30 Oggetti Stato di un oggetto Lo stato rappresenta la condizione in cui si trova l oggetto Lo stato è definito dai valori delle variabili interne all'oggetto (attributi) Comportamento di un oggetto Determina come agisce e reagisce un oggetto È definito dall insieme di operazioni che l oggetto può compiere (metodi) Java 30

31 Metodi di una classe Le operazioni definite nella classe sono chiamati i metodi della classe class Data {... public int leggi_giorno(){...}; public int leggi_mese(){...}; public int leggi_anno(){...};... } M E T O D I Java 31

32 Definizione di metodi I metodi definiscono il comportamento degli oggetti appartenenti ad una classe Ogni metodo è definito come segue: <tipo val. rit.> <nome.>([<dic. par. formali>]) { <corpo> } Il tipo void viene utilizzato per metodi che non restituiscono alcun valore (La nozione di metodo ha forti analogie con quella di funzione del linguaggio C) Java 32

33 Accesso ad attributi e metodi Tramite la "notazione punto" Esempio: Data d; int x;...//codice che inizializza d x = d.leggi_giorno(); Esegue leggi_giorno() su oggetto d: restituisce valore del giorno della data d. E come se leggi_giorno() avesse come argomento implicito d: in C scriveremmo: leggi_giorno(d); Si dice anche che all oggetto d inviamo il messaggio leggi_giorno Java 33

34 Qualche cambiamento... Cambia la sintassi... Data d;... if (d.giorno_di_paga()) paga_stipendi(); if (d.mese_13esima()) paga_tredicesime()... L accesso ad attributi e metodi di un oggetto si effettua tramite la "notazione punto" analogia con le struct del C.. e la terminologia int a; -- a è una variabile di tipo int Data d; -- d è una variabile di classe Data Java 34

35 Oggetti mutabilii Lo stato degli oggetti (mutabili) può cambiare nel tempo, chiamando metodi opportuni data1 Data giorno = 30 mese = 12 anno = 2001 data1.giorno_dopo() data1 Data giorno = 31 mese = 12 anno = 2001 NB: Esistono alcuni casi in cui gli oggetti sono immutabili (cioè non possono essere modificati), come ad es. la classe predefinita String Java 35

36 Il metodo giorno_dopo() Per modificare lo stato, il metodo deve potere accedere ai campi dell oggetto su cui è stato chiamato: Nella definizione di un metodo ci si può riferire direttamente (senza notazione punto) ad attributi e metodi dell oggetto sul quale il metodo sia stato invocato class Data {... public void giorno_dopo(){ ensures (*incrementa la data*) giorno++; if (giorno > 31){ giorno = 1; mese++; if (mese > 12) { mese = 1; anno++;}}} Data d; d.giorno_dopo(); /*modifica lo stato dell oggetto d*/ Java 36

37 Private e Public Attraverso i metodi "public" di una classe è possibile vedere qual è lo stato di un oggetto... Data d; int x;... x = d.leggi_giorno(); ma non accedere ai dati "private" (al di fuori del codice di Data): if (d.mese ==12)... **Errore di compilazione!** Il costrutto di classe consente quindi di definire un tipo di dato astratto. Java 37

38 Programmazione "in the small" Java 38

39 Tipi primitivi e variabili Tipi numerici: byte: 8 bit Dichiarazione di variabili short: 16 bit byte un_byte; int: 32 bit int a, b=3, c; long: 64 bit char c= h, car; float: 32 bit double: 64 bit Altri tipi: boolean: true false char: 16 bit, carattere Unicode boolean trovato=false; Java 39

40 Variabili e tipi riferimento Tutte le variabili hanno un tipo dichiarato Le variabili di tipo primitivo (numerico, char, bool) contengono il valore Tutte le altre contengono riferimenti a valori (ecco perché si dicono essere "di tipo riferimento") I tipi riferimento sono: Tipi definiti dall utente (Classi, Interfacce) Tipi array Enumerazioni Le classi sono anche dette tipi riferimento: possono essere usate per dichiarare variabili che contengono riferimenti tipi riferimento possono essere utilizzati ovunque si usi un tipo: dichiarazioni di variabili e parametri, tipo del valore restituito da una funzione... Le variabili consentono di accedere agli oggetti sono allocate nello stack a run-time quando si chiama il sottoprogramma in cui sono dichiarate (gli oggetti referenziati dalle variabili sono invece allocati sullo heap) sono deallocate quando il sottoprogramma ritorna al chiamante Java 40

41 Ancora su tipo riferimento Ogni variabile dichiarata con una classe contiene un riferimento a un oggetto: un indirizzo di memoria il valore effettivo dell indirizzo non è noto e non interessa Un oggetto è memorizzato in una opportuna area di memoria d, di tipo Data,contiene l indirizzo della prima cella dell oggetto d xxx 3 giorno 11 mese 1991 anno Java 41

42 Dichiarazione e inizializzazione La dichiarazione di una variabile di tipo riferimento non alloca spazio per un oggetto, ma solo per il riferimento ad un oggetto A una variabile di tipo riferimento è assegnato inizialmente il riferimento null, per indicare che la variabile non è ancora associata ad alcun oggetto Es. Data d; d vale null: non esiste ancora un oggetto di tipo Data. Un parametro o una variabile locale non possono essere usati senza essere inizializzati (compilatore rileva staticamente mancanza di inizializzazione) In entrambi i casi occorre costruire un oggetto e inizializzarlo esplicitamente Java 42

43 New La costruzione di un oggetto si realizza dinamicamente tramite l operatore new Esempio: Data d = new Data(); Effetto di new: Costruisce un nuovo oggetto di tipo Data Restituisce il riferimento all oggetto appena creato Il riferimento viene conservato nella variabile d per potere usare l oggetto Data() è un metodo particolare (ha lo stesso nome della classe, si riconosce come metodo dalle parentesi () ) chiamato COSTRUTTORE Java 43

44 Differenze tra dichiarazione e creazione Data data; data = new Data( ); data = new Data( ); data Creato Creato con con la la prima primanew. Data Data Creato Creato con con la la seconda secondanew. new. Il Il riferimento riferimento al al primo primo oggetto oggetto Data Data èè perso. perso. Non Non c è c èpiù piùmodo di di accedere accedere all oggetto. all oggetto. L oggetto L oggetto verrà verràdistrutto dal dal garbage garbagecollector. Java 44

45 La visione a "run-time" i m k y h 6 "abcd" [0, 0, 0] una persona Dichiarazioni all'interno di un sottoprogramma int i = 6; int [ ] m = {0, 0, 0}; String k = "abcd"; Persona y = new Persona(); String h; h=k; crescita dello stack Java 45

46 Condivisione (sharing) Un oggetto è condiviso tra due variabili se entrambe accedono a esso L'assegnamento di variabili di tipo riferimento genera condivisione (vedi k e h nell'esempio precedente) Se oggetti condivisi sono modificabili, le modifiche apportate attraverso una variabile sono visibili anche attraverso l'altra (side effect) Java 46

47 Conseguenze allocazione stack vs. heap Quando un metodo termina, tutte le variabili del corrispondente record di attivazione sono distrutte...pero gli oggetti creati sullo heap NON sono necessariamente distrutti public static Data foo() { Data d = new Data(1,1,1990); return d; } public static void main(string args[]) { Data x = foo();... /*d esiste solo sullo stack durante l esecuzione di foo(), ma viene deallocata quando foo() termina. Ma l oggetto costruito continua a vivere sullo heap!!!*/ d x xxx xxx Java 47

48 Tipi array Dato un tipo T (predefinito o definito dall utente) un array di T è definito come: T[] Similmente sono dichiarati gli array multidimensionali: T[][] T[][][] Esempi: int[] float[][] Persona[] Java 48

49 Tipi array: dichiarazione e inizializzazione Dichiarazione: int[] ai1, ai2; float[] af1; double ad[]; Persona[][] ap; Inizializzazione: int[] ai={1,2,3}; double[][] ad={{1.2, 2.5}, {1.0, 1.5}} Java 49

50 Il caso degli array In mancanza di inizializzazione, la dichiarazione di un array non alloca spazio per gli elementi dell array L allocazione si realizza dinamicamente tramite l operatore: new <tipo> [<dimensione>] int[] i=new int[10], j={10,11,12}; float[][] f=new float[10][10]; Persona[] p=new Persona[30]; Se gli elementi non sono di un tipo primitivo, l operatore new alloca solo lo spazio per i riferimenti Java 50

51 Array di oggetti: Definizione A Person[ ] person; person = new Person[20]; person[0] = new Person( ); E E definita definita solo solo la la variabile variabile person. person. L array L array vero vero e e proprio proprio non non esiste esiste person Java 51

52 Array di oggetti: Definizione B Person[ ] person; person = new Person[20]; person[0] = new Person( ); Ora Ora l array l array èè stato stato creato creato ma ma i i diversi diversi oggetti oggetti di di tipo tipo Person Personnon non esistono esistono ancora. ancora. person Java 52

53 Array di oggetti: Definizione C Person[ ] person; person = new Person[20]; person[0] = new Person( ); Un Un oggetto oggetto di di tipo tipo persona persona èè stato stato creato creato e e un un riferimento riferimento a a tale tale oggetto oggetto èè stato stato inserito inserito in in posizione posizione0. 0. person Person Java 53

54 Array di oggetti vs. array di tipi base L istruzione: float f[] = new float[10]; crea un oggetto di tipo array di float e alloca spazio per 10 float f L istruzione: Person p[] = new Person[10]; crea un oggetto di tipo array di Person e alloca spazio per 10 riferimenti a oggetti di tipo Person Non viene allocato spazio per gli oggetti veri e propri f Java 54

55 Loop generalizzato per collezioni Se abbiamo una collezione C di elementi di tipo T, possiamo itrerare su di essi scrivendo for (T x: C) { esegui azioni su x } anche gli array sono collezioni, quindi Java 55

56 Esempio per array int sum (int [ ] a) { int result = 0; for (int n : a) result += n; return result; } n indica il generico elemento dell'arry, NON l'indice! Java 56

57 I concetti fondamentali per la programmazione in the large Classi Metodi Interfacce Information Hiding Ereditarietà Polimorfismo e binding dinamico Packages Java 57

58 Classi e ADT Il costrutto di classe consente di definire tipi di dati astratti (ADT) Un ADT permette di estendere il linguaggio con nuovi tipi di dato Per ottenere un nuovo tipo di dato bisogna definire: l insieme dei possibili valori le operazioni possibili sugli oggetti del tipo Java 58

59 Linguaggi orientati agli oggetti Il costrutto di classe è caratteristico dei linguaggi orientati agli oggetti (OO) Caratteristiche principali (ne vedremo altre) Incapsulamento delle strutture dati Protezione, al fine di impedire l'accesso all'implementazione (information hiding) Java 59

60 Definizione di una nuova classe Una nuova classe viene definita nel seguente modo: <visibilità> class <nome classe> { <lista di definizioni di attributi, costruttori e metodi> } Esempio: class Automobile { } String colore, marca, modello; int cilindrata, numporte; boolean accesa; attributi Java 60

61 Metodi I metodi sono procedure che appartengono agli oggetti (se non si usa la parola chiave static vedremo ) hanno come parametro implicito l oggetto cui appartengono (this) Java 61

62 Definizione di metodi: esempio class Automobile { String colore, marca, modello; int cilindrata, numporte; boolean accesa; void accendi() {accesa=true;} boolean puopartire() {return accesa;} void dipingi(string col) {colore=col;} void trasforma(string ma, String mo) { marca=ma; modello=mo; } } Java 62

63 Chiamata di metodi -semantica- 1. Vengono valutati i parametri attuali 2. Viene creata area dati ("record di attivazione") sullo stack spazio per i parametri formali (inizializzati col valore degli attuali) spazio per le variabili locali 3. Esecuzione del corpo si tratta di puntatori agli oggetti, tranne che per il caso dei tipi primitivi Java 63

64 Invocazione dei metodi Regola per il passaggio parametri: I parametri il cui tipo sia uno dei tipi semplici sono passati per copia I parametri il cui tipo sia un tipo riferimento (classi, interfacce, array, enumerazioni) sono passati per riferimento (ovvero viene copiato il riferimento) Java 64

65 Passaggio parametri e reference: esempio 1 public class Date { public static void reinizializza(date d) {// riporta d al 31/12/1999 d.day = 31; d.month = 12; d.year = 1999; } public static void main(string[] args) { Date d1 = new Date(1,1,1990); Date.reinizializza (d1); Al Quando momento la della funzione chiamata: termina, d1 e' 31/12/1999 d d1 xxx xxx Java 65

66 Passaggio parametri e reference: esempio 2 public class Date {... void copiain(date d) {// copia in d l'oggetto corrente d.day = day; d.month = month; d.year = year;} public static void main(string[] args) { Date d1 = new Date(3,2,1984); Date d2 = new Date(1,1,1990); d1.copiain(d2); Al Quando momento la della funzione chiamata: termina, d2 e' 3/2/1984 d2 d xxx xxx d1 yyy Java 66

67 Accesso ad attributi e metodi locali Nella definizione di un metodo ci si riferisce ad attributi e metodi dell oggetto sul quale il metodo sia stato invocato direttamente (senza notazione punto) Esempio class Automobile { String colore; } void dipingi(string col) {colore=col;}... Java 67

68 Visibilità dei nomi Le variabili locali a un metodo (o i parametri formali) possono mascherare gli attributi della classe Soluzione: La pseudo-variabile this contiene un riferimento all oggetto corrente e può essere utilizzata per aggirare eventuali mascheramenti Java 68

69 this per aggirare mascheramenti La pseudo-variabile this contiene un riferimento all oggetto corrente e può essere utilizzata per aggirare eventuali mascheramenti public class Automobile { private String colore, marca, modello;... public void trasforma(string marca, String modello){ this.marca=marca; this.modello=modello;} }... Automobile a = new Automobile(); a.trasforma( Ford, T4 ); => a.marca diventa Ford, a.modello diventa T4 Java 69

70 La pseudo-variabile this: esempio class Data {... public void giorno_dopo(){ //MODIFIES: this //REQUIRES: this è una data valida //EFFECTS: incrementa la data this.giorno++; if (this.giorno > 31){ this.giorno = 1; this.mese++; Data d1, d2; //d1 e d2 inizializzate qui d1.giorno_dopo(); qui in giorno_dopo this è lo stesso reference di d1. d2.giorno_dopo(); qui in giorno_dopo this è lo stesso reference di d2. Java 70

71 this per restituire un reference La pseudo-variabile this può essere utilizzata per restituire un riferimento all'oggetto corrente. public class InsiemeDiInteri {... public InsiemeDiInteri inserisci(int i){ //modifica this inserendovi l elemento i return this; //restituisce l insieme modificato... }. }.. InsiemeDiInteri x,y,z;.//qui x e y sono inizializzate opportunamente z = (x.inserisci(2)).unione(y) //utile che inserisci restituisca insieme Java 71

72 Oggetti mutabili (richiamo...) Lo stato degli oggetti mutabili può cambiare nel tempo, chiamando metodi opportuni data1 Data giorno = 30 mese = 12 anno = 2001 data1.giorno_dopo() data1 Data giorno = 31 mese = 12 anno = 2001 NB: Esistono alcuni casi in cui gli oggetti sono immutabili (cioè non possono essere modificati), come ad es. la classe predefinita String Java 72

73 Oggetti immutabili L'oggetto "abcd" (in quanto "String") è immutabile: il suo stato non cambia non esistono operazioni che consentono di modificare lo stato di un oggetto string In generale, invece, gli oggetti sono mutabili: int [ ] x = {0, 0, 0}; x[0] = 5; Java 73

74 La classe predefinita String Stringin Java è un tipo riferimento (è definito da una classe) Due regole base: Variabile di tipo String è un oggetto, manipolato con un reference le stringhe sono immutabili (non si possono aggiungere o togliere caratteri a una stringa, ma occorre costruirne una nuova) (per avere stringhe mutabili si usa StringBuffer) Per le stringhe c è operatore di concatenamento + Costruttori: String() String(String s) Metodi (pubblici): int length() restituisce la lunghezza di una stringa; char charat(int index) restituisce il char alla posizione index (il primo ha posizione 0) String substring(int beginindex) (parte da 0) Java 74

75 La classe String: esempio d uso public class ProvaString { //OVERVIEW: public static void main (String argv[]) { String a = new String(); //a è reference a stringa vuota String b = new String("Ciao ); //b è reference a stringa Ciao : //abbreviazione: String b = "Ciao ; String c = new String(b); //Ora c e' copia di b String d = b; //d e b sono alias System.out.println(b + " " + c + " + d); } } L assegnamento d=b e assegnamento dei reference! Non si copia l oggetto! Java 75

76 Private e public Attraverso i metodi "public" di una classe è possibile vedere qual è lo stato di un oggetto... Data d; int x;... x = d.leggi_giorno(); ma non accedere ai dati "private" (al di fuori del codice di Data): if (d.mese ==12)... **Errore di compilazione!** Il costrutto di classe consente quindi di definire un tipo di dato astratto. Java 76

77 Overloading di metodi All interno di una stessa classe possono esservi più metodi con lo stesso nome purché si distinguano per numero e/o tipo dei parametri Attenzione: Il tipo del valore di restituito non basta a distinguere due metodi (motivo: a volte un metodo può essere chiamato solo per i side-effect e valore restituito è ignorato) Nozione di SEGNATURA in Java: l informazione sul numero, il tipo e la posizione dei parametri; NB non include il tipo del valore restituito Metodi overloaded devono avere segnature diverse Utile per definire funzioni con codice differente ma con effetti simili su tipi diversi. Esempio: class prova { int max(int a, int b, int c) {...} double max(double a, double b) {...} int max(int a, int b) {...} } Ogni volta è chiamata la funzione "giusta" max(2,3,5); max(2.3, 3.14); max(2,3); Tipico esempio: i costruttori Java 77

78 Overloading: un esempio class C { int f() {...} int f(int x) {...} // corretto C ref = new C(); ref.f(); //distinguibile } void f(int x) {...} // errato ref.f(5); //??? Java 78

79 Argomenti in numero variabile In Java 1.5 si possono creare metodi e costruttori con un numero variabile di argomenti public void foo(int count, String... cards) { body }... significazero o piu' argomenti (qui, zero o piu' Stringhe) Esempio di chiamata foo(13, "ace", "deuce", "trey"); Solo l'ultimo argomento puo' essere un vararg Possibile iterare, mediante il ciclo for generalizzato: for (String card : cards) { loop body } Java 79

80 Creazione e distruzione degli oggetti Se implementazione deve essere private, unico modo per inizializzare un oggetto è specificare uno o più metodi particolari, chiamati costruttori La creazione di un oggetto comporta sempre l invocazione di un costruttore. Il costruttore svolge due operazioni fondamentali, obbligandoci a definirle assieme: l allocazione della memoria necessaria a contenere l oggetto l inizializzazione dello spazio allocato, assegnando opportuni valori A differenza del C, in Java non è necessario deallocare esplicitamente gli oggetti. Di ciò si occupa il garbage collector, che è una routine di sistema che provvede automaticamente a liberare memoria quando serve (invece in C/C++ ) Java 80

81 Costruttori Un costruttore è un metodo speciale: ha lo stesso nome della classe il suo codice viene invocato in risposta al messaggio new tipicamente contiene il codice necessario ad inizializzare gli attributi dell oggetto in via di creazione non ha un tipo del risultato (è implicito nel nome del costruttore) Si possono definire più costruttori con lo stesso nome (ma numero o tipo dei parametri deve essere diverso): overloading dei costruttori Vantaggio: all allocazione si esegue sempre anche l inizializzazione, eliminando una frequente fonte di errori. Java 81

82 Esempio di costruttore public class Date { private int month, day, year; public Date(int d, int m, int y) { // day month year year = y; month = m; day =d)... } Date d = new Date(3,12,1987); Crea un oggetto d di tipo Date e lo inizializza al 3/12/1987 Vantaggio: il metodo Date(...) consente di inizializzare una Data. Ad esempio, potrebbe anche verificare che la data sia legale, rifiutando il 31/2/2002 Java 82

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case 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 La fase di realizzazione si occupa

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

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

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

P a s q u a l e t t i V e r o n i c a

P a s q u a l e t t i V e r o n i c a PHP: OOP Pasqualetti Veronica Oggetti Possiamo pensare ad un oggetto come ad un tipo di dato più complesso e personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi. 2 Gli oggetti

Dettagli

Funzioni. Corso di Fondamenti di Informatica

Funzioni. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Funzioni Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Scuola Specializzazione Istruzione Superiore Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Michele Batocchi ITC Vittorio Emanuele II Perugia A.S. 2007/2008 Introduzione

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica L uso delle funzioni in C++ Claudio De Stefano - Corso di Fondamenti di Informatica 1 Funzioni Nel C++ è possibile scomporre problemi complessi in moduli più semplici

Dettagli

Riferimenti ed Oggetti

Riferimenti ed Oggetti Riferimenti e oggetti Riferimenti ed Oggetti In non si possono definire variabili di tipo oggetto ma solo di tipo riferimento a oggetto. I riferimenti sono assimilabili ai tipi base. Allocazione statica

Dettagli

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java Fondamenti di Informatica Dichiarazione, creazione e gestione di array in Java Array in Java - creazione La creazione fa una inizializzazione implicita: num = new int[10]; con valore 0 per int e double,

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Struttura di un programma Java. Package. Uso dei package

Struttura di un programma Java. Package. Uso dei package 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) Struttura di un programma

Dettagli

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public: 1 Pila.h versione 6 struct Pila { private: int size; int defaultgrowthsize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialsize) ; Pila(); ~Pila() ; void copy(pila * to)

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Lezione 9: Strutture e allocazione dinamica della memoria

Lezione 9: Strutture e allocazione dinamica della memoria Lezione 9: Strutture e allocazione dinamica della memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 9 Maggio 2012 Allocazione dinamica della memoria Memoria dinamica È possibile creare

Dettagli

Programmazione Funzionale

Programmazione Funzionale Programmazione Funzionale LP imperativi: apparenza simile modello di progettazione = macchina fisica Famiglia dei LP imperativi = progressivo miglioramento del FORTRAN Obiezione: pesante aderenza dei LP

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

Gestione dinamica di una pila

Gestione dinamica di una pila Gestione dinamica di una pila Una pila o stack è una lista lineare a lunghezza variabile in cui inserimenti (push) ed estrazioni (pop) vengono effettuate ad un solo estremo, detto testa (top) della pila.

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31 Le Liste Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Le Liste 1 / 31 Cos è una Lista Una lista è una collezione di elementi omogenei che: potrebbero

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI di Luca Carnini Tesina presentata per la discussione del diploma di laurea in Ingegneria informatica Politecnico di Milano sede

Dettagli

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi alternative: function nome { lista-comandi } oppure nome ( ) {

Dettagli

IL LINGUAGGIO C++ Configurazione di Dev-C++

IL LINGUAGGIO C++ Configurazione di Dev-C++ IL LINGUAGGIO C++ Note sull'uso di DevC++ Requisiti di sistema per Dev-C++ - Sistema operativo Microsoft Windows 95, 98, Millenium Edition, NT 4, 2000 o XP - RAM: 8 Mb (consigliati almeno 32 Mb) - CPU:

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Linguaggio C: introduzione Il linguaggio C è un linguaggio general purpose sviluppato nel 1972 da Dennis Ritchie per scrivere il sistema operativo UNIX ed alcune applicazioni per un PDP-11. Il linguaggio

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

Dettagli

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni: FUNZIONI La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni: double sqrt(double) double pow (double, double) della libreria matematica, che abbiamo già usato anche senza

Dettagli

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Le Stringhe. Un introduzione operativa. Luigi Palopoli Le Stringhe p.1/19 Le Stringhe Un introduzione operativa Luigi Palopoli ReTiS Lab - Scuola Superiore S. Anna Viale Rinaldo Piaggio 34 Pontedera - Pisa Tel. 050-883444 Email: palopoli@sssup.it URL: http://feanor.sssup.it/

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java] Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Descrizioni VHDL Behavioral

Descrizioni VHDL Behavioral 1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

Corso di Informatica Medica Esercitazione 1I 2013-2014.! Alessandro A. Nacci nacci@elet.polimi.it - alessandronacci.com

Corso di Informatica Medica Esercitazione 1I 2013-2014.! Alessandro A. Nacci nacci@elet.polimi.it - alessandronacci.com Corso di Informatica Medica Esercitazione 1I 2013-2014! Alessandro A. Nacci nacci@elet.polimi.it - alessandronacci.com 1 2 Esercizio 1 Scrivere un programma che legga due array di interi da tastiera dica

Dettagli

Record in C: il costruttore struct.

Record in C: il costruttore struct. Record in C: il costruttore struct. Le variabili di tipo record e i nuovi tipi record si dichiarano in C tramite il costruttore di tipo struct:. ::= ;

Dettagli

La ricorsione. Politecnico di Milano Sede di Cremona

La ricorsione. Politecnico di Milano Sede di Cremona La ricorsione Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Definizioni ricorsive Sono comuni

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it INTRODUZIONE, LINGUAGGIO, HANDS ON Giuseppe Cirillo g.cirillo@unina.it Il linguaggio C 1972-Dennis Ritchie 1978-Definizione 1990-ANSI C 1966 Martin Richars (MIT) Semplificando CPL usato per sviluppare

Dettagli

I class diagram. Class - names

I class diagram. Class - names I class diagram Forniscono una vista strutturale (statica) del sistema in termini di classi attributi operazioni relazioni tra classi (associazioni, generalizzazioni,...) Un class diagram rappresenta uno

Dettagli

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Cos è una stringa (1) Stringhe DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Una stringa è una serie di caratteri trattati come una singola unità. Essa potrà includere lettere, cifre, simboli e caratteri

Dettagli

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) System Overview di Mattia Bargellini 1 CAPITOLO 1 1.1 Introduzione Il seguente progetto intende estendere

Dettagli

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili Indirizzo di una funzione 2 Puntatori a funzioni Ver. 2.4 Si può chiamare una funzione utilizzando l indirizzo di memoria dal quale inizia il codice eseguibile della funzione stessa L indirizzo di memoria

Dettagli

Progettazione Orientata agli Oggetti

Progettazione Orientata agli Oggetti Progettazione Orientata agli Oggetti Sviluppo del software Ciclo di vita del software: comprende tutte le attività dall analisi iniziale fino all obsolescenza (sviluppo, aggiornamento, manutenzione) Procedimento

Dettagli

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero ---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero delle variabili a cui possono essere assegnati gli indirizzi

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

Introduzione a MySQL

Introduzione a MySQL Introduzione a MySQL Cinzia Cappiello Alessandro Raffio Politecnico di Milano Prima di iniziare qualche dettaglio su MySQL MySQL è un sistema di gestione di basi di dati relazionali (RDBMS) composto da

Dettagli

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

Il ciclo di vita del software

Il ciclo di vita del software Il ciclo di vita del software Il ciclo di vita del software Definisce un modello per il software, dalla sua concezione iniziale fino al suo sviluppo completo, al suo rilascio, alla sua successiva evoluzione,

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica A.A. 2007-08 CORSO DI INGEGNERIA DEL SOFTWARE Prof. Giulio Destri http://www.areasp.com (C) 2007 AreaSP for

Dettagli

Verifica che una grammatica sia Context Free nel GrammaReader

Verifica che una grammatica sia Context Free nel GrammaReader Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare

Dettagli

Prof. Caterina Rizzi Dipartimento di Ingegneria Industriale

Prof. Caterina Rizzi Dipartimento di Ingegneria Industriale RUOLO DELLA MODELLAZIONE GEOMETRICA E LIVELLI DI MODELLAZIONE PARTE 2 Prof. Caterina Rizzi... IN QUESTA LEZIONE Modelli 2D/3D Modelli 3D/3D Dimensione delle primitive di modellazione Dimensione dell oggettoy

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 14 - Thread in Java 1 Cos è un

Dettagli

SIMATIC. SCL per S7-300/400 Programmazione di blocchi. Prefazione, Contenuto. Parte 1: Sviluppo di programmi. Parte 2: Uso e test

SIMATIC. SCL per S7-300/400 Programmazione di blocchi. Prefazione, Contenuto. Parte 1: Sviluppo di programmi. Parte 2: Uso e test Prefazione, Contenuto Parte 1: Sviluppo di programmi Parte 2: Uso e test SIMATIC Parte 3: Descrizione del linguaggio Programmazione di blocchi Appendici Glossario, Indice analitico Manuale Numero di ordinazione

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

Dettagli

Gest ione di list e in C

Gest ione di list e in C Gest ione di list e in C Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Strutture dinamiche Gli

Dettagli

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project NB: E necessario: adoperare la sintassi più evoluta per le direttive di precompilazione 1, usando come contenitore

Dettagli

Esercizi svolti durante le ore di Informatica e Sistemi automatici nelle classi del Liceo Scientifico Tecnologico del Liceo Milli di Teramo

Esercizi svolti durante le ore di Informatica e Sistemi automatici nelle classi del Liceo Scientifico Tecnologico del Liceo Milli di Teramo Esercizi svolti durante le ore di Informatica e Sistemi automatici nelle classi del Liceo Scientifico Tecnologico del Liceo Milli di Teramo /*Caricare un vettore di n numeri float, ordinarlo e e stamparlo

Dettagli

Applicazione: Share - Sistema per la gestione strutturata di documenti

Applicazione: Share - Sistema per la gestione strutturata di documenti Riusabilità del software - Catalogo delle applicazioni: Gestione Documentale Applicazione: Share - Sistema per la gestione strutturata di documenti Amministrazione: Regione Piemonte - Direzione Innovazione,

Dettagli

Sistemi Intelligenti Naturali Artificiali Corso di programmazione C/C++

Sistemi Intelligenti Naturali Artificiali Corso di programmazione C/C++ Sistemi Intelligenti Naturali Artificiali Corso di programmazione C/C++ Lorenzo Natale (nat@dist.unige.it) DIST, Università di Genova Introduzione Il linguaggio C nasce negli anni settanta come linguaggio

Dettagli