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

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo"

Transcript

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

2 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2

3 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il costruttore di default (quello senza parametri) Se in un costruttore di una classe derivata non viene invocato il costruttore delle classe base, viene automaticamente inserita la chiamata a super() Questi due meccanismi sono molto comodi ma bisogna fare attenzione perché si possono creare situazioni di errore non facili da comprendere Sviluppiamo un esempio che ha lo scopo di chiarire questi aspetti Costruttori ed ereditarietà 3

4 Esempio 1 prima versione Counter con attributo val intero protected e metodi pubblici reset(), inc(), getvalue() con costruttore di default definito che inizializza a 1 l attribito val e costruttore con un parametro intero n che inizializza val a n (anche un po di stampe ) BiCounter estende Counter con un metodo pubblico dec() senza alcun costruttore Main con un metodo pubblico statico main() Definisce Counter c e lo crea Definisce BiCounter c1 e lo crea Costruttori ed ereditarietà 4

5 Prima versione public class Counter protected int val; public Counter() System.out.println("Counter: costruttore default!"); val = 1; public Counter(int v) System.out.println( "Counter:costruttore"); val = v; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(); BiCounter c1 = new BiCounter(); Non definiamo un costruttore per BiCounter Costruttori ed ereditarietà 5

6 Risultato Creazione istanza di Counter Creazione istanza di BiCounter Il compilatore Java ha aggiunto un costruttore di defaul in BiCounter e ha inserito in esso una chiamata a super() Costruttori ed ereditarietà 6

7 Prima versione public class Counter protected int val; public Counter() System.out.println("Counter: costruttore default!"); val = 1; public Counter(int v) System.out.println( "Counter:costruttore"); val = v; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public BiCounter() super(); public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(); BiCounter c1 = new BiCounter(); Non definiamo un costruttore per BiCounter Costruttori ed ereditarietà 7

8 Esempio 1 seconda versione Counter invariato BiCounter estende Counter con un metodo pubblico dec() (come prima) definisce un costruttore che inizializza val a 1 (e fa un po di stampe ) Main invariato Costruttori ed ereditarietà 8

9 Seconda versione public class Counter protected int val; public Counter() System.out.println("Counter: costruttore default!"); val = 1; public Counter(int v) System.out.println( "Counter:costruttore"); val = v; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public BiCounter() System.out.println("Counter2: costruttore di default!"); val = 1; public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(); System.out.println(c.getValue()); BiCounter c1 = new BiCounter(); System.out.println(c1.getValue()); Costruttori ed ereditarietà 9

10 Risultato Creazione istanza di Counter Creazione istanza di BiCounter Il compilatore ha aggiunto una chiamata a super() nel costruttore di BiCounter Costruttori ed ereditarietà 10

11 Seconda versione public class Counter protected int val; public Counter() System.out.println("Counter: costruttore default!"); val = 1; public Counter(int v) System.out.println( "Counter:costruttore"); val = v; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public BiCounter() super(); System.out.println("Counter2: costruttore di default!"); val = 1; public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(); System.out.println(c.getValue()); BiCounter c1 = new BiCounter(); System.out.println(c1.getValue()); Costruttori ed ereditarietà 11

12 Esempio 1 terza versione Counter con attributo val intero protected e metodi pubblici reset(), inc(), getvalue() senza costruttore di default definito, ma solo costruttore con un parametro intero n che inizializza val a n (anche un po di stampe ) BiCounter estende Counter con un metodo pubblico dec() costruttore di default definito che inizializza val a 1 Main invariato Costruttori ed ereditarietà 12

13 Terza versione public class Counter protected int val; Eliminiamo il costruttore di default public Counter(int v) System.out.println( "Counter:costruttore"); val = v; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public BiCounter() System.out.println("Counter2: costruttore di default!"); val = 1; public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(); BiCounter c1 = new BiCounter(); Costruttori ed ereditarietà 13

