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

ANTEFATTO/MOTIVAZIONE: un (cattivo) esempio. Il linguaggio Java e la progettazione di software object-oriented. Richiami sui tipi di dati

ANTEFATTO/MOTIVAZIONE: un (cattivo) esempio. Il linguaggio Java e la progettazione di software object-oriented. Richiami sui tipi di dati ANTEFATTO/MOTIVAZIONE: un (cattivo) esempio Il linguaggio Java e la progettazione di software object-oriented Per realizzare un'applicazione gestionale, di una certa dimensione, vari programmatori sono

Dettagli

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

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

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

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

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Parola chiave extends

Parola chiave extends Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Programmazione in Java Parte I: Fondamenti

Programmazione in Java Parte I: Fondamenti Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Alessio Massetti Politecnico di Milano - A.A. 2011/12 - II Semestre 1 Indice I Introduzione 7 1 Che cos'è l'ingegneria del software? 7 1.1 Denizione..............................

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Introduzione a Classi e Oggetti

Introduzione a Classi e Oggetti Introduzione a Classi e Oggetti Oggetto: concetto astratto Entità di un programma dotata di tre proprietà caratteristiche stato informazioni conservate nell oggetto condizionano il comportamento dell oggetto

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

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html

Dettagli

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

!#$%&&'()#*%+%+!#$',,'()#*%+ -)%*&'&'+'$.)+-$$%&&) !#$%&&'(%)'*+%,#-%#.'%&'#/0)-+#12+3,)4+56#7+#.')8'9 !"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

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

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

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

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

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

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

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte Java riutilizzo delle classi G. Prencipe prencipe@di.unipi.it Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

Object Oriented Programming

Object Oriented Programming OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in

Dettagli

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it Programmazione II Lezione 4 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 30/09/2011 1/46 Programmazione II Lezione 4 30/09/2011 Sommario 1 Esercitazione 2 Panoramica della Programmazione Ad Oggetti 3

Dettagli

Organizzazione degli archivi

Organizzazione degli archivi COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1 Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Elementi di semantica operazionale

Elementi di semantica operazionale Elementi di semantica operazionale 1 Contenuti sintassi astratta e domini sintattici un frammento di linguaggio imperativo semantica operazionale domini semantici: valori e stato relazioni di transizione

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented 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 Programmazione Object Oriented in Java

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Relazioni tra classi Ereditarietà Generalizzazione Specializzazione Aggregazione Composizione Dipendenza Associazione Sommario Relazioni

Dettagli

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi Indice generale OOA Analisi Orientata agli Oggetti Introduzione Analisi Metodi d' analisi Analisi funzionale Analisi del flusso dei dati Analisi delle informazioni Analisi Orientata agli Oggetti (OOA)

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Tipi astratti di dato e loro realizzazione in Java

Tipi astratti di dato e loro realizzazione in Java Unità 13 Tipi astratti di dato e loro realizzazione in Java Sommario Tipo astratto di dato Specifica di tipi astratti Astrazione di valori e astrazione di entità Realizzazione di tipi astratti in Java

Dettagli

Programmazione ad Oggetti. Java Parte I

Programmazione ad Oggetti. Java Parte I Programmazione ad Oggetti Java Parte I Overview Caratteristiche generali 1 Caratteristiche generali Un moderno linguaggio orientato agli oggetti Pensato per lo sviluppo di applicazioni che devono essere

Dettagli

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Informatica 3 Lezione 7 -

Dettagli

Tipi di Dato Ricorsivi

Tipi di Dato Ricorsivi Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi

Dettagli

Java? Sì, grazie. Scopo del corso

Java? Sì, grazie. Scopo del corso Modulo di Java? Sì, grazie Il linguaggio di Internet? Portabilità su qualunque piattaforma (non solo calcolatori): It works everywhere Supporto e disponibilità di strumenti, librerie e documentazione garantiti

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

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

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

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,

Dettagli

3. La sintassi di Java

3. La sintassi di Java pag.9 3. La sintassi di Java 3.1 I tipi di dati statici In Java, come in Pascal, esistono tipi di dati statici predefiniti e sono i seguenti: byte 8 bit da -128 a 127 short 16 bit coincide con l integer

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

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

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD Introduzione alla programmazione Java Dott. Ing. M. Banci, PhD Obiettivi del corso Creare, compilare, e eseguire programmi Java Tipi di dato primitivi Flusso di controllo Java Metodi Arrays Introduzione

Dettagli

Sottoprogrammi: astrazione procedurale

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

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

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

Protezione. Protezione. Protezione. Obiettivi della protezione

Protezione. Protezione. Protezione. Obiettivi della protezione Protezione Protezione La protezione riguarda i meccanismi per il controllo dell accesso alle risorse in un sistema di calcolo da parte degli utenti e dei processi. Meccanismi di imposizione fissati in

Dettagli

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002 Tricks & Tips [Access] - Michele de Nittis - Tutorial - ActiveX - Controllo Tree View Versione: 1 Data Versione: venerdì 30 agosto 2002 1 SOMMARIO PREMESSA...3 INSERIMENTO DEL CONTROLLO...3 AGGIUNTA DELLE

Dettagli

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

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

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

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

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

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso

Dettagli

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Ottava Esercitazione. introduzione ai thread java mutua esclusione Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

Il tipo di dato astratto Pila

Il tipo di dato astratto Pila Il tipo di dato astratto Pila Il tipo di dato Pila Una pila è una sequenza di elementi (tutti dello stesso tipo) in cui l inserimento e l eliminazione di elementi avvengono secondo la regola seguente:

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Linguaggio C - Funzioni

Linguaggio C - Funzioni Linguaggio C - Funzioni Funzioni: Il linguaggio C è di tipo procedurale; ogni programma viene suddiviso in sottoprogrammi, ognuno dei quali svolge un determinato compito. I sottoprogrammi si usano anche

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione

Dettagli