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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

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

2 Sommario Incapsulamento Polimorfismo Overloading Ereditarietà Overriding

3 Sommario Incapsulamento Polimorfismo Overloading Ereditarietà Overriding

4 Incapsulamento L incapsulamento è di fondamentale importanza per la programmazione ad oggetti, dato che consente ad una classe di acquisire le proprietà di robustezza, indipendenza e riusabilità. La filosofia alla base dell incapsulamento si fonda sul controllo dell accesso ai campi di una classe. Questo si implementa fornendo l accesso ai dati di una classe soltanto attraverso l interfaccia ossia l insieme dei metodi dichiarati usando il modificatore public, (questo modificatore li renderà invocabili dall esterno da oggetti appartenenti ad altre classi). Pertanto tutti i campi e metodi non appartenenti all interfaccia, dovranno essere dichiarati private, in modo da essere inaccessibili dall esterno, ma soltanto da oggetti appartenenti alla classe stessa. Questa regola,che blocca l accesso diretto a tutti gli attributi privati, rende la classe indipendente e riutilizzabile; inoltre, ciò comporta anche una maggiore robustezza del software.

5 Incapsulamento A livello tecnico, in Java, l incapsulamento è realizzabile rendendo le variabili di istanza private e creando dei metodi per l accesso in lettura o scrittura alle variabili stesse. Consideriamo l automobile come esempio reale di incapsulamento; i componenti interni (motore, freni, candele,..) non sono accessibili dall utente, il quale accede alle funzioni di questo oggetto attraverso un interfaccia esterna. Per definire delle variabili private, occorre introdurre il modificatore private;