14 Risultato C:\work\costruttori\Main.java:6: cannot resolve symbol symbol : constructor Counter () location: class Counter Counter c = new Counter(); ^ C:\work\costruttori\Counter.java:1: cannot resolve symbol symbol : constructor Counter () location: class Counter public class BiCounter extends Counter ^ 2 errors Process completed. Nella classe Counter, il costruttore di default non è stato inserito automaticamente, perché Counter ha almeno un costruttore (quello con parametro) Abbiamo quindi 2 errori di compilazione Costruttori ed ereditarietà 14

15 Una prima correzione Il primo errore è dovuto al fatto che in main() creiamo un istanza di Counter invocando il costruttore di default che non esiste più Modifichiamo quindi main() in modo che l istanza venga creata invocando il costruttore non di default public class Main public static void main(string Args[]) Counter c = new Counter(1); Counter c1 = new BiCounter(); Costruttori ed ereditarietà 15

16 Risultato C:\work\costruttori\Counter.java:1: cannot resolve symbol symbol : constructor Counter () location: class Counter public class BiCounter extends Counter ^ 1 error Ci resta ancora un errore dovuto al fatto che nel costruttore di BiCounter il compilatore ha inserito una chiamata a super() (costruttore di default della classe base) e questo non esiste in Counter Costruttori ed ereditarietà 16

17 Seconda correzione Inseriamo quindi nel costruttore di BiCounter una chiamata esplicita al costruttore effettivamente esistente di Counter (quello con il parametro intero) public class BiCounter extends Counter public BiCounter() System.out.println("Counter2: costruttore di default!"); super(0); public void dec() val--; Costruttori ed ereditarietà 17

18 Risultato C:\work\costruttori\Counter2.java:3: cannot resolve symbol symbol : constructor Counter () location: class Counter ^ C:\work\costruttori\Counter2.java:5: call to super must be first statement in constructor super(0); ^ 2 errors Otteniamo ancora degli errori di compilazione Infatti la chiamata a super(0) deve essere la prima istruzione del costruttore! Costruttori ed ereditarietà 18

19 Terza correzione Mettiamo la chiamata a super in prima posizione: public class BiCounter extends Counter public BiCounter() super(0); System.out.println( "Costruttore di default di Counter2"); public void dec() val--; public class Main public static void main(string Args[]) Counter c = new Counter(1); Counter c1 = new BiCounter(); c1.inc(); Costruttori ed ereditarietà 19

20 Risultato finale Adesso funziona tutto correttamente Creazione istanza di Counter Creazione istanza di BiCounter Costruttori ed ereditarietà 20

21 Ricapitolando La chiamata al costruttore del parent ( super() con o senza argomenti) deve essere la prima istruzione dei costruttori delle classi derivate Se non è specificato super() nei costruttori delle classi derivate, è invocato automaticamente il costruttore di default della classe base Il costruttore di default può essere generato automaticamente solo se nella classe base non è definito alcun costruttore Se non è presente un costruttore di default (definito dal programmatore o generato in automatico) di una classe, le classi derivate da questa devono esplicitamente usare la super( ) ed invocare il corretto costruttore (non di default) se questo c è Costruttori ed ereditarietà 21

22 Esempio 2: Subtyping 22

23 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 di metodi In realtà l ereditarietà ha una doppia natura, comprende cioè due diversi aspetti: Subclassing o ereditarietà di implementazione: è un meccanismo per il riuso che ci consente di estendere classi esistenti riusando il codice già scritto Subtyping o ereditarietà di interfaccia: è un meccanismo flessibile di compatibilità fra tipi Subtyping-polimorfismo

24 Variabili e tipi Nei linguaggi tradizionali, soprattutto in quelli legati al modello procedurale, esiste un sistema rigido di corrispondenza fra variabili e tipi Ogni variabile viene dichiarata come appartenente ad un tipo e, tranne poche eccezioni, non è possibile assegnargli valori di tipi diversi da quello di appartenenza Questo vincolo è molto importante perché consente al compilatore di effettuare tutta una serie di controlli che evitano i più comuni errori di programmazione Questi controlli vengono chiamati statici perché vengono effettuati una volta sola al momento della compilazione e non devono essere ripetuti continuamente durante l esecuzione del programma

25 Tipizzazione in Java In linea di principio questo vale anche per Java Infatti se scriviamo istruzioni come queste: int n; String s = 18 ; n = s; Otteniamo un errore di compilazione alla terza riga perché interi e stringhe sono cose completamente diverse Se vogliamo passare da un tipo all altro dobbiamo farlo esplicitamente n = Integer.intValue(s); Si dice quindi che Java è un linguaggio tipizzato (typed) perché il suo compilatore verifica staticamente che non ci siano violazioni al sistema dei tipi

26 Conversioni implicite In realtà anche in un linguaggio tipizzato vengono fatte conversioni implicite. Un esempio molto comune sono le conversioni che avvengono in un espressione matematica: int n = 5; double d; d = n * 2.5; Oppure nella concatenazione di stringhe: int n = 5; String s; s = Numero +n; Si tratta però di eccezioni, in generale in un linguaggio tipizzato il cambio di tipo deve essere esplicitato

27 Typecast Le conversioni implicite vengono fatte solo quando si ha la certezza che non si introducono errori o perdite di informazioni. Su quest ultimo aspetto in particolare Java è più restrittivo del C Per esempio se dichiariamo due variabili in questo modo int n = 7; long l = 14; double d = 7.5 Si può scrivere l = n; d = n; d = l; perché la conversione non comporta perdita di precisione Ma non è possibile scrivere: n = l; n = d; l = d; perché in tutti questi casi abbiamo potenzialmente perdita di informazione Dobbiamo esplicitare la conversione usando usando il typecast con la stessa sintassi del C n = (int)l; n = (int)d; l = (long)d; In questo modo il compilatore è sicuro che non si tratta di un errore, ma di una cosa voluta

28 Sottoclassi come sottotipi Un sistema di tipi come quello appena descritto rappresenta una sicurezza, ma può anche risultare eccessivamente rigido La programmazione orientata agli oggetti mette a disposizione un meccanismo più flessibile, ma altrettanto sicuro, basato sull ereditarietà In una sottoclasse noi possiamo solo aggiungere o ridefinire metodi, ma non eliminarne! Quindi un istanza di una sottoclasse è capace di fare tutto quello che sa fare la sua superclasse Ne consegue che possiamo utilizzare un istanza di una sottoclasse al posto di un istanza di una superclasse Si dice quindi che una sottoclasse è un sottotipo (subtyping)

29 Subtyping - 1 In pratica nei linguaggi orientati agli oggetti possiamo assegnare ad una variabile che ha come tipo una superclasse un istanza di una qualsiasi delle sue sottoclassi Per esempio possiamo scrivere: Counter c; c = new BiCounter(); In queste due istruzioni è racchiuso il concetto di subtyping E una forma estesa di conversione implicita: L insieme di metodi di BiCounter è un sovrainsieme di quello di Counter: BiCounter sa fare tutto quello che fa Counter Il compilatore ha quindi la certezza che non possiamo chiedere all istanza di BiCounter di fare qualcosa che non è in grado di fare

30 Ereditarietà di interfaccia e di implementazione L insieme dei metodi di una classe viene anche chiamato interfaccia della classe Possiamo quindi dire che l interfaccia di una sottoclasse comprende l interfaccia della sua superclasse (la eredita) E questo il senso del termine ereditarietà di interfaccia con cui spesso il subtyping viene designato In modo simile si parla di ereditarietà di implementazione per indicare il subclassing Infatti una classe derivata comprende l implementazione della classe base (a meno che non ridefinisca un metodo) Proviamo alcuni esempi.

31 Sostituibilità: Counter e BiCounter - 1 Riprendiamo le due classi Counter e BiCounter (con o senza costruttori ) public class Counter protected int val; public void reset() val = 0; public void inc() val++; public int getvalue() return val; public class BiCounter extends Counter public void dec() val--; Subtyping-polimorfismo

32 Sostituibilità: Counter e BiCounter - 2 Proviamo a scrivere un applicazione di esempio che usa Counter Definiamo nel main un oggetto Counter, creiamolo (new) e incrementiamolo 150 volte Ciclo for per i= usando il metodo inc() Poi stampiamone il valore (acquisendolo con il metodo getvalue()) Subtyping-polimorfismo

33 Sostituibilità: Counter e BiCounter - 2 public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new Counter(); c1.reset(); for (int i=0; i<150; i++) c1.inc(); n = c1.getvalue(); System.out.println( Valore: +n); L applicazione scriverà a video: Valore: 150 Subtyping-polimorfismo

34 Sostituibilità: Counter e BiCounter - 3 Modifichiamo l esempio usando un istanza di BiCounter anziché una di Counter Definiamo il reference come Counter, ma creiamo l istanza come BiCounter nel main Poi stampiamone il valore Cosa stampa?

35 Sostituibilità: Counter e BiCounter - 3 Modifichiamo l esempio usando un istanza di BiCounter anziché una di Counter public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new BiCounter(); // Era c1 = new Counter() c1.reset(); for (i=0;i<150;i++) c1.inc(); n = c1.getvalue(); System.out.println(n); Cosa stampa?

36 Sostituibilità: Counter e BiCounter - 3 Modifichiamo l esempio usando un istanza di BiCounter anziché una di Counter public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new BiCounter(); // Era c1 = new Counter() c1.reset(); for (i=0;i<150;i++) c1.inc(); n = c1.getvalue(); System.out.println(n); Il programma funziona esattamente come prima scrivendo a video: Valore: 150

37 Subtyping Ogni oggetto istanza di BiCounter è un Counter Risponde agli stessi metodi di Counter (ereditarietà di interfaccia) Counter #val : int +inc() : void +reset() : void +getvalue() : int Link is-a, BiCounter is-a Counter BiCounter +dec() : void Ereditarietà

38 Ancora sul subtyping Riprendiamo l esempio di subtyping fra Counter e BiCounter Counter c; c = new BiCounter(); MAttenzione: anche se la variabile c fa riferimento ad un istanza di BiCounter è di tipo Counter e quindi possiamo fare con c solo quello che sa fare Counter Possiamo scrivere: c.inc(); Ma non: c.dec(); E il tipo della variabile, e non il tipo dell istanza, a determinare quello che possiamo fare! Subtyping-polimorfismo

39 Counter e BiCounter - 4 public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new BiCounter(); // Era c1 = new Counter() c1.reset(); for (i=0;i<150;i++) c1.inc(); n = c1.getvalue(); System.out.println(n); BiCounter a= (BiCounter) c1; a.dec(); Casting esplicito, e assegnamento a un reference di tipo BiCounter per poter invocare anche i metodi di BiCounter

40 Overriding Se l ereditarietà consentisse solo l aggiunta di metodi non ci sarebbe molto altro da dire Sappiamo invece che è anche possibile la ridefinizione di un metodo esistente (overriding) Abbiamo visto che questo meccanismo aggiunge una notevole flessibilità ai meccanismi di riuso Ma oltre a ciò, la combinazione tra subtyping e overriding apre nuove prospettive ma anche qualche possibile fonte di confusione!

41 Sostituibilità: Counter e CentoCounter - 1 Riprendiamo ora in esame la classe CentoCounter che, come BiCounter è una sottoclasse di Counter In questo caso però in CentoCounter anziché aggiungere un metodo ne avevamo ridefinito uno: public class CentoCounter extends Counter public void inc() if (val<100) val++; Subtyping-polimorfismo

42 Sostituibilità: Counter e BiCounter - 3 Modifichiamo l esempio usando un istanza di CentoCounter anziché una di Counter Definiamo il reference come Counter, ma creiamo l istanza come CentoCounter nel main Poi stampiamone il valore Cosa stampa?

43 Sostituibilità: Counter e CentoCounter - 2 Sostituendo un istanza di Counter con una di CentoCounter nel nostro esempio: public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new CentoCounter();// Era c1=new Counter() c1.reset(); for (int i=0;i<150;i++) c1.inc(); n = c1.getvalue(); System.out.println(n); Cosa stampa?

44 Sostituibilità: Counter e CentoCounter - 2 Sostituendo un istanza di Counter con una di CentoCounter nel nostro esempio: public class Esempio public static void main(string[] args) int n; Counter c1; c1 = new CentoCounter();// Era c1=new Counter() c1.reset(); for (int i=0;i<150;i++) c1.inc(); n = c1.getvalue(); System.out.println(n); Il programma scrive a video: Valore: 100 CentoCounter non è sostituibile con Counter!

45 Violazioni di sostituibilità Cosa è successo? Ridefinendo il metodo inc() in CentoCounter abbiamo fatto saltare la sostituibilità fra Counter e CentoCounter La classe derivata non è più sostituibile con la classe base Il pasticcio è nato dalla combinazione di due fattori: Abbiamo ridefinito un metodo (overriding) Nel ridefinirlo abbiamo ristretto il comportamento della classe derivata L errore è stato quello di usare l ereditarietà per restringere e non per estendere Non a caso la parola chiave che Java usa per indicare i legami di ereditarietà è extends

46 Riassumendo L ereditarietà va sempre usata per estendere Se si usa l ereditarietà per restringere si viola la sostituibilità tra superclasse e sottoclasse Questo è il motivo per cui quando si eredità non è consentito eliminare metodi Aggiungendo metodi non ci corrono rischi tuttavia: MAttenzione: quando si ridefinisce un metodo c è un potenziale rischio: bisogna sempre operare in modo da non restringere il comportamento del metodo originale

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

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

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

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti

Dettagli

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti

Dettagli

Esempio: Costruttori ed ereditarietà

Esempio: Costruttori ed ereditarietà Esempio: 1 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il costruttore di default (quello senza parametri) Se in un costruttore

Dettagli

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo Programmazione orientata agli oggetti Subtyping e polimorfismo 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti

Dettagli

Programmazione orientata agli oggetti Subtyping e polimorfismo

Programmazione orientata agli oggetti Subtyping e polimorfismo Programmazione orientata agli oggetti Subtyping e polimorfismo Fondamenti di Informatica L-B 1 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile

Dettagli

public class Counter2 extends Counter { public void dec() { val--; }

public class Counter2 extends Counter { public void dec() { val--; } public class Main public class Counter2 extends Counter public void dec() val--; public class Counter public Counter() System.out.println("Counter : costruttore di default!"); val = 1; System.out.println("Counter

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà Programmazione orientata agli oggetti 1 Dalla programmazione basata su oggetti all OOP La programmazione basata su oggetti (object-based) poggia su due concetti fondamentali: Astrazione: separazione fra

Dettagli

Polimorfismo. Subtyping-polimorfismo

Polimorfismo. Subtyping-polimorfismo Polimorfismo 23 Polimorfismo - Esempio Definiamo la classe Persona che gestisce i dati anagrafici di una persona (nome ed età per semplicità) La classe definisce un costruttore e il metodo print che stampa

Dettagli

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza

Dettagli

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà Programmazione orientata agli oggetti 1 Dalla programmazione basata su oggetti all OOP La programmazione basata su oggetti (object-based) poggia su due concetti fondamentali: Astrazione: separazione fra

Dettagli

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà Programmazione orientata agli oggetti 1 Dalla programmazione basata su oggetti all OOP La programmazione basata su oggetti (object-based) poggia su due concetti fondamentali: Astrazione: separazione fra

Dettagli

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà Programmazione orientata agli oggetti Ereditarietà Fondamenti di Informatica L-B 1 Programmazione basata su oggetti Il modello visto finora costituisce un sottoinsieme del modello orientato agli oggetti

Dettagli

Java Gli array. Array

Java Gli array. Array Java Gli array 1 Gli array In generale un array è una sequenza di locazioni di memoria, che contengono entità dello stesso tipo, e a cui si può fare riferimento con un nome comune Le entità che compongono

Dettagli

IL TEMA DELLA RIUSABILITÀ

IL TEMA DELLA RIUSABILITÀ IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice già funzionante e corretto il cui sviluppo ha richiesto

Dettagli

Java Gli array. Array

Java Gli array. Array Java Gli array 1 Gli array In generale un array è una sequenza di locazioni di memoria, che contengono entità dello stesso tipo, e a cui si può fare riferimento con un nome comune Le entità che compongono

Dettagli

e il loro uso: esistente e cambiare quel che va cambiato specializzare (per ereditarietà) la classe Counter public class EsempioNuovo {

e il loro uso: esistente e cambiare quel che va cambiato specializzare (per ereditarietà) la classe Counter public class EsempioNuovo { APPROCCI PER IL RIUTILIZZO: ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato creare un oggetto composto che incapsuli il componente esistente... gli inoltri le operazioni

Dettagli

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti Programmazione orientata agli oggetti Oggetti Composti 1 - 1 Negli esempi che abbiamo visto finora gli attributi delle classi erano variabili di tipo primitivo E però possibile definire come attributi

Dettagli

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti Programmazione orientata agli oggetti Oggetti Composti 1 - 1 Negli esempi che abbiamo visto finora gli attributi delle classi erano variabili di tipo primitivo E però possibile definire come attributi

Dettagli

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli

Dettagli

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi

Dettagli

RIUSABILITÀ L OBIETTIVO

RIUSABILITÀ L OBIETTIVO RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice già funzionante e corretto il cui sviluppo ha richiesto tempo (anni-uomo)

Dettagli

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Polimorfismo - d Regole Sintattiche e Semantiche versione 1.2 Questo lavoro è concesso in uso secondo i termini di

Dettagli

e il loro uso: Oggetti composti IL TEMA DELLA RIUSABILITÀ APPROCCI PER IL RIUTILIZZO:

e il loro uso: Oggetti composti IL TEMA DELLA RIUSABILITÀ APPROCCI PER IL RIUTILIZZO: APPROCCI PER IL RIUTILIZZO: ricopiare manualmente il codice della classe esistente e cambiare quel che va cambiato creare un oggetto composto che incapsuli il componente esistente... gli inoltri le operazioni

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

Java Le stringhe. Stringhe

Java Le stringhe. Stringhe Java Le stringhe 1 Le stringhe in Java In Java le stringhe non sono semplicemente array di caratteri terminati con zero come avviene in C In Java le stringhe sono oggetti appartenenti alla classe String

Dettagli

PRIMA ESERCITAZIONE IN JAVA

PRIMA ESERCITAZIONE IN JAVA PRIMA ESERCITAZIONE IN JAVA Java: esercizio sulle stringhe 1. Si leggano N stringhe da riga di comando 2. Per ogni stringa si sostituiscano tutte le occorrenze di old_char con new_char (variabili inizializzate

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

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Programmazione in Java (I modulo) Lezione 20: Ereditarietà Programmazione in Java (I modulo) Lezione 20: Ereditarietà Ereditarietà (Inheritance) Il programmatore definisce una classe generale In seguito definisce una classe più specifica Aggiungo soltanto nuovi

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

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Ereditarietà E' un meccanismo per estendere le funzionalità di una classe con nuovi campi e nuovi metodi Chiamiamo superclasse:

Dettagli

Informatica Ereditarietà Java. Ereditarietà

Informatica Ereditarietà Java. Ereditarietà Ereditarietà L'ereditarietà consente allo sviluppatore di riutilizzare il codice già scritto creando sottoclassi a partire da classi già definite. La sottoclasse eredita tutti gli attributi e tutti i metodi

Dettagli

Java Le stringhe. Stringhe

Java Le stringhe. Stringhe Java Le stringhe 1 Le stringhe in Java In Java le stringhe non sono semplicemente array di caratteri terminati con zero come avviene in C In Java le stringhe sono oggetti appartenenti alla classe String

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

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java. Di solito se abbiamo la struttura di una classe con gli attributi e i metodi possiamo istanziare

Dettagli

Java Classi wrapper e classi di servizio. Classi di servizio

Java Classi wrapper e classi di servizio. Classi di servizio Java Classi wrapper e classi di servizio 1 Ereditarietà - recap Una classe può derivare da un altra - extends Eredita metodi e attributi (non i costruttori) Aggiunge attributi e metodi, ma può anche ridefinire

Dettagli

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object Ereditarietà Concetti principali Ereditarietà e (overriding) di metodi Dynamic dispatch e polimorfismo Ereditarietà e costruttori Livelli di accesso protected e package La classe Object metodi tostring,

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Ereditarietà

RETI DI CALCOLATORI Linguaggio Java: Ereditarietà Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Ereditarietà Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:

Dettagli

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

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

Oggetti Composti (1) Oggetti Composti (2)

Oggetti Composti (1) Oggetti Composti (2) Oggetti Composti () Negli esempi che abbiamo visto finora gli attributi delle classi erano variabili di tipo primitivo E però possibile definire come attributi dei riferimenti ad oggetti di qualche classe

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

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

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

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!! NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!! OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/

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, package e file system. Package

Programmazione orientata agli oggetti Classi, package e file system. Package Programmazione orientata agli oggetti Classi, package e file system 1 Classi e file Java impone delle regole molto precise di corrispondenza tra classi e file In generale, le regole sono: Ogni classe deve

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

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

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

Esercitazione. Docente Ing. Mariateresa Celardo

Esercitazione. Docente Ing. Mariateresa Celardo Esercitazione Docente Ing. Mariateresa Celardo mariateresa.celardo@uniroma2.it Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore del motorino, velocità: un

Dettagli

Soluzione della prova scritta del 5 febbraio 2013

Soluzione della prova scritta del 5 febbraio 2013 Corso di Programmazione Anno Accademico 2012 2013 Prof. Giovanni Pighizzini della prova scritta del 5 febbraio 2013 Questo documento discute un esempio di soluzione di alcuni esercizi assegnati. Naturalmente

Dettagli

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA

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

Ereditarietà: concetti di base

Ereditarietà: concetti di base : concetti di base L ereditarietà è uno dei concetti base della programmazione ad oggetti Concetto di base: l ereditarietà permette di usare una classe precedentemente definita per la definizione di una

Dettagli

Bank account. private double balance; 11/2/2011

Bank account. private double balance; 11/2/2011 Il Linguaggio Java Ereditarietà Bank account class BankAccount { public BankAccount() { balance = 0; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { balance

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona di Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona su Sommario di su di di di su Astrazione sugli oggetti di su Il concetto di classe Classe: realizza l astrazione

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e

Dettagli

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

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

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 Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila diruscio@di.univaq.it. Sommario 2 2» Struttura

Dettagli

Programmazione Orientata agli Oggetti

Programmazione Orientata agli Oggetti Programmazione Orientata agli Oggetti Corso di Laurea in Ingegneria Gestionale Massimo Ruffolo ruffolo@icar.cnr.it Istituto di CAlcolo e Reti ad alte prestazioni del Consiglio Nazionale delle Ricerche

Dettagli

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

Dettagli

Programmazione orientata agli oggetti Classi, package e file system. Package

Programmazione orientata agli oggetti Classi, package e file system. Package Programmazione orientata agli oggetti Classi, package e file system 1 Classi e file Java impone delle regole molto precise di corrispondenza tra classi e file In generale, le regole sono: Ogni classe deve

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

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

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

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

Java. Ereditarieta RIUSO DEL CODICE

Java. Ereditarieta RIUSO DEL CODICE Java Ereditarieta RIUSO DEL CODICE Durante lo sviluppo di codice frequentemente i programmatori sviluppano codice molto simile a codice gia esistente Questo, spesso, viene fatto manipolando il codice esistente

Dettagli

ereditarietà e polimorfismo

ereditarietà e polimorfismo ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze

Dettagli

Introduzione alla Java Collections Framework

Introduzione alla Java Collections Framework OGGI (RI)VEDIAMO Recap ereditarietà, Object, final Classi wrapper Introduzione alla Java Collections Framework Tabelle hash 1 Ereditarietà - recap Una classe può derivare da un altra - extends Eredita

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

Introduzione. Java. Esempio. Esempio

Introduzione. Java. Esempio. Esempio Java polimorfismo G. Prencipe prencipe@di.unipi.it Introduzione È un altro degli ingredienti fondamentali della OOP Permette di organizzare il codice e la leggibilità e di ottenere programmi estensibili

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

I Metodi. Fondamenti di Informatica A-K

I Metodi. Fondamenti di Informatica A-K I Metodi Fondamenti di Informatica A-K Esercitazione 3 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso I metodi: concetti di base Stringhe ed array Classi e oggetti, costruttori,

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili Riuso di classi Spesso si ha bisogno di classi simili Si vuole cioè riusare classi esistenti per implementare attributi e metodi leggermente diversi Non è pratico copiare la classe originaria e modificarne

Dettagli

Motorino colore velocità tipo antifurto getvelocità accelera antifurto inserisciantifurto antifurto

Motorino colore velocità tipo antifurto getvelocità accelera antifurto inserisciantifurto antifurto Esercitazione 1. Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore del motorino, velocità: un numero con la virgola indicante la velocità in Km/h che possiede

Dettagli

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1 Incapsulamento Paradigmi della PO Ereditarietà Polimorfismo Software per TLC - AA 2008/2009 1 Incapsulamento Una classe contiene dati e metodi Filosofia Ai dati si accede solo attraverso i metodi I metodi

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

Il linguaggio C++ Ugo de Liguoro

Il linguaggio C++ Ugo de Liguoro Il linguaggio C++ Ugo de Liguoro Caratteristiche Il C++ è class based; interpreta le classi come tipi; il subtyping coincide con la (chiusura transitiva della) relazione di sottoclasse; è basato sul C

Dettagli

Ereditarietà. Ivan Lanese e Cosimo Laneve

Ereditarietà. Ivan Lanese e Cosimo Laneve Ereditarietà Ivan Lanese e Cosimo Laneve Argomenti Ereditarietà Sottotipaggio Costruttori Ereditarietà Spesso non vogliamo definire una classe a partire dal nulla, ma vogliamo definirla a partire da un

Dettagli

Classi ed Oggetti. Fondamenti di Informatica A-K

Classi ed Oggetti. Fondamenti di Informatica A-K Classi ed Oggetti Fondamenti di Informatica A-K Esercitazione 5 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso I metodi: concetti di base Stringhe ed array Classi e oggetti,

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA4 A2 Utilizzo di classi 1 Prerequisiti Implementazione di classi Funzionamento di una classe Parametri formali e attuali di una funzione 2 1 Introduzione In questa

Dettagli