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

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

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

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

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

INTRODUZIONE INTRODUZIONE JAVA JAVA

INTRODUZIONE INTRODUZIONE JAVA JAVA INTRODUZIONE INTRODUZIONE Lo sviluppo di applicazioni complesse porta a costruire moduli software sempre più potenti e versatili, che possano essere riutilizzati in numerosi progetti I linguaggi ad oggetti

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

Programmazione AA 2012 2013

Programmazione AA 2012 2013 Programmazione ad Oggetti AA 2012 2013 Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di progetto Docente: Prof. Alessandro Roncato Contenuti

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

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

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

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

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

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

Outline. Programmazione ad oggetti in Java. La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori

Outline. Programmazione ad oggetti in Java. La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori Programmazione ad oggetti in Java Daniela Micucci Outline La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori 2 Programmazione ad oggetti in Java 1 OOP Java

Dettagli

La programmazione: tradizionale vs Orientata agli Oggetti (OOP)

La programmazione: tradizionale vs Orientata agli Oggetti (OOP) La programmazione: tradizionale vs Orientata agli Oggetti (OOP) In generale, nella soluzione di un problema si individuano dati e funzionalità (azioni) potendola implementare, a livello più semplice, in

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

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

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented Informatica Prof. A. Longheu Introduzione ai Linguaggi Object-Oriented 1 Generalità programmazione OO La programmazione ad oggetti è un particolare modo di scrivere il programma. Si prevede che: 1) si

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

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

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

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo & Monica Scannapieco Anno Accademico 2003/04 LA FASE DI PROGETTO E

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

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

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

Il paradigma OO e le relative metodologie di progettazione. Programmazione orientata agli oggetti

Il paradigma OO e le relative metodologie di progettazione. Programmazione orientata agli oggetti Alessio Bechini - Corso di - Il paradigma OO e le relative metodologie di progettazione Metodologie OO Programmazione orientata agli oggetti La programmazione ad oggetti (OOP) è un paradigma di programmazione

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

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI IL LINGUAGGIO JAVA Dispense per il corso di laboratorio di sistemi I.T.I.S. ABACUS A.S. 2008/2009 Autore: Roberto Amadini Testo di riferimento: La programmazione ad oggetti C++ Java (Lorenzi, Moriggia,

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

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

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

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

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

INGEGNERIA DEL SOFTWARE

INGEGNERIA DEL SOFTWARE INGEGNERIA DEL SOFTWARE JAVA Avvertenza: gli appunti si basano sul corso di Ingegneria del Software tenuto dal prof. Picco della facoltà di Ingegneria del Politecnico di Milano (che ringrazio per aver

Dettagli

Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II

Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II PROF. G. BONGIOVANNI 0) INTRODUZIONE AL LINGUAGGIO JAVA PER PROGRAMMATORI C++...2 0.1) Caratteristiche principali... 2 0.1.1)

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

Iprogrammi scritti in Java sono formati da Classi che

Iprogrammi scritti in Java sono formati da Classi che Capitolo 3. Pesci e Animali Domestici Le Classi di Java Translated by Francesco Orciuoli Iprogrammi scritti in Java sono formati da Classi che rappresentano gli oggetti del mondo reale. Sebbene le persone

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

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

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

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

Class Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014

Class Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014 Università degli Studi dell Aquila Laboratorio di Ingegneria del Software a.a. 2013-2014 Catia Trubiani Dipartimento di Ingegneria e Scienze dell'informazione e Matematica (DISIM)- Università degli Studi

Dettagli

Programmazione Java. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 3. Alfonso Miola Settembre 2007

Programmazione Java. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 3. Alfonso Miola Settembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 3 Programmazione Java Alfonso Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Programmazione Java 1 Contenuti

Dettagli

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA A.A. 2007/08 Tutor: Barbara Pettazzoni barbara.pettazzoni@studio.unibo.it Java: Compilazione e Traduzione Editing, compilazione, esecuzione

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 19 Ricorsione A. Miola Marzo 2012 http://www.dia.uniroma3.it/~java/fondinf/ Ricorsione 1 Contenuti q Funzioni e domini definiti

Dettagli

Livelli di astrazione

Livelli di astrazione Realizzare Classi Astrazione Perdita di dettaglio Utile nella descrizione, progettazione, implementazione e utilizzo di sistemi complessi Dettagli trascurabili vengono incapsulati in sottosistemi più semplici

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

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

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014 Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 20 Ottobre 2014 1 Tipi non Predefiniti Abbiamo visto: Tipi elementari (int, float, char,...) Tipi composti (arrays e tipi non predefiniti) C++ permette

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

Introduzione al linguaggio Java

Introduzione al linguaggio Java Introduzione al linguaggio Java Corso di Gestione della Conoscenza d Impresa Prof. Giovanni Semeraro Dott. Pasquale Lops Dipartimento di Informatica Università degli Studi di Bari A.A. 2006/2007 Credits

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

Sottoprogrammi: astrazione procedurale

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

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

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

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

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

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

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124 UnicastRemoteObject Java RMI fornisce diverse classi base per definire server remoti: UnicastRemoteObject < RemoteServer < RemoteObject dove A < B significa che A è una sottoclasse di B. UnicastRemotObject

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione di Utilizzo ricorsione per processare dati in java vs. multipla

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

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: LA FASE DI REALIZZAZIONE La fase di

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

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

Introduzione a.net (2)

Introduzione a.net (2) Introduzione a.net (2) Il linguaggio C# Implementazioni alternative dell'architettura.net: Rotor Mono C#: un nuovo linguaggio C# : CLR = Java : JVM C# è il linguaggio di riferimento per.net Costruito su

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

! 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

Marco Faella Classi enumerate

Marco Faella Classi enumerate Marco Faella Classi enumerate 22 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com A.A. 2009-2010 Il problema

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

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

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

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

Il linguaggio Java. Definito dalla Sun Microsystems (ora Oracle) nel 1995/96. Esistono anche

Il linguaggio Java. Definito dalla Sun Microsystems (ora Oracle) nel 1995/96. Esistono anche Java Il linguaggio Java Definito dalla Sun Microsystems (ora Oracle) nel 1995/96 Useremo la Standard EdiBon (versione 8) SenBrete parlare anche di jdk e di jre Esistono anche Java PlaIorm Enterprise EdiBon

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Classi astratte Le classi astratte sono un ibrido tra le classi concrete e le interfacce. Hanno le stesse caratteristiche di una

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

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Lezione 5 Dott. Alessandro Roncato 08/11/2011 Riassunto Pattern Singleton Pattern Plolimorfismo Classi e Interfacce 2 Ereditarietà multipla In Java una classe può estendere

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

Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014

Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014 Università degli Studi dell Aquila Laboratorio di Ingegneria del Software a.a. 2013-2014 Catia Trubiani Dipartimento di Ingegneria e Scienze dell'informazione e Matematica (DISIM) - Università degli Studi

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

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

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

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

Fondamenti di programmazione in Java. Lezione III

Fondamenti di programmazione in Java. Lezione III Fondamenti di programmazione in Java Lezione III Scopo della lezione Descrivere gli strumenti che utilizzeremo nel resto del corso per sviluppare programmi in java UltraEdit Java SDK Imparare a scrivere

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

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

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

Corso di Grafica Computazionale

Corso di Grafica Computazionale Corso di Grafica Computazionale Note di C++ Docente: Massimiliano Corsini Laurea Specialistica in Ing. Informatica Università degli Studi di Siena Note Iniziali Il C++ non ha il concetto dei packages In

Dettagli

Connessione ad internet

Connessione ad internet Introduzione al C++ Connessione ad internet Istruzioni per la connessione internet: - una volta connessi, aprire un browser (firefox) - in Modifica/preferenze/avanzate/rete/impostazioni - attivare la modalità

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Da JavaScript a Java

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Da JavaScript a Java Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Da JavaScript a Java Versione 3.4.05 Per la prima lezione in aula e la prima esercitazione in laboratorio 1 Da JavaScript a Java

Dettagli

Programmazione distribuita

Programmazione distribuita Programmazione distribuita 1 Architettura client-server È il modo classico di progettare applicazioni distribuite su rete Server offre un servizio "centralizzato" attende che altri (client) lo contattino

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o

Dettagli

LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI

LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI 1 LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI ( I.D. Falconi ~ 24.01.09) INTRODUZIONE La programmazione orientata agli oggetti (OOP) rappresenta una modalità di programmazione strutturata attraverso la quale

Dettagli

ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci daniela.micucci@unimib.it

ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci daniela.micucci@unimib.it Programmazione con Java ArrayList e Generics Daniela Micucci daniela.micucci@unimib.it ARRAYLIST Programmazione con Java ArrayList e Generics 2 1 La classe ArrayList Fa parte delle librerie standard di

Dettagli

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; } Java è un linguaggio di programmazione c indipendente dalla piattaforma, ovvero un linguaggio di programmazione che permette di compilare i programmi una volta sola e di installarli su computer che usano

Dettagli

Proff. Fabio Ciao e Raffaele Bortone

Proff. Fabio Ciao e Raffaele Bortone ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud

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