6 Incapsulamento Esempio di implementazione di incapsulamento relativo la classe Automobile. public class Automobile { private String modello; public void setmodello(string modello) { this.modello = modello; public String getmodello() { return modello; Possiamo notare la variabile modello dichiarata come privata, non sarà quindi accessibili da classi esterne. L accesso alla variabile modello viene effettuato da due metodi, setmodello e getmodello che rispettivamente operano in scrittura e lettura della variabile.

7 Polimorfismo Per precisare il concetto di polimorfismo, definiamo firma di un metodo (o signature) l identificatore di un metodo e la lista dei suoi parametri (i modificatori ed il tipo di ritorno non ne fanno parte). Pertanto un metodo, in Java, è univocamente determinato dalla sua firma ( quindi non basta soltanto l identificatore, ma anche la lista dei suoi parametri) Il polimorfismo dei metodi, corrisponde alla utilizzazione dello stesso identificatore per definire metodi differenti di una stessa classe. Da ciò discende che, in una stessa classe, potranno coesistere più metodi con il medesimo identificatore, purché ognuno di essi abbia firma differente.

8 Polimorfismo In merito al polimorfismo, possiamo distinguere tra overload ed override dei metodi. Con overload si intende la possibilità di definire più metodi col medesimo nome, ma firma differente, in una stessa classe. Ciò è utile quando si desidera definire più metodi che possiedano la medesima funzionalità, ma con differente campo di applicazione (cioè con una diversa lista di parametri). Per quanto riguarda l override, invece, lo introdurremo dopo aver parlato dell ereditarietà.

9 Overloading L'overloading rappresenta una importante caratteristica di Java che consente ad una classe di avere più metodi con lo stesso nome ma con parametri differenti ovvero con una firma diversa. Overload significa «sovraccaricare» ovvero definire più versioni di un metodo, utilizzando lo stesso nome ma una firma diversa. Per firma di un metodo si intende il numero e/o il tipo di argomenti nella dichiarazione. Infatti sulla base degli argomenti passati in fase di chiamata verrà riconosciuta la firma e richiamato il metodo corretto.

10 Overloading:esempio Class Aritmetica public class Aritmetica { public int somma(int a, int b) {return a + b; public int somma(int a, int b, int c) {return a + b + c; public float somma(float a, int b) {return a + b; public float somma(float a, float b) {return a + b; Possiamo notare che i metodi hanno tutti l identificatore somma ma differiscono tra di loro per via della lista dei parametri, ogni metodo eseguirà operazioni diverse a seconda dei parametri passati dal chiamante. Sarà quindi corretta una sintassi del genere nel programma chiamante. A.somma(4, 9); B.somma(6, 7, 8); La selezione è effettuata in modo automatico in base alla firma del metodo public float somma(float a, int b)

11 Overloading:esempio errato Class Esempio public class Esempio {.. public int somma(int a, int b) {return a + b;. public float somma(int c, int d) {return c + d;

12 class Persona { Overloading:esempio Class Persona private String nome; private String cognome; public Persona(String nome,string cognome){ this.nome=nome; this.cognome=cognome; public String getnome(){ return nome; public String getcognome(){ return cognome; Per creare una persona senza nome e cognome è necessario passare esplicitamente la stringa vuota nel costruttore: Persona p = new Persona("", ""); In questo caso sarebbe preferibile poter istanziare la classe Persona senza passare alcun argomento al costruttore. Tale risultato può essere facilmente raggiunto con l'overloading del costruttore

13 Overloading:esempio Class Persona class Persona { private String nome; private String cognome; public Persona(String nome,string cognome){ this.nome=nome; this.cognome=cognome; public Persona(){ this.nome= ; this.cognome= ; public String getnome(){ return nome; public String getcognome(){ return cognome; Abbiamo creato un altro costruttore con lo stesso nome ma diversa firma. Quindi per creare una persona senza nome e cognome è sufficiente chiamare il costruttore senza parametri Persona p = new Persona();

14 Si dice che la Sottoclasse estende la Superclasse. Ereditarietà L'ereditarietà è un meccanismo fondamentale per il riutilizzo del codice nella programmazione a oggetti. Infatti grazie a questo meccanismo è possibile estendere e potenziare classi già esistenti. In Java si usa l ereditarietà quando occorre definire una classe i cui oggetti realizzano delle funzionalità aggiuntive (ovvero hanno una struttura più ricca di quella di una classe già definita) La classe più "generale" (quella preesistente) si dice Superclasse. La nuova classe più "specializzata" che eredita i campi e i metodi dalla classe preesistente viene detta Sottoclasse.

15 Ereditarietà La relazione di ereditarietà è rappresentata da un segmento terminante con una freccia (triangolare) diretta dalla Sottoclasse alla Superclasse

16 Esempio class Persona class Persona { private String nome; private String cognome; public Persona(String nome,string cognome){ this.nome=nome; this.cognome=cognome; public String getnome(){ return nome; public String getcognome(){ return cognome;

17 class Studente extends Persona { private int esami; private int matricola; public Studente( String nome, String cognome, int matricola ) { super (nome,cognome); this.matricola=matricola; public int getesami(){ return esami; public void setesami( int esami ){ this.esami=esami; public int getmatricola(){ return matricola; costruttore della classe genitrice

18 class Studente extends Persona { private int esami; private int matricola; public Studente( String nome, String cognome, int matricola ) { super (nome,cognome); this.matricola=matricola; public int getesami(){ return esami; public void setesami( int esami ){ this.esami=esami; public int getmatricola(){ return matricola; costruttore della classe genitrice L espressione super(...) invoca il costruttore della classe genitrore, quindi deve avere i parametri attuali corrispondenti in numero e tipo a quelli formali.

19

20 Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. A è una generalizzazione di B B è una specializzazione di A. B aggiunge caratteristiche strutturali e comportamentali ad A B è di tipo A (is-a, is-a-kind-of) B ha i propri attributi e metodi + attributi e operazioni ereditati da A (con visibilità public,protected) B può ridefinire attributi e operazioni ereditati da A 16/01/

21 Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. La relazione può essere letta come è un tipo di (verso di generalizzazione) può essere un (verso di specializzazione) 16/01/

22 Relazioni tra classi:ereditarietà Generalizzazione & Specializzazione L ereditarietà è il meccanismo attraverso il quale una classe detta Figlio eredita le caratteristiche di una classe detta Padre Il significato della generalizzazione è che ogni istanza della sottoclasse è anche istanza della superclasse pertanto la classe figlio può essere interpretata anche come un tipo di padre. Si dice che tra una sottoclasse e la sua superclasse esiste una relazione di tipo is-a 16/01/

23 Ereditarietà

24 I termini superclasse e sottoclasse derivano dalla teoria degli insiemi Gli oggetti Studenti (pur essendo più grandi di oggetti di tipo Persona, perché hanno variabilie metodi di istanza in più) costituiscono un sottoinsieme degli oggetti di tipo Persona (che rappresentano tutte le persone in generale) quindi sono una sottoclasse. Persone Superclassi e Sottoclassi Studenti

25 Relazione tra ereditarietà ed incapsulamento L incapsulamento rappresenta una tecnica per rendere robusto il programma mentre l ereditarietà è considerata come un ottimo strumento di sviluppo e semplificazione; Per utilizzare entrambi i paradigmi andranno però fatte alcune considerazioni. Ereditando una classe nella quale viene applicato l incapsulamento, i suoi campi privati sarebbero accessibili solo attraverso l utilizzo dei metodi set e get!. Per ovviare a questa limitazione esiste la possibilità di utilizzare il modificatore di accesso protected; una variabile dichiarata protected in una certa classe sarà accessibile da tutte le classi dello stesso package e da classi di package diversi che estenderanno la classe più generale.

26 Esempio class Persona class Persona { protected String nome; protected String cognome; public Persona(String nome,string cognome){ this.nome=nome; this.cognome=cognome; public String getnome(){ return nome; public String getcognome(){ return cognome; Nuovo tipo di modificatore di visibilità!

27 class Studente extends Persona { protected int esami; protected int matricola; public Studente( String nome, String cognome, int matricola ) { super (nome,cognome); this.matricola=matricola; public int getesami(){ return esami; public void setesami( int esami ){ this.esami=esami; public int getmatricola(){ return matricola; Richiama il metodo costruttore della classe genitrice Nuovo tipo di modificatore di visibilità!

28 Il modificatore di accesso protected: rende accessibile un campo a tutte le sottoclassi, presenti e future costituisce perciò un permesso di accesso valido per ogni possibile sottoclasse che possa essere definita.

29 Modificatori di accesso private disponibile solo dall ambito della stessa classe protected:disponibile nell ambito delle sottoclassi public: disponibile per qualsiasi altra classe default analogo a public (per package) disponibile per qualsiasi altra classe appartenente allo stesso package

30 La parola chiave super nella forma super(...), invoca un costruttore della classe base nella forma super.val, consente di accedere al campo val della classe base (sempre che esso non sia private) nella forma super.metodo(), consente di invocare il metodo metodo() della classe base (sempre che esso non sia private)

31 Pseudo-variabili Nei metodi è possibile utilizzare le pseudo-variabili this e super this fa riferimento all istanza stessa si usa per evitare ambiguità class Ciclista extends Persona { Bicicletta bici; { boolean dimmisetua(bicicletta bici) return this.bici = bici; super fa riferimento all istanza stessa come se appartenesse alla superclasse si usa per evitare ambiguità e per specializzare metodi class ContoCorrente { float saldo; void deposita(float somma) { saldo += somma; class ContoAziendale { RegistroCassa registro; void deposita(float somma) { super.deposita(somma); registro.annotaentrata(somma);

32 Polimorfismo In merito al polimorfismo dei metodi, possiamo distinguere i concetti di overload ed override. Con overload si intende la possibilità, consentita al programmatore, di definire, in una stessa classe, più metodi col medesimo nome, ma firma differente. Ciò è utile quando si desidera definire più metodi che possiedano la medesima funzionalità, ma con differente campo di applicazione (cioè con una diversa lista di parametri). Per quanto riguarda l override, invece, si intende la caratteristica delle classi derivate (ereditarietà) di poter ridefinire un metodo pubblico ereditato dalla superclasse.

33 Overriding L'overriding rappresenta una importante risorsa della programmazione ad oggetti, indica la caratteristica delle sottoclassi di poter ridefinire un metodo ereditato da una superclasse. Ovviamente non esisterà override senza ereditarietà.

34 Overriding:esempio class Impiegato public class Impiegato { proteced String nome; protected double stipendio; protected Date datanascita; public String getdettagli() { return "Nome: " + nome + "\n" + "Stipendio: " + stipendio;

35 Overriding:esempio class Impiegato public class Dirigente extends Impiegato { proteced String dipartimento; public String getdettagli() { return "Nome: " + nome + "\n" + "Stipendio: " + stipendio + "\n" + "Dirigente del Dipartimento: " + dipartimento; Quando viene istanziato un oggetto di classe Dirigente ed invocato il metodo getdettagli(), verrà automaticamente richiamato il metodo ridefinito (overridden) nella stessa classe Dirigente

36 Nell override è necessario rispettare le seguenti regole: Il metodo ridefinito nella sottoclasse deve possedere la medesima firma di quello da riscrivere (altrimenti si opererebbe un overload); e lo stesso tipo di ritorno; Lo stesso specificatore d accesso (comunque non può essere più restrittivo di quello dell originale).

37 Esercizio Realizzare i metodi della classe Polinomio1G P( x ) = a 1 x + a 0

38 Esercizio Arricchire il modello introducendo dei metodi per il calcolo della soluzione

39 Esercizio Utilizzando il principio di ereditarietà realizzare la classe Polinomio2G P( x ) = a 2 x 2 + a 1 x + a 0

40 Esercizio A partire dallo schema UML definire la classe Impiegato e per estensione le classi Tecnico Consulente e Commerciale. Verificare la correttezza del codice compilando ed eseguendo una classe di prova.

41 Esercizio Definire le classi Persona, Studente, Fuoricorso ampliando in modo opportuno lo schema UML riportato. Verificare la correttezza del codice compilando ed eseguendo una classe di prova.

42 Estendere la classe Punto per generare la classe Pixel che rappresenta le informazioni relative ad un pixel (punto) sullo schermo. La classe Pixel estensione della classe Punto (i valori x e y in questo caso rappresentano le coordinate del pixel sullo schermo) deve avere come ulteriore attributo il campo colore di tipo byte (per rappresare il colore del pixel). La classe deve inoltre fornire i seguenti metodi: Esercizio un costruttore che prenda in ingresso due parametri di tipo int (da assegnare alle coordinate x e y) ed un parametro di tipo byte da assegnare all'attributo colore. un metodo double distanzaorigine() che restituisca la distanza del punto dall'origine (si ricorda che la radice quadrata si ottiene con il comando Math.sqrt()). un metodo void scurisci(byte b) che aumenti della quantità b (si assuma che sia sempre positiva) il valore del colore del pixel. Si faccia attenzione al fatto che non si verifichi overflow durante la somma, limitando il valore ottenuto al valore massimo associabile ad un byte, un metodo void schiarisci(byte b) che diminuisca della quantità b (si assuma che sia sempre positiva) il valore del colore del pixel. Si faccia attenzione al fatto che non si verifichi underflow durante la somma, limitando il valore ottenuto al valore minimo (0) associabile ad un byte un metodo equals() in modo che restituisca true se l'argomento passato è un oggetto di tipo Pixel avente le stesse coordinate e lo stesso valore per il colore. il metodo tostring() in modo che restituisca una stringa con la rappresentazione del pixel nel formato (x, y, colore). La classe deve essere opportunamente incapsulata (cioè deve fornire anche i metodi get* ed set* per il Pixel- i metodi getcolore() e setcolore(byte col) ).

43 Cosa abbiamo imparato? Cosa vuol dire incapsulamento; Come si dichiara un variabile privata e come si ha accesso alla stessa tramite i metodi set e get; Cos è la firma di un metodo: l identificatore di un metodo e la lista dei suoi parametri; Cosa vuol dire polimorfismo e abbiamo distinto tra overloading e override di un metodo: overloading consente ad una classe di avere più metodi con lo stesso nome ma con parametri differenti;

44 overriding indica la caratteristica delle sottoclassi di poter ridefinire un metodo ereditato da una superclasse. Abbiamo affrontato il concetto di ereditarietà e abbiamo imparato la distinzione tra superclassi e sottoclassi; Quali sono i modificatori di accesso: private, public e protected; I vari utilizzi della parola chiave super: super(...), invoca un costruttore della classe base;

45 super.val, consente di accedere al campo val della classe base,sempre che esso non sia private; super.metodo(), consente di invocare il metodo metodo() della classe base, sempre che esso non sia private. L utilizzo della variabile this.

46 Questionario 1) Se si vuole accedere ai membri privati di una classe ereditata, alla quale è applicato l incapsulamento, cosa bisogna fare? Utilizzare i metodi set e get; Utilizzare il metodo get; Utilizzare i metodi set e get, oppure utilizzare il modificatore di accesso protected al posto di private; Utilizzare il metodo set. 2) A cosa serve il modificatore di accesso protected? A rendere accessibile un campo solo nell ambito della stessa classe; A rendere accessibile un campo da tutte le classi dello stesso package e di package differenti che estendano la classe più generale; A rendere disponibile un campo per qualsiasi altra classe; A rendere disponibile un campo per qualsiasi altra classe appartenente allo stesso package.

47 3) Qual è la differenza tra this e super? This fa riferimento all istanza stessa, mentre super fa riferimento all istanza della superclasse; This fa riferimento all istanza della superclasse, mentre super fa riferimento all istanza stessa; Nessuna, fanno entrambe riferimento all istanza della superclasse; Nessuna, si utilizzano entrambe per specializzare i metodi e per evitare ambiguità. 4) Qual è la differenza tra overload e override? L overload permette al programmatore di avere nella stessa classe più metodi con nome uguale ma firma differente, mentre l override è la caratteristica delle classi derivate di poter ridefinire un metodo privato ereditato dalla superclasse; L overload permette al programmatore di avere nella stessa classe più metodi con nome uguale ma firma differente, mentre l override è la caratteristica delle classi derivate di poter ridefinire un metodo pubblico ereditato dalla superclasse; L overload è la caratteristica delle classi derivate di poter ridefinire un metodo pubblico ereditato dalla superclasse, mentre l override permette al programmatore di avere nella stessa classe più metodi con nome uguale ma firma differente; L overload permette al programmatore di avere in più classi più metodi con nome uguale ma firma differente, mentre l override è la caratteristica delle classi derivate di poter ridefinire un metodo privato ereditato dalla superclasse

48 5) Di quale caratteristica della programmazione OO fa parte l override? Incapsulamento; Polimorfismo, anche se non ci può essere override se non c è ereditarietà; Ereditarietà, anche se non ci può essere override se non c è polimorfismo; Polimorfismo. 6)Nel metodo ridefinito nella sottoclasse, quali delle seguenti regole è errata per aver l override? Il metodo deve avere firma differente di quello della superclasse; Il metodo deve avere lo stesso tipo di ritorno della superclasse; Il metodo deve avere lo stesso specificatore di accesso di quello della superclasse; Il metodo deve avere lo stesso nome di quello della superclasse.

49 7)Analizzare i seguenti programmi: class Polizza_base{ protected String targaveicolo; protected long valoreassicurato; Polizza_base(String tv,long rc)throws EccTarga { if (tv.length()!=7) { throw new EccTarga(tv); targaveicolo=tv; valoreassicurato=rc; public void settargaveicolo(string tarvei) throws EccTarga { if (tarvei.length()!=7) { throw new EccTarga(tarvei);

50 targaveicolo=tarvei; public String gettargaveicolo() { return targaveicolo; public void setvaloreassicurato(long rc) { valoreassicurato=rc; public long getvaloreassicurato() { return valoreassicurato; public long premioannuale() { long pa=valoreassicurato/100; return pa;

51 class PolizzaIncendioFurto extends Polizza_base { private long incendio; private long furto; PolizzaIncendioFurto(String tv,long rc,long in,long fur) throws EccTarga { super(tv,rc); incendio=in; furto=fur; public void setincendio(long in) { incendio=in; public long getincendio() { return incendio;

52 public void setfurto(long ft) { furto=ft; public long getfurto() { return furto; public long premioannuale(long rc,long in,long fur) { long pa=(valoreassicurato+incendio+furto)/100; return pa; Quali delle caratteristiche della programmazione OO sono presenti? Ereditarietà e polimorfismo; Ereditarietà e incapsulamento; Ereditarietà, incapsulamento e polimorfismo; Ereditarietà.

53 8) Nei programmi della domandi 7 è presente l incapsulamento? Se si quali? Si,i metodi set e get della classe Polizza_base; Si,i metodi set e get delle due classi; Si,i metodi set e get della classe PolizzaIncendioFurto; No. 9)Nei programmi della domanda 7 sono presenti casi di overload? No; Si, i costruttori delle due classi; Si, il metodo premioannuale(); Si, i metodi set e get. 10) Nei programmi della domanda 7 è presente l ereditarietà? Se si, qual è la superclasse e qual è la sottoclasse? No, non c è ereditarietà ; Si, la superclasse è PolizzaIncendioFurto e la sottoclasse Polizza_base; Si, la superclasse è Polizza_base e la sottoclasse PolizzaIncendioFurto.

54 11) Se nel programma Polizza_base della domanda7 le variabili d istanza fossero state dichiarate pubblic, avremmo comunque potuto accedere ad esse nelle classe PolizzaIncendioFurto? No non avremmo potuto accedere ad esse in nessun caso; Si e sarebbero state disponibili anche per altre classi; Si, avremmo potuto accedervi tramite i metodi set e get; No e non avremmo potuto neanche estendere la superclasse. 12)Supponiamo che una classe Sportivo abbia le seguenti variabili: ciclista e corridore. Creiamo una classe atletica leggera che è ereditata da sportivo e vogliamo richiamare le due variabili. Quali tra le seguenti alternative permette di fare una giusta dichiarazione della sottoclasse e permette di richiamare le variabili? class Atletica leggera implements Sportivo; nel costruttore per richiamare le due variabili mettiamo super( ciclista, corridore); class Atletica leggera extends Sportivo; nel costruttore per richiamare le due variabili mettiamo super( ciclista, corridore); class AtleticaLeggera extends Sportivo; nel costruttore per richiamare le due variabili mettiamo super( ciclista, corridore); class Atletica leggera implements Sportivo; per richiamare le due variabili scriviamo dopo la dichiarazione della classe super( ciclista, corridore).

55 13) Supponiamo di avere nella classe studente il seguente metodo: public double MediaVoti(votofisica, votomatematica, votostoria, votoinformatica){ double media=(votofisica+votomatematica+votoinformatica+votostoria)/4; return media; Vogliamo sottoporre il metodo a overloading e overriding, quali delle seguenti alternative è esatta? Per l overloading nella stessa classe studente avremmo: public double MediaVoti(votoinglese, votogeografia){ double media=( votoinglese, votogeografia)/2; return media; L overriding invece di questo metodo non è possibile. Per l overriding nella stessa classe studente avremmo: public double MediaVoti(votoinglese, votogeografia){ double media=( votoinglese, votogeografia)/2; return media; Per l overloading in una ipotetica sottoclasse di studente la firma sarà la stessa: MediaVoti(votofisica, votomatematica, votostoria, votoinformatica). Sia per l overloading che per l overriding la firma sarà la stessa: MediaVoti(votofisica, votomatematica, votostoria, votoinformatica).

56 Per l overloading nella stessa classe studente avremmo: public double MediaVoti(votoinglese, votogeografia){ double media=( votoinglese, votogeografia)/2; return media; Per l overriding in una ipotetica sottoclasse di studente la firma sarà la stessa: MediaVoti(votofisica, votomatematica, votostoria, votoinformatica). 14) Quando analizziamo una classe, da cosa capiamo subito se la classe è stata è ereditata da un altra? Se i suoi metodi presentano una delle caratteristiche di overloading o overriding; Se dopo il nome della classe c è la parola chiave extends e il nome di un altra classe; Se nel costruttore è presente la parola chiave super e nel parantesi un elenco di parametri; Se dopo il nome della classe c è la parola chiave implements e il nome di un altra classe.

57 15) Analizzare i due metodi seguenti: public int somma(int a, int b) { return a+b; public int somma(int a, int b, int c) { return a+b+c; quale proprietà della programmazione OO viene applicata? Overloading ; Overriding; Polimorfismo; Incapsulamento 16) Dati il seguente frammento di codice: class X{ private int z; il seguente frammento di codice è corretto? class Y{ public static void main( String args[]){ X obj = new X(); obj.z=10; No, un membro private non può essere utilizzato all esterno della sua classe; Si; No, la dichiarazione obj.z=10; No, la dichiarazione di un membro deve succedere uno specificatore di accesso.

58 17) Come viene definito il nome di un metodo più il suo elenco di parametri? metodo static; overload; Firma del metodo; overriding. 18) Una sottoclasse esegue il costruttore della sua superclasse? Si, tramite la parola chiave super; Si, tramite la parola chiave extends; Si, tramite la parola chiave implements; No. 19) Super() può trovarsi ovunque all interno del costruttore di una sottoclasse? Si; No, deve essere la prima istruzione eseguita; No, deve essere l ultima istruzione eseguita; Deve essere dichiarato nella firma del costruttore.

59 20)Come si indica che la classe Notebook è una sottoclasse della classe computer? E se vogliamo richiamare in Notebook le variabili tastiera e mouse cosa dobbiamo fare? Per la dichiarazione della classe: class Notebook implements Computer; nel costruttore per richiamare le due variabili mettiamo super( tastiera, mouse); Per la dichiarazione della classe: class Computer extends Notebook; nel costruttore per richiamare le due variabili mettiamo super(tastiera, mouse); Per la dichiarazione della classe : class Notebook extends computer; nel costruttore per richiamare le due variabili mettiamo super(tastiera, mouse); Per la dichiarazione della classe : class Notebook extends computer; per richiamare le due variabili scriviamo dopo la dichiarazione della classe super(tastiera, mouse).

60 21) Analizzare i due metodi seguenti: class A { public void saluta(string message) { System.out.println(message); class B extends A{ public void saluta(string message) { System.out.println("Il metodo nuovo ti saluta con questo messaggio: "message); quale proprietà della programmazione OO viene applicata? Overloading ; Overriding; Polimorfismo; Incapsulamento.

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

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

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

Dettagli

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

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

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

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Paradigma O.O. Oggetti e Classi Ereditarietà Paradigma Object-Oriented Il paradigma O.O. si ispira all ambiente che ci circonda,

Dettagli

Principi di Progettazione del Software a.a

Principi di Progettazione del Software a.a Principi di Progettazione del Software a.a. 2017-2018 Fondamenti di Java Ing. Obiettivi della lezione Introduzione alla programmazione Object Oriented Ereditarietà Polimorfismo Interfacce Eccezioni 2 1

Dettagli

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

Principi di Progettazione del Software. Principi di Progettazione del Software a.a Principi di Progettazione del Software a.a. 2016-2017 Fondamenti di Java Ing. Principi di Progettazione del Software https://twitter.com/rvergallo 2 1 Obiettivi della lezione Introduzione alla programmazione

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

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

Gerarchia di classi Java 1

Gerarchia di classi Java 1 Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale

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

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

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

INFORMATICA OOP Relazioni tra classi Roberta Gerboni 2015 - Roberta Gerboni Relazione di associazione E possibile legare varie classi presenti in un progetto con una relazione di associazione. Una associazione individua una connessione logica tra classi

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

Gerarchia di classi Java 1

Gerarchia di classi Java 1 Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale

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

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

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

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

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

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

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER

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

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

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

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

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

PRINCIPI DELLA OOP. Ereditarietà e polimorfismo

PRINCIPI DELLA OOP. Ereditarietà e polimorfismo PRINCIPI DELLA OOP Ereditarietà e polimorfismo Ereditarietà e specializzazione Una delle caratteristiche distintive del paradigma di programmazione orientato agli oggetti è l'ereditarietà L'ereditarietà

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 a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Programmazione O.O. Oggetti e Classi Metodi Parametri Variabili di istanza Costruttori Variabili locali Esercizi Implica: Programmazione

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

Ereditarietà. Una classe, detta superclasse, può essere specializzata definendo una sottoclasse che ne contenga casi particolari.

Ereditarietà. Una classe, detta superclasse, può essere specializzata definendo una sottoclasse che ne contenga casi particolari. Ereditarietà Per definire stato e comportamento di nuovi oggetti, è utile avere una base da cui partire In particolare, un nuovo oggetto potrebbe essere un caso particolare di una tipologia di oggetti

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

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

17 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce 17 - 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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 25 Ereditarietà A. Miola Maggio 2012 http://www.dia.uniroma3.it/~java/fondinf/ Ereditarietà 1 Contenuti q Livelli di astrazione

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) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo 1 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2 Introduzione Java prevede due automatismi legati

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

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

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

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

SYLLABUS TRIENNIO. prof. Mauro Malatesta. Approvata dal Dipartimento di il. Approvata dal Consiglio di classe il...

SYLLABUS TRIENNIO. prof. Mauro Malatesta. Approvata dal Dipartimento di il. Approvata dal Consiglio di classe il... Anno scolastico: 2014 2015 Classe: 4 Sez.: G Disciplina: INFORMATICA Articolazione: Informatica Docente: prof. Mauro Malatesta (firma) Approvata dal Dipartimento di il Approvata dal Consiglio di classe

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

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

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

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

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

Oggetti e dati primitivi 1

Oggetti e dati primitivi 1 I membri delle classi Oggetti e dati primitivi Corso di laurea in Le classi contengono 2 tipi di membri, definiti per l intera classe o per le singole istanze Le variabili o i campi, che rappresentano

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

Introduzione a Java. Giovanni Pardini. Dipartimento di Informatica Università di Pisa. 2 Java. Sommario. Esercizio: BankAccount

Introduzione a Java. Giovanni Pardini. Dipartimento di Informatica Università di Pisa. 2 Java. Sommario. Esercizio: BankAccount Introduzione a Java 2 Giovanni Pardini pardinig@di.unipi.it Dipartimento di Informatica Università di Pisa 6 dicembre 2009 1 2 3 4 5 1 Classi e variabili statiche 2 3 Classi e variabili statiche 4 5 Vogliamo

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

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

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

Dettagli

Linguaggi di Programmazione I Lezione 11

Linguaggi di Programmazione I Lezione 11 Linguaggi di Programmazione I Lezione 11 Prof. Marcello Sette mailto://marcello.sette@gmail.com http://sette.dnsalias.org 13 maggio 2008 Ereditarietà 3 Specializzazione (1).......................................................

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

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

E7 Esercizi sul Capitolo 7 Realizzazione di Classi E7 Esercizi sul Capitolo 7 Realizzazione di Classi Esercizio 1 (esercizio 7.1 del libro di testo). Nella classe Studente definita di seguito indicare le variabili d istanza, le variabili di classe e le

Dettagli

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Fondamenti di Informatica T-1. Costruttori Ereditarietà Costruttori Ereditarietà 2 Costruttori Si occupano della creazione e dell'allocazione in memoria degli oggetti. public class Persona{ //Variabili di istanza private String nome; private String cognome;

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

Laboratorio di Sistemi Ereditarietà Java

Laboratorio di Sistemi Ereditarietà Java 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 definiti

Dettagli

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati Oggetti Le classi in Java Corso di laurea in Un oggetto è definito dal suo stato - descrive le sue caratteristiche comportamento - quello che può fare Ad esempio: il modello di una moneta Una moneta può

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

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Object Oriented Programming: Fondamenti Prof. Stefano Mariani Dott. Alket Cecaj Indice Introduzione all OOP Classi vs. oggetti Campi

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

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Dettagli

SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. TIPI DI DATI ASTRATTI. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as.

SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. TIPI DI DATI ASTRATTI. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as. SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as. Confronto tra oggetti: Equals(). IComparable. IComparer. TIPI DI DATI ASTRATTI

Dettagli

Oggetti e classi. Cos è un oggetto

Oggetti e classi. Cos è un oggetto Oggetti e classi Cos è un oggetto Basta guardarsi intorno per scoprire che il mondo reale è costituito da oggetti: libri, biciclette, giocattoli, ma anche ragazzi, bambini, fiori, gatti, cani, fiumi, montagne,

Dettagli

E18 Esercizi su ereditarietà e polimorfismo

E18 Esercizi su ereditarietà e polimorfismo E18 Esercizi su ereditarietà e polimorfismo Esercizio 1 (esercizio 10.1 del libro di testo). Si scriva una classe Persona dotata dei campi CodiceFiscale, Nome, Cognome e dei metodi per impostare e leggere

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

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://pages.di.unipi.it/milazzo milazzo

Dettagli

Riassunto. La programmazione OO. Oggi. Esempio

Riassunto. La programmazione OO. Oggi. Esempio Riassunto La programmazione OO Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 17 29 novembre

Dettagli

17 - Ereditarietà, tipi e gerarchie

17 - Ereditarietà, tipi e gerarchie 17 - 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

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

Lezione 13 Classi interne

Lezione 13 Classi interne Lezione 13 Classi interne Questa lezione chiude la parte del corso più squisitamente dedicata alla programmazione orientata agli oggetti con Java. Sarà esaminato un nuovo tipo di classi, finora taciuto,

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

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

Dichiarazione di una classe. Dichiarazione ereditarietà

Dichiarazione di una classe. Dichiarazione ereditarietà Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante

Dettagli

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione. Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette

Dettagli

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I { Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi

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

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0 Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 10 a cura del prof Francesco Tappi Il paradigma orientato agli oggetti implica lo sviluppo di unità di programmazione attive, chiamate

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

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

Inizializzare oggetti

Inizializzare oggetti Inizializzare oggetti Uso della Classe Software per TLC - AA 2008/2009 1 Costruttori e polimorfismo Uso della Classe Un codice migliore Software per TLC - AA 2008/2009 2 Costruttori ed Ereditarietà Output:

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

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

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

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