Sgomberiamo il campo dai dubbi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Sgomberiamo il campo dai dubbi"

Transcript

1 Il linguaggio Java 1 Sgomberiamo il campo dai dubbi Cosa non è Java: Non è un linguaggio per animare il WWW Non è una versione ridotta del C++ Non è lo strumento che segnerà la fine di Microsoft Cosa è Java Un moderno linguaggio di programmazione OO Orientato alla programmazione di applicazioni network-centric 2

2 Perché Java Il problema: L inadeguatezza dello schema di sviluppo tradizionale (binary distribution) in ambienti distribuiti e multipiattaforma La soluzione: Java, un linguaggio O.O. per lo sviluppo di applicazioni architecture independent, robuste, adattabili, scalabili ed efficienti 3 Java: caratteristiche generali - 1 Familiare: La sintassi di Java ricalca la sintassi del C++ Un programmatore C++ non incontra grosse difficoltà ad imparare il linguaggio Java Semplice: Programmare usando Java è molto più semplice di programmare usando altri linguaggi OO (C++) Un buon programmatore Java è più produttivo di un buon programmatore C++ 4

3 Java: caratteristiche generali - 2 Object-oriented: Java è un linguaggio OO puro con ereditarietà, binding dinamico ed oggetti gestiti tramite riferimenti Il costrutto delle interfaces fornisce le potenzialità dell ereditarietà multipla senza alcun problema di duplicazione di codice Portabile: La specifica del linguaggio non contiene componenti implementation dependent 5 Java: caratteristiche generali - 3 Architecture neutral: L applicazione viene compilata in un linguaggio intermedio (Java ByteCode) che viene interpretato L interprete nasconde le caratteristiche peculiari dell hardware e del sistema operativo Lo stesso codice oggetto può essere eseguito su tutte le piattaforme per le quali venga fornito un interprete Java (attualmente Solaris, Windows NT/95, MacOS, OS/2, AIX, e Linux) 6

4 Java: caratteristiche generali - 4 Dinamico: Le fasi di loading e linking avvengono a run-time Robusto: Java è un linguaggio fortemente tipizzato con numerose caratteristiche che diminuiscono la possibilità di introdurre errori nelle applicazioni, tra le quali: assenza di puntatori abbondanza di controlli run-time (rispetto dei limiti degli array, controlli di tipo, controlli sul codice caricato dinamicamente, ecc.) gestione automatica della memoria (garbage collecting) 7 Java: caratteristiche generali - 5 Multi-threaded: Java supporta la gestione dei thread a livello di linguaggio, oltre che di macchina virtuale, fornendo la possibilità di creare facilmente applicazioni concorrenti 8

5 L ambiente Java Java Source Byte code Loader Java Compiler Byte Code moves through network or file system Byte code Verifier Java Byte Code Interpreter Machine Code Generator (JIT) Run time Hardware/OS 9 Java - il primo programma file: HelloWorld.java public class HelloWorld { public static void main(string args[]){ System.out.println( Hello world! ); 10

6 Compilazione ed esecuzione c:\classes>javac HelloWorld.java c:\classes>java HelloWorld HelloWorld! c:\classes> 11 La struttura di un programma Java - nozioni preliminari Un programma Java è organizzato come un insieme di classi Classi diverse possono essere raggruppate all interno della stessa Compilation unit Il programma principale è rappresentato da un metodo speciale della classe il cui nome coincide con il nome del programma 12

7 Java - il primo programma grafico File: HelloWorldWindow.java import java.awt.*; package examples, class HelloWorldWindow { public static void main(string args[]) { Frame f=new Frame("HelloWorldWindow"); f.add(new Label("HelloWorld!",Label.CENTER),"Center"); f.pack(); f.setvisible(true); 13 Compiliazione ed esecuzione c:\classes>cd examples c:\classes\examples>javac HelloWorldWindow.java c:\classes\examples>cd.. c:\classes>java examples.helloworldwindow c:\classes> 14

8 La struttura di un programma Java Package Ogni package contiene una o più compilation unit Il package introduce un nuovo ambito di visibilità dei nomi Compilation unit Ogni compilation unit contiene una o più classi o interfaccie delle quali una sola pubblica Classi e interfaccie Relazioni con il file system package directory compilation unit file 15 Il linguaggio Java in dettaglio Costrutti per la programmazione in the small Il type system di Java Tipi predefiniti e relative costanti ed operatori Tipi definiti dall utente Dichiarazione di variabili Istruzioni per il controllo di flusso Costrutti per la programmazione in the large Classi Interfaccie Packages 16

9 I commenti in Java // questo è un commento che termina con la fine della linea /* questo è un commento che può spaziare su più linee */ 17 Identificatori Gli identificatori (nomi di classi, variabili, attributi, metodi ecc.) sono sequenze alfanumeriche che: Devono iniziare con una lettera o con il carattere '_' Il resto dell identificatore può contenere sia lettere che numeri, o il carattere '_' Non devono coincidere con una delle parole riservate Esempi Ok: HelloWorld helloworld h ello_world prova PROVA prova1 prova1a prova2 Errati: 2prova +prova prova + hello-world hello? prova-1 Java è case sensitive 18

10 Le costanti Costanti intere: L 0xff34d 0xcafebabeL L Costanti reali: e+3 1.0E f F D e-2f Costanti boolean: true false Costanti carattere: a % \t \n \\ \ \123 Costanti di tipo stringa: prova prova\n prova( \ aaa\ ) 19 Il tipe system di Java Java è un linguaggio fortemente tipizzato Distinguiamo tra: tipi primitivi tipi riferimento 20

11 I tipi primitivi Tipi numerici: byte: 8 bit short: 16 bit int: 32 bit long: 64 bit float: 32 bit, secondo specifica IEEE754 double: 64 bit, secondo specifica IEEE754 Altri tipi: boolean: true o false char: 16 bit, carattere Unicode 21 Operatori per i tipi numerici - 1 Operatori unari operatori di segno +x -x incremento e decremento (prefissi e/o postfissi) ++x --x x++ x-- operatore di complemento binario (valido per soli tipi interi ): ~x 22

12 Operatori per i tipi numerici - 2 Operatori binari validi per tutti i tipi numerici x+y x-y x*y x/y x%y validi per i soli tipi interi x<<y x>>y x>>>y x&y x y x^y Operatori di confronto x==y x!=y x<y x>y x<=y x>=y 23 Operatori per il tipo boolean Operatore unario negazione logica:!x Operatori binari operatori standard x&y x y x^y operatori con semantica condizionale x&&y x y operatori di confronto x==y x!=y 24

13 Operatori per il tipo char Operatori di confronto x==y x!=y x<y x>y x<=y x>=y 25 Gli operatori di auto assegnamento E` possibile usare l operatore: x?= y al posto di un qualsiasi operatore? che sia lecito utilizzare nell espressione: x=x?y Tale espressione equivale alla precedente x?=y Esempi: x+=5 equivale a x=x+5 x*=2 equivale a x=x*2 26

14 Altri operatori Operatore condizionale si applica a tutti i tipi <condizione>? <valore1> : <valore2> L assegnamento come operatore x=y=3 (y=3)==3 L operatore di concatenazione tra stringhe si applica a tutti i tipi pippo +2 pippo I tipi riferimento Tipi array Tipi definiti dall utente 28

15 Tipo 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[] 29 Tipi definiti dall utente Classi Interfaccie... i dettagli nel seguito 30

16 Dichiarazione e inizializzazione di variabili Dichiarazione int i; int i,j; Persona p; float f1,f2; double d; Inizializzazione int i=0; int i=0, j=4; Persona p=new Persona(); float f1=1.23f, f2=127.2f; double d=1.23; 31 Dichiarazione e inizializzazione di variabili: gli array Dichiarazione: int[] ai1, ai2; float[] af1; double ad[]; Persona[][] ap; Inizializzazione: int[] ai={1,2,3; double[][] ad={{1.2, 2.5, {1.0,

17 Dichiarazione di array ed allocazione di memoria La dichiarazione di un array non alloca spazio per gli elementi dell array L allocazione si realizza dinamicamente tramite l operatore new int[] i=new int[10], j; float[][] f=new float[10][10]; Persona[] p=new Persona[30]; j=new int[30]; che alloca però solo lo spazio per l array, non per i suoi elementi (tranne nel caso di tipi predefiniti). 33 Istruzioni per il controllo del flusso Sequenza di istruzioni Blocco di istruzioni Istruzione condizionale Cicli Ciclo con uscita all inizio Ciclo con uscita alla fine Ciclo con uscita in mezzo Ciclo con contatore Istruzione switch 34

18 Sequenza e blocco Una sequenza di istruzioni è composta da una serie di istruzioni separate dal carattere ; a=3; b=4; c=a*b+3; Un blocco di istruzioni è composto da una sequenza di istruzioni racchiuse da parentesi graffe {a=1; b=3; c=a+128; Un blocco di istruzioni è equivalente ad una singola istruzione 35 Istruzione condizionale Permette la scelta tra due diversi percorsi del flusso di controllo Sintassi if(<condizione>) <istruz.1> [else <istruz.2>] Il ramo else si lega all istruzione if più vicina 36

19 Istruzione condizionale: esempi Esempio 1: if(x==5) System.out.println( x vale 5 ); System.out.println( fatto! ); Esempio 2: if(x>0 && y>0) System.out.println( x ed y positivi ); else if(x>0) System.out.println( x positivo ); else if(y>0) System.out.println( y positivo ); else System.out.println( nessuno dei due positivi ); System.out.println( fatto! ); 37 Istruzione condizionale: esercizio Si scriva un programma che legge un intero su riga di comando corrispondente ad un mese e restituisce il numero di giorni in quel mese Si faccia uso dell istruzione: Integer.parseInt(<string>) che restituisce un intero a partire da una stringa 38

20 Ciclo con condizione all inizio Sintassi: while(<condizione>) <istruzione> ; Esempio int r=5; while(r>0) { System.out.println( HelloWorld! ); r--; 39 Ciclo con condizione all inizio: esercizio Si scriva un programma per il calcolo del fattoriale Si scriva un programma che legge un intero da riga di comando e stampa a video un triangolo formato da * con base di lunghezza pari all intero letto Si osservi che l istruzione: System.out.print(<string>) stampa la stringa passata come parametro senza andare a capo 40

21 Ciclo con condizione alla fine Sintassi: do <istruzione> while(<condizione>) Esempio: int r=5; do { System.out.println("HelloWorld!"); r--; while(r>0); 41 Ciclo con condizione alla fine: esercizio Si scriva un programma che esegue il prodotto tra due numeri secondo l algoritmo delle somme ripetute. Si faccia uso del ciclo con condizione alla fine 42

22 Ciclo con condizione in mezzo E` possibile uscire da un ciclo tramite l istruzione break Sfruttando questo fatto è possibile creare cicli con condizione di terminazione in mezzo Esempio: java.io.fileinputstream s=new FileInputStream( a ); while(true) { b=s.read(); if(b==0) break; System.out.println(b); 43 Ciclo con condizione in mezzo: esercizio Si scriva un programma che legge un file byte a byte salvando il contenuto in un array di 500 byte. Il programma deve terminare quando la fine del file è stata raggiunta o quando si sono letti 500 byte Si osservi che l istruzione: s.read() applicata ad un FileInputStream s restituisce -1 quando si è raggiunta la fine del file. 44

23 Ciclo con contatore Sintassi: for(<istr1>; <condiz>; <istr2>) <istr3> Equivalente a: <istr1>; while(<condiz>) { <istr3> <istr2> 45 Ciclo con contatore: esempi Esempio 1: int r; for(r=0; r<5; r++) System.out.println( HelloWorld! ); Esempio 1 bis: for(int r=0; r<5; r++) System.out.println( HelloWorld! ); Esempio 2: for(int r=0; r<10; r+=2) System.out.println( r= +r); 46

24 Ciclo con contatore: esercizio Si scriva un programma che stampa a video le tabelline (da 1 a 10). Si faccia uso del ciclo con contatore 47 Ancora sull istruzione break Sintassi completa di un istruzione break: break [<label>] Significato: restituisce il controllo all istruzione che include quella con il break e che è marcata con l identificatore specificato Esempio: ciclo1 : while(true) { ciclo2 : while(true) { leggi(x); if(x==1) break ciclo1; else break ciclo2; 48

25 Istruzione switch Sintassi: switch(<espressione>) { case <espr_cost_1> : [<istr_1>;]* case <espr_cost_2> : [<istr_2>;]*... case <espr_cost_n> : [<istr_n>;]* [ default : [<istr>;]* ] L espressione all interno dello switch deve essere di tipo char, byte, short, o int 49 Istruzione switch: esempio public class Prova { static public void main(string[] args) { int x=integer.parseint(args[0]); switch(x) { case 1: case 2: case 3: System.out.println( x pari a 1,2 o 3 ); break; case 4: System.out.println( x pari a 4 ); break; default: System.out.println( x diverso da 1,2,3 o 4 ); 50

26 Istruzione switch: esercizio Si scriva un programma che legge un intero su riga di comando corrispondente ad un mese e restituisce il numero di giorni in quel mese. Si usi l istruzione switch 51 Conversioni automatiche di tipo Promozioni byte -> short, int, long, float, double short -> int, long, float, double int -> long, float, double long -> float or double float -> double char -> int, long, float, double 52

27 Conversioni forzate: casting È possibile forzare una conversione di tipo attraverso l operatore di casting: (<tipo>)<espressione> Tra tipi semplici sono consentite le seguenti conversioni (con perdita di informazione) short -> byte, char char -> byte, short int -> byte, short, char long -> byte, short, char, int float -> byte, short, char, int, long double -> byte, short, char, int, long, float byte -> char 53 Classi I costrutti OO per la programmazione in the large Interfaccie Ereditarietà Polimorfismo e binding dinamico Packages 54

28 Definizione di una nuova classe Una nuova classe viene definita nel seguente modo: class <nome classe> { <lista di definizioni di attributi e metodi> Esempio: class Automobile { Definizione di attributi Gli attributi di una classe definiscono la struttura dello stato degli oggetti che vi appartengono Ogni attributo è definito usando la stessa sintassi usata per la definizione delle variabili locali Esempio class Automobile { String colore, marca, modello; int cilindrata, numporte; boolean accesa; 56

29 Definizione di metodi I metodi di una classe definiscono il comportamento degli oggetti che vi appartengono Ogni metodo è definito come segue: <tipo val. rit.> <nome.>([<dic. par. formali>]) <corpo> Il tipo void viene utilizzato per metodi che non ritornano alcun valore 57 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; 58

30 Visibilità dei nomi I nomi degli attributi e dei metodi sono visibili all interno di tutta la classe Le variabili dichiarate in un blocco sono visibili solo all interno del blocco Le variabili locali ad un metodo (o i parametri formali) possono mascherare gli attributi Le variabili dichiarate all interno di un blocco possono mascherare le variabili dichiarate all interno di blocchi più esterni 59 Oggetti Ogni variabile il cui tipo sia una classe (o un interfaccia) contiene un riferimento ad un oggetto Nuovi oggetti sono costruiti usando l operatore new Esempio: Automobile a=new Automobile(); Ad una variabile di tipo riferimento può essere assegnato il riferimento null 60

31 Accesso ad attributi e metodi di un oggetto L accesso ad attributi e metodi di un oggetto per il quale si abbia un riferimento si effettua tramite la notazione punto Esempio: Automobile a=new Automobile(); a.accendi(); a.dipingi( Blu ); System.out.println( Num. porte: +a.numporte); 61 Accesso ad attributi e metodi di un oggetto da metodi dello stesso oggetto 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 {... boolean puopartire() {return accesa; void dipingi(string col) {colore=col;... La pseudo-variabile this contiene un riferimento all oggetto corrente e può essere utilizzata per aggirare eventuali mascheramenti 62

32 La pseudo-variabile this: esempio class Automobile { String colore, marca, modello; int cilindrata, numporte; boolean accesa; void accendi() {accesa=true; boolean puopartire() {return accesa; void dipingi(string col) {this.colore=col; void trasforma(string marca, String modello) { this.marca=marca; this.modello=modello; 63 Classi: esercizio Si definisca l insieme di classi necessarie per descrivere un computer (Monitor, Tastiera, Mouse, Case, Scheda) 64

33 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 e array) sono passati per copia del riferimento ovvero, gli oggetti sono passati per riferimento 65 Overloading All interno di una stessa classe possono esservi più metodi con lo stesso nome purché si distinguano per numero e/o tipo dei parametri Il tipo del valore di ritorno non basta a distinguere due metodi Esempio: class C { int f() {... int f(int x) {... // corretto void f(int x) {... // errato 66

34 Creazione e distruzione di oggetti La creazione di un oggetto comporta due operazioni: l allocazione della memoria necessaria a contenere l oggetto e l inizializzazione dello spazio allocato Quest ultima operazione è svolta dal costruttore A differenza del C++ in Java non è necessario deallocare esplicitamente gli oggetti creati con una operazione new. Di ciò si occupa il garbage collector 67 Costruttori Nella definizione di una classe è possibile specificare uno o più costruttori Il costruttore è un metodo particolare che ha lo stesso nome della classe Nel caso ci siano più costruttori, essi si distinguono perché differiscono per numero e/o tipo dei parametri Per i costruttori non viene indicato il tipo del risultato (è implicito nel nome del costruttore) Il costruttore di default (senza parametri) viene fornito dal compilatore a meno che non si definiscano altri costruttori 68

35 Costruttori: esempio class Automobile { String colore, marca, modello; int cilindrata, numporte; boolean accesa; Automobile() { colore=marca=modello= null; cilindrata=numporte=0; Automobile(String colore, String marca, String modello) { this.colore=colore; this.marca=marca; this.modello=modello; void accendi() {accesa=true; boolean puopartire() {return accesa; void dipingi(string col) {this.colore=col; 69 Ancora sui costruttori È possibile invocare un costruttore dall interno di un altro tramite la notazione: this(<elenco di parametri attuali>); Esempio: class Persona { String nome; int eta; Persona(String nome) {this.nome=nome; eta=0; Persona(String nome, int eta) { this(nome); this.eta=eta; 70

36 Classi e costruttori: esercizio Esercizio 1: Si costruisca una classe che implementa uno stack di interi di dimensione fissa (stabilita in fase di costruzione) Esercizio 2: Si modifichi la classe precedente (introducendone altre se necessario) per implementare uno stack di dimensione variabile (allocazione dinamica di memoria) Esercizio 3: Si usi la classe precedente per realizzare un programma che legge un file byte a byte e lo inverte 71 Metodi e attributi di classe Sintassi: static <definizione dell attributo o metodo> Un attributo di classe è condiviso da tutti gli oggetti della classe Si può accedere ad un attributo di classe senza bisogno di creare un oggetto tramite la notazione: <nome classe>.<nome attributo> Un metodo di classe può essere invocato senza bisogno di creare un oggetto tramite la notazione: <nome classe>.<nome metodo>(<par. attuali>) 72

37 Metodi e attributi di classe: vincoli Un metodo static può accedere ai soli attributi e metodi static Un metodo convenzionale può accedere liberamente a metodi ed attributi static 73 Metodi e attributi di classe: esempio class Shape { static Screen screen=new Screen(); // si noti l iniz. static void setscreen(screen s) {screen=s; void show(screen s) {setscreen(s); Shape.setScreen(new Screen()); // corretto Shape.show(); // errato, show è un metodo normale Shape s1=newshape(), s2=new Shape(); Screen s=new Screen(); s1.setscreen(s); // corretto, si possono chiamare // metodi static su oggetti // in questo punto s2.screen==s1.screen==s 74

38 Attributi costanti È possibile definire attributi costanti tramite la notazione: final <definizione di attributo>=<valore> Esempio class Automobile { int colore; final int BLU=0, GIALLO=1,...; void dipingi(int colore) {this.colore=colore;... Automobile a=new Automobile(); a.blu=128; // errato System.out.println( BLU= +a.blu); // corretto 75 Esercizio È corretto affermare che tramite attributi e metodi di classe e attributi costanti è possibile definire funzioni, variabili e costanti globali? 76

39 La gerarchia di ereditarietà Le classi di un sistema OO sono legate in una gerarchia di ereditarietà Data una classe C, una sottoclasse di C si definisce tramite la notazione: class K extends C { <definiz. di attr. e metodi> La sottoclasse eredita tutti gli attributi ed i metodi della sopraclasse Java supporta solo ereditarietà semplice 77 La classe Object In mancanza di una differente indicazione, una classe Java estende la classe Object La classe Object fornisce alcuni metodi tra i quali vale la pena citare i seguenti: public boolean equals(object); protected void finalize(); public String tostring(); 78

40 Overriding Una sottoclasse può aggiungere nuovi attributi e metodi ma anche... ridefinire i metodi delle sue sopraclassi Esempio: class AutomobileElettrica extends Automobile { boolean batteriecariche; void ricarica() {batteriecariche=true; void accendi() { if(batteriecariche) accesa=true; else accesa=false; 79 La pseudo variabile super All interno di un metodo che ridefinisce un metodo della sopraclasse diretta ci si può riferire al metodo che si sta ridefinendo tramite la notazione: super.<nome metodo>(<lista par. attuali>) Esempio: class AutomobileElettrica extends Automobile {... void accendi() { if(batteriecariche) super.accendi(); else System.out.println( Batterie scariche ); 80

41 Ereditarietà e costruttori I costruttori non vengono ereditati All interno di un costruttore è possibile richiamare il costruttore della sopraclasse tramite la notazione: super(<lista di par. attuali>) posta come prima istruzione del costruttore Se il programmatore non chiama esplicitamente un costruttore della sopraclasse, il compilatore inserisce automaticamente il codice che invoca il costruttore di default della sopraclasse 81 Ereditarietà: esercizio Si definisca una classe Persona e due sottoclassi Uomo e Donna. La classe Persona deve avere un metodo chisei() che stampa il nome della persona. Nelle sottoclassi tale metodo deve essere ridefinito perché stampi anche il sesso 82

42 Information hiding in Java Attributi e metodi di una classe possono essere: pubblic sono visibili a tutti vengono ereditati protected sono visibili solo alle sottoclassi vengono ereditati private sono visibili solo all interno della stessa classe non sono visibili nelle sottoclassi 83 Information hiding: esempio class Automobile { private String colore, marca, modello; private int cilindrata, numporte; private boolean accesa; public Automobile() { colore=marca=modello=null; cilindrata=numporte=0; public Automobile(String col, String ma, String mo) {colore=col; marca=ma; modello=mo; public void accendi() {accesa=true; public boolean puopartire() {return accesa; public void dipingi(string col) {colore=col; 84

43 Information hiding: esercizio Si modifichi l esercizio precedente introducendo le dichiarazioni di visibilità per i membri delle classi 85 Classi e metodi astratti Un metodo astratto è un metodo per il quale non viene specificata alcuna implementazione Una classe è astratta se contiene almeno un metodo astratto Non è possibile creare istanze di una classe astratta Le classi astratte sono molto utili per introdurre della astrazioni di alto livello 86

44 Classi e metodi astratti: esempio abstract class Shape { static Screen screen; Shape(Screen s) {screen=s; abstract void show(); class Circle extends Shape { void show() { Shape s=new Shape(); // errato Circle c=new Circle(); // corretto 87 Classi astratte: esercizio Nell esercizio precedente si introduca una classe astratta OggettoConNome, sopraclasse di Persona 88

45 Classi e metodi final Se vogliamo impedire che sia possibile creare sottoclassi di una certa classe la definiremo final Esempio: final class C {... class C1 extends C // errato Similmente, se vogliamo impedire l overriding di un metodo dobbiamo definirlo final Esempio: class C { final void f() {... class C1 extends C { void f() {... // errato 89 Ereditarietà ed array Se X è una sopraclasse di Y allora l array X[] è sopra-array dell array Y[] Lo stesso vale per gli array multidimensionali Tale scelta non è type safe Esempio: void f(x[] ax) { ax[0]=new X();... f(new Y[10]); 90

46 I limiti dell ereditarietà semplice L ereditarietà semplice non permette la descrizione di numerose situazioni reali Esempio: Supponiamo di avere una classe Giocattolo ed una classe Automobile. In assenza di ereditarietà multipla non posso definire la classe AutomobileGiocattolo 91 I problemi dell ereditarietà multipla In presenza di ereditarietà multipla è possibile ereditare due o più metodi con la stessa signature da più sopraclassi. Ciò determina un conflitto tra implementazioni diverse C1 f (int i) : int C2 f (int i) : int K f (int i) : int C1 C2 C C 92

47 Ereditarietà semplice vs. ereditarietà multipla: la soluzione di Java Distinguere tra una gerarchia di ereditarietà (semplice) ed una gerarchia di implementazione (multipla)... introducendo il costrutto delle interfacce In tal modo è possibile distinguere tra l uso dell ereditarietà al fine di riutilizzare il codice e l uso al fine di descrivere una gerarchia di tipi 93 Interfacce Una interfaccia è una classe priva di attributi non costanti ed i cui metodi sono tutti pubblici ed astratti Sintassi: interface <nome> { <lista di definizione di metodi privi di corpo> 94

48 Interfacce ed ereditarietà Una interfaccia può ereditare da una o più interfacce Sintassi: interface <nome> extends <nome 1 >,..,<nome n > {... La gerarchia di ereditarietà tra interfacce definisce una gerarchia di tipi 95 Interfacce: esercizio In che senso una interfaccia descrive un tipo meglio di una classe? 96

49 La gerarchia di implementazione Una classe può implementare una o più interfacce se la classe non è astratta deve fornire una implementazione per tutti i metodi presenti nelle interfacce che implementa altrimenti la classe è astratta Sintassi: class <nome> implements <nome 1 >,..,<nome n > { Polimorfismo Polimorfismo è la capacità per un elemento sintattico di riferirsi a elementi di diverso tipo In Java una variabile di un tipo riferimento T può riferirsi ad un qualsiasi oggetto il cui tipo sia T o un sottotipo di T Similmente un parametro formale di un tipo riferimento T può riferirsi a parametri attuali il cui tipo sia T o un sottotipo di T 98

50 Polimorfismo: esempio class Automobile {... class AutomobileElettrica extends Automobile {... class Parcheggio { private Automobile buf[]; private int nauto; public Parcheggio(int dim) {buf=new Automobile[dim]; public void aggiungi(automobile a) {buf[nauto++]=a;... Automobile a=new AutomobileElettrica(); Parcheggio p=new Parcheggio(100); p.aggiungi(new AutomobileElettrica()); 99 Polimorfismo ed interfacce Una interfaccia può essere utilizzata come tipo di una variabile Una siffatta variabile potrà riferirsi ad un qualsiasi oggetto che implementi l interfaccia (polimorfismo) Esempio: interface OggettoCheSpara { spara(); class Pistola implements OggettoCheSpara {... OggettoCheSpara o=new Pistola(); o.spara(); 100

51 Polimorfismo: tipo statico e tipo dinamico In presenza di polimorfismo distinguiamo tra il tipo statico ed il tipo dinamico di una variabile (o di un parametro formale) La regola del polimorfismo prima enunciata obbliga il tipo dinamico ad essere un sottotipo (proprio o meno) del tipo dinamico 101 Polimorfismo e binding dinamico In Java, a fronte della invocazione x.f(x1,...,xn), l implementazione scelta per il metodo f dipende dal tipo dinamico di x e non dal suo tipo statico 102

52 Binding dinamico: esempio class Persona { private String nome; public Persona(String nome) {this.nome=nome; public void chisei() { System.out.println( Ciao, io sono +nome); class Uomo extends Persona { public Uomo(String nome) {super(nome); public void chisei() {super.chisei(); System.out.println( sono un maschio );... Persona p=new Uomo( Giovanni ); p.chisei(); OUTPUT: Ciao, io sono Giov anni sono un maschio 103 Polimorfismo e binding dinamico: esercizio Si costruisca uno stack di persone e lo si usi per conservarvi tanto uomini quanto donne. Al termine si verifichi l effetto del binding dinamico richiamando il metodo chisei() su tutti gli oggetti conservati 104

53 Conversioni forzate tra tipi riferimento: casting È possibile forzare esplicitamente la conversione da un tipo riferimento T ad un sottotipo T1 purché: Il tipo dinamico dell espressione che convertiamo sia un sottotipo di T1 Esempio: Object o=new AutomobileElettrica(); Automobile a=o; // errato, Object non è un // sottotipo di Automobile Automobile a=(automobile) o; // corretto (casting) 105 Casting: esercizio Si spieghi perché il casting è fondamentale per implementare contenitori generici (stack di Object ecc.) 106

54 Package ed information hiding Package e visibilità degli attributi e dei metodi Attributi e metodi di una classe C per i quali non sia dichiarato alcun tipo di visibilità sono visibili solo all interno di classi che appartengano allo stesso package di C Tale costrutto gioca un ruolo analogo alla dichiarazione di friendship in C++ Package ed importazione di classi Un package contiene un insieme di classi pubbliche ed un insieme di classi private Solo le classi pubbliche si possono importare in altri package Package e compilation unit Ogni compilation unit contiene classi appartenenti allo stesso package Una compilation unit contiene una sola classe pubblica (per default la prima) ed eventualmente altre classi private 107 Il package java.lang Il package java.lang contiene classi di uso molto frequente (String, Object, ecc.) Non è necessario importare le classi appartenenti al package java.lang prima di utilizzarle 108

Il linguaggio Java Istruzioni di Controllo

Il linguaggio Java Istruzioni di Controllo Il linguaggio Java Istruzioni di Controllo Istruzioni per il controllo di flusso Istruzioni di selezione if switch Istruzioni di iterazione while do-while for Istruzioni di salto break continue return

Dettagli

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

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

Dettagli

Introduzione a Java. Riferimenti

Introduzione a Java. Riferimenti Introduzione a Java Si ringraziano Massimiliano Curcio e Matteo Giacalone 1: Introduction 1 Riferimenti! Java tutorial: http://java.sun.com/docs/books/tutorial/! Il Java tutorial è parte di una più ampia

Dettagli

Programmazione ad Oggetti. Java Parte II

Programmazione ad Oggetti. Java Parte II Programmazione ad Oggetti Java Parte II Overview Caratteristiche lessicali Il primo programma Java 1 Commenti /* Commento tradizionale, eventualmente su più linee, non nidificato */ // Commento su di una

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

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

Dettagli

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami

Dettagli

Le basi del linguaggio Java

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

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione Java Avanzata Programmazione Object- Oriented in Java Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Esempio 2: Subtyping

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

Dettagli

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

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

Dettagli

Esonero di Informatica I. Ingegneria Medica

Esonero di Informatica I. Ingegneria Medica Di seguito sono elencati una serie di domande tipo esonero ; i quiz vogliono dare un sistema di autovalutazione e di confronto allo studente che deve prepararsi alla prova di metà corso. Il numero e l

Dettagli

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

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

Dettagli

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

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

La classe java.lang.object

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

Dettagli

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)

Dettagli

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile

Dettagli

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà L ereditarieta` Programmazione in Rete e Laboratorio Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino Riuso del software: Ereditarieta`, Composizione,

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del

Dettagli

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1. OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione,

Dettagli

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

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

Dettagli

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini Primi concetti di Java Lorenzo Bettini OO puro Java è object-oriented puro Non come il C+ + (OO ibrido) Per compatibilità col C Ogni cosa è un oggetto Gli oggetti si manipolano tramite riferimenti String

Dettagli

Uguaglianza e copia di oggetti

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

Dettagli

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C Sommario Introduzione... xv Organizzazione del volume... xv Argomenti...xvi Domande...xvi Verifiche...xvi Domande e risposte...xvi Esercizi...xvi Non è richiesta alcuna precedente esperienza di programmazione...

Dettagli

Perché il linguaggio C?

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

Dettagli

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

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

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto Java Il linguaggio Java è un linguaggio di programmazione ad alto livello algoritmo: astrazione della realtà linguaggio di programmazione: astrazione del processore variabile e tipo: astrazione della locazione

Dettagli

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello Java Il linguaggio Java è un linguaggio di programmazione ad alto livello algoritmo: astrazione della realtà linguaggio di programmazione: astrazione del processore variabile e tipo: astrazione della locazione

Dettagli

Indice. Introduzione a tool per lo sviluppo e l'esecuzione di programmi in linguaggio Java. Compilazione ed esecuzione di un programma

Indice. Introduzione a tool per lo sviluppo e l'esecuzione di programmi in linguaggio Java. Compilazione ed esecuzione di un programma Indice Introduzione a tool per lo sviluppo e l'esecuzione di programmi in linguaggio Java Introduzione all ambiente di sviluppo - Compilazione ed esecuzione di un programma - Compilazione ed esecuzione

Dettagli

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto Java Java: compilatore e interprete Il linguaggio Java è un linguaggio di programmazione ad alto livello - algoritmo: astrazione della realtà - linguaggio di programmazione: astrazione del processore -

Dettagli

14 - Metodi e Costruttori

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

Dettagli

Indice. Prefazione. 3 Oggetti e Java 53

Indice. Prefazione. 3 Oggetti e Java 53 Prefazione xv 1 Architettura dei calcolatori 1 1.1 Calcolatori e applicazioni 1 1.1.1 Alcuni esempi di applicazioni 3 1.1.2 Applicazioni e interfacce 4 1.2 Architettura dei calcolatori 7 1.2.1 Hardware

Dettagli

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

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

Dettagli

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere

Dettagli

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

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

Dettagli

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Dettagli

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Informatica I. Ingegneria Medica. Prof. Diego Salamon Informatica I Ingegneria Medica Prof. Diego Salamon Java: Classi e Oggetti Prof. Diego Salamon Metafore Classi e Oggetti sono un astrazione della realtà. I linguaggi orientati agli oggetti contengono livelli

Dettagli

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti

Linguaggi ad oggetti (object oriented) LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE. Programmazione ad oggetti LINGUAGGI DI PROGRAMMAZIONE: PARADIGMI DI PROGRAMMAZIONE Anno Accademico 2000-2001 Alberto Martelli Programmazione ad Oggetti Parte I Linguaggi ad oggetti (object oriented) I linguaggi di programmazione

Dettagli

Definizione di classi. Walter Didimo

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

Dettagli

Introduzione Programmazione Java

Introduzione Programmazione Java Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea

Dettagli

Programmazione in Java (I modulo)

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

Dettagli

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi Di seguito vengono riportate una serie di domande che possono essere poste durante la prova formale del corso. Le seguenti domande non sono da ritenersi esaustive ma esemplificative. 1. Architettura

Dettagli

1 Il Paradigma ad Oggetti

1 Il Paradigma ad Oggetti 1 Il Paradigma ad Oggetti 1.1 Mini-Java In questa sezione introduciamo un sottoinsieme molto elementare del linguaggio ad oggetti Java, che chiamiamo Mini-Java. Nel linguaggio Mini-Java abbiamo incluso

Dettagli

Il linguaggio C. Puntatori e dintorni

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

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

18 - Classi parzialmente definite: Classi Astratte e Interfacce

18 - Classi parzialmente definite: Classi Astratte e Interfacce 18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Object-Oriented Technology. Giuliano Armano 1

Object-Oriented Technology. Giuliano Armano 1 Object-Oriented Technology Giuliano Armano 1 Object Oriented Technology ADT + Eredità + Polimorfismo Object-Orientation Giuliano Armano 2 Terminologia Tipica Classica... Tipo di dato (astratto) = ADT Operazione

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

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 Oggetti e Classi Metodi Parametri Variabili di istanza Costruttori Esercizi Paradigma Object-Oriented Il paradigma OO

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 Esercizi svolti Esercizi proposti Paradigma OO Nella programmazione tradizionale,

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma. Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti

Dettagli

La programmazione ad oggetti: chiamate di metodi. Overloading. This

La programmazione ad oggetti: chiamate di metodi. Overloading. This ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMA SVOLTO A.S. 2015/2016 Classe IV C Informatica Proff. Fabio Ciao / Simone Calugi Libro di testo: Cloud B P.

Dettagli

Introduzione a Java. Giovanni Pardini Dipartimento di Informatica Università di Pisa.

Introduzione a Java. Giovanni Pardini Dipartimento di Informatica Università di Pisa. a Java 1 Giovanni Pardini pardinig@di.unipi.it www.di.unipi.it/~pardinig Dipartimento di Informatica Università di Pisa 30 novembre 2009 1 2 3 1 Sintassi di base Hello World! Blocchi e variabili 2 Sintassi

Dettagli

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti.

Linguaggi ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione. I principali linguaggi ad oggetti. Programmazione ad oggetti. Linguaggi di Programmazione: Paradigmi di Programmazione Linguaggi ad oggetti I linguaggi di programmazione ad oggetti consentono di applicare metodologie di sviluppo di programmi "object oriented", ossia

Dettagli

Principi di OOP con JAVA

Principi di OOP con JAVA Principi di OOP con JAVA lezioni 08 - gen - 2004 15 - gen - 2004 Tommaso Di Noia t.dinoia@poliba.it OOP (elementi) Programmazione Procedurale e Orientata agli Oggetti. FUNZIONI OGGETTI STRUTTURE DATI METODI

Dettagli

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125 Capitolo 6 Uso della gerarchia c 2005 Pearson Education Italia Capitolo 6-1 / 125 Sommario: Uso della gerarchia 1 Notazione UML per le classi 2 Introduzione alla gerarchia 3 Gerarchia e tipi La gerarchia

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti Tipi di dati Tipo = insieme di valori + insieme di operazioni Es. int: valori:, -2, -1, 0, 1, 2, operazioni:: +,-,*,/,

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

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1. I mattoni di base di un programma Java Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 2 28 settembre

Dettagli

Ereditarietà (ultima)

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

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli

IL CONCETTO DI CLASSE

IL CONCETTO DI CLASSE IL CONCETTO DI CLASSE Una CLASSE riunisce le proprietà di: componente software: può essere dotata di suoi propri dati / operazioni moduli: riunisce dati e relative operazioni, fornendo idonei meccanismi

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Dettagli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

Dettagli

Java il Corso Fondamentale

Java il Corso Fondamentale Java il Corso Fondamentale Imparare a Programmare APP per Android, applicativi per Server e Desktop, applet e molto altro. IlTuoCorso - Ermes srl Via E.De Amicis 57 20123 Milano Il corso Ciao! Se desideri

Dettagli

Sommario PREFAZIONE... XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLE APPLICAZIONI JAVA...

Sommario PREFAZIONE... XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLE APPLICAZIONI JAVA... Sommario PREFAZIONE... XI Lo scopo di questo libro... xi La metodologia di insegnamento... xiii L apprendimento attraverso il codice... xiii La programmazione orientata agli oggetti... xiii L accesso al

Dettagli

Modulo 2: Strutture fondamentali della programmazione Java

Modulo 2: Strutture fondamentali della programmazione Java Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti

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

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà e Polimorfismo Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Ereditarietà L ereditarietà è lo strumento che permette di costruire nuove classi utilizzando

Dettagli

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

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

Dettagli

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

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

Dettagli

TIPI PRIMITIVI E CLASSI WRAPPER

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

Dettagli

Ereditarietà e Polimorfismo

Ereditarietà e Polimorfismo Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le

Dettagli

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti 1 Programmazione OO Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di controllo

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

In questa lezione. Polimorfismo

In questa lezione. Polimorfismo In questa lezione Polimorfismo (in Java) Tipo statico e tipo dinamico dei reference Binding dinamico (late binding) Casting (Upcasting e Downcasting) Operatore instanceof Polimorfismo con Object Polimorfismo

Dettagli

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5 Ricerca e ordinamento su array di oggetti Corso di Programmazione 2 Esercitazione 5 Sommario Ricercare in array di oggetti Interfaccia comparable Ordinare array di oggetti Problema Come ordinare, ricercare

Dettagli

Eredità e Polimorfismo in Java

Eredità e Polimorfismo in Java Eredità e Polimorfismo in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Definizione di Classe Java è un linguaggio object-oriented per cui il costrutto fondamentale è quello

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

Proprietà delle Classi e degli Oggetti in Java

Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di

Dettagli

Programmazione orientata agli oggetti Classi astratte e interfacce

Programmazione orientata agli oggetti Classi astratte e interfacce Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma

Dettagli

16 - Ereditarietà, tipi e gerarchie

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

Dettagli

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

Java: Definire Classi e Creare Oggetti

Java: Definire Classi e Creare Oggetti Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 21 marzo 2014 Introduzione Programmare con gli Oggetti Un programma Java è costituito

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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

Dettagli

Il concetto di Package

Il concetto di Package Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2008-2009 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 19 - Package in Java 1 Il concetto

Dettagli

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard I costruttori Servono a inizializzare i valori dei campi degli oggetti. Vengono invocati automaticamente dopo che l oggetto è stato creato. Il costruttore standard Questo tipo di costruzione mette dei

Dettagli

Informatica 3. LEZIONE 2: Sintassi e semantica

Informatica 3. LEZIONE 2: Sintassi e semantica Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

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

Dettagli

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