Oggetti e Classi in Java

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Oggetti e Classi in Java"

Transcript

1 M.P. PARTE I Corso Metodologie di Programmazione ( Ling.di Prog.:Metod.di Progr.) a.a Docente : prof.b: Venneri Lucidi delle lezioni relative al Modulo II: Programmazione orientata agli oggetti: Java Oggetti e Classi in Java 1 2 Oggetti Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo Un oggetto rappresenta un dato, ed è costituito da stato: collezione di variabili (attributi) comportamento: collezione di operazioni (metodi) Esempio - contatore STATO int c; METODI void iniz(int i) inizializza il contatore a i void incr() incrementa il contatore di 1 void decr() decrementa il contatore di 1 int val() restituisce il valore del contatore 3 4 1

2 Contatore NOTA Variabile locale Passaggio by value Invio di Messaggi void iniz(int i) void incr() void decr() int val() I NTERFACCI A CONTATORE int c; void iniz(int i) c= 1; void incr() + + c; void decr() --c; int val() return c; I MPLEMENTAZI ONE invio di messaggio = invocazione di un metodo In Java, come in altri linguaggi, si usa la notazione con il punto: oggetto.metodo( )(anche per selezionare il campo attributo) cont1 int x,y; cont1.incr(); 3 cont2.decr(); x = cont1.val(); y = cont2.val(); cont2 10 x ha valore 4 e y ha valore THIS Forma generale di una Classe In un linguaggio tradizionale, per eseguire una operazione su un dato, dovremmo passare il dato come parametro: incr(cont1) o iniz(cont1, 3) Nella programmazione ad oggetti il dato è l oggetto implicito destinatario del messaggio (this = parametro implicito) cont1.incr() o cont1.iniz(3) 7 class nome-classe *tipo v1; *tipo v2; *tipo vn; *tipo nomemetodo1(elenco-parametri) corpo del metodo *tipo nomemetodon(elenco-parametri) corpo del metodo dove * è lo specificatore di accesso del membro seguente 8 2

3 Esempio: contatore Esempio :contatore La classe definisce un tipo Istanza di una classe = oggetto I stanze cont cont2 In Java: class Contatore int c; void iniz(int i) c = i; void incr() ++c; void decr() --c; int val() return c; Nota: this implicito In ++c, c sta per this.c 9 10 Oggetti come parametri Il parametro formale di un metodo può essere un oggetto L oggetto, parametro attuale, può essere modificato. class Contatore int c; void swap(contatore altro) int temp=c; c=altro.c; altro.c=temp; Siano c1 e c2 due contatori: c1.swap(c2) L effetto ottenuto è che c1 e c2 hanno relamente scambiato il loro valore Information Hiding Per realizzare information hiding si usano le parole riservate public - interfaccia private - implementazione di fronte ad ogni membro della classe class Contatore private int c; public void iniz(int i) c = i; public void incr() ++c; public void decr() --c; public int val() return c;

4 Controllo dell accesso Accesso alle classi Specificatori per i membri delle classi: public è accessibile da qualunque parte del programma (anche da codice di altri pacchetti) private è visibile solo all interno della stessa classe protected è visibile a tutte le classi dello stesso pacchetto e solo alle sottoclassi di pacchetti diversi default (nessuna specifica esplicita di accesso) è visibile a tutte le classi dello stesso pacchetto ma non alle classi di altri pacchetti Una classe ha solo due livelli di accesso possibili ( lo specificatore è premesso alla parola class ) public accessibile da qualunque codice default accessibile solo da codice all interno dello stesso pacchetto Creare un istanza Recupero della memoria new Contatore() Crea un nuovo oggetto di tipo Contatore e ne restituisce la referenza (handle) Tutti gli oggetti sono allocati dinamicamente (quando si esegue la new) e sono manipolati attraverso una handle (puntatore/ referenza) Garbage collection (Scheme, Prolog, Java) Il programmatore puo solo allocare dati dinamici Una procedura di sistema, il garbage collector, si preoccupa di recuperare tutte le aree di memoria nello heap non più raggiungibili in modo da poterle riutilizzare

5 Come si inizializza un oggetto Costruttori Si può chiamare esplicitamente un metodo di inizializzazione: Contatore cont1; cont1 = new Contatore(); cont1.iniz(3); Java (come C+ + ) fornisce la nozione di costruttore, che consente di inizializzare automaticamente un oggetto al momento della creazione. class Contatore int c; Contatore(int i) c = i; Costruttore Ha lo stesso nome della classe! Non ha tipo di ritorno ( è implicito il tipo della classe stessa)! Contatore cont1 = new Contatore(3) crea un contatore - lo inizializza a Overloading di metodi Overloading di costruttori Overloading: metodi diversi possono avere lo stesso nome (nello stesso campo di visibilità) I metodi "overloaded" si distinguono uno dall altro in base alla lista e ai tipi dei parametri ( non in base al tipo di ritorno) Il compilatore, quando incontra una chiamata al metodo, distingue di quale versione si tratta in base al matching dei parametri attuali-formali E opportuno avere diversi costruttori overloaded in ogni classe Esempio: class Contatore int c; Contatore() c = 0; Contatore(int i) c = i;

6 Chiamata del costruttore La parola chiave static Contatore cont1 = new Contatore(3) Contatore cont1 = new Contatore() Nel primo caso viene chiamato il costruttore con parametro intero, nel secondo il costruttore senza parametri Java crea un costruttore di default senza parametri per le classi per le quali non è disponibile alcun costruttore quello di default non è più disponibile se è definito un costruttore! La parola static può essere usata per identificare un membro di una classe che verrà utilizzato senza riferimento a un istanza della classe: svolge il ruolo di una variabile globale, tutte le istanze di quella classe condividono la stessa variabile di classe Esempio: In una classe BankAccount, vogliamo fare in modo che il costruttore assegni il numero di conto in modo progressivo (1,2, ):tenere l ultimo numero di conto assegnato Esempio di variabile di classe Metodi static public class BankAccount.. private int accountnumber; private static int last=0 BankAccount () // genera il numero di conto successivo last++; //aggiorna l oggetto accountnumber=last ; Attenzione: le variabili statiche non sono, in genere, desiderate. Per chiamare un metodo (così come una variabile) static dall esterno della sua classe, si usa la solita notazione con punto preceduto dal nome della classe nomeclasse.metodo() Questi metodi possono chiamare solo altri metodi static, possono accedere solo a variabili static,etc, ossia non hanno nessun riferimento a un this implicito

7 Variabili final Classi interne Una variabile può essere dichiarata final per impedire la modifica del so contenuto (convenzione: lettere maiuscole per i loro nomi, come per le costanti). il significato di final è del tutto diverso per i metodi! Quando è necessaria una classe per uno scopo molto tattico e limitato, si può dichiarare questa inner-classe all interno del metodo che ne ha bisogno. Spesso, in questi casi, si vuole solo usare un esemplare di questa classe per gli scopi del metodo: è possibile definire una classe anonima CLASSI ASTRATTE La parola chiave abstract Definizione Una classe astratta è una classe che contiene almeno un metodo non implementato Ruolo : serve come base di una derivazione, fattorizza comportamenti comuni a più classi, etc.., non può essere istanziata 27 In Java ogni metodo astratto può essere evidenziato con il prefisso abstract la classe che ha (eredita) almeno un metodo astratto (senza body) deve essere etichettata con abstract (ma non viceversa) Es: abstract class Figura. public abstract void disegna(); 28 7

8 INTERFACCE Interfaccia vs.classe Definizione Una INTERFACE è una classe totalmente astratta : non contiene attributi e tutti i metodi sono astratti Ruolo : dichiara un insieme di metodi con le loro signature, quindi definisce l interfaccia comune di diverse classi derivate (enfatizza separazione fra interfaccia e implementazione) In Java: una classe concreta che deriva da un interfaccia implementa l interfaccia (derivazione particolare) 29 Tutti i metodi sono automaticamente abstract Tutti i metodi sono automaticamente public Non contiene attributi Sintassi Java public interface NomeInterfaccia Elenco metodi con signature Esercizio: interfaccia per Pile e Code 30 PARTE II Derivazione, Ereditarietà e Polimorfismo Ereditarietà class Finestra Rettangolo r;... void disegnacornice()... void disegnacontenuto()... class FinestraConTitolo extends Finestra String titolo; void disegnatitolo()

9 Sottoclassi Extends (Java) Classe = Modulo FinestraConTitolo estende Finestra -eredita attributi e metodi -aggiunge attributi e metodi -riscrive metodi 33 E la parola chiave per definire una gerarchia di classi class ClassePadre [ ] class ClasseFigliaUno extends ClassePadre [ ] class ClasseFigliaDue extends ClassePadre [ ] 34 Sottotipo Controllo statico dei tipi Derivazione di classe= Specializzazione del tipo Java, come molti altri linguaggi, effettua un controllo dei tipi (type checking) statico. Statico: fatto dal compilatore prima di iniziare l esecuzione del programma. class B extends A x B x A A B Dinamico: fatto dall interprete durante l esecuzione (a runtime) Il type checking statico garantisce che non ci saranno errori durante l esecuzione

10 Controllo statico dei tipi Ereditarietà singola Finestra f; FinestraConTitolo ft;... ft.disegnacornice(); f.disegnacornice(); ft.disegnatitolo(); f.disegnatitolo(); corretto errore di compilazione f è una finestra e non ha il metodo disegnatitolo Type checking statico: il compilatore controlla che per una variabile si chiami un metodo definito (ereditato) per la classe di quella variabile 37 Ogni sottoclasse ha una sola sopraclasse. Struttura ad albero. In Java la classe Object è la radice della gerarchia. Qualunque oggetto è un Object. I tipi primitivi non sono Object. 38 Ereditarietà multipla Polimorfismo ApparecchioElettrico tensione potenza Televisore pollici In Java non è permessa. Articolo codice prezzo Deve essere trasformata con relazione d uso 39 POLIMORFISMO: proprietà di un oggetto di avere più di un tipo, in accordo alla relazione di ereditarietà. Esempio: D sottoclasse di B e di A un oggetto D è un B ed è un A un oggetto di tipo (classe) D è anche un oggetto di tipo (classe) B e anche un oggetto di tipo (classe) A 40 10

11 Polimorfismo Type Matching A a; B b; D d; d = new D(); b = new D(); a = new D(); a = b; questi assegnamenti sono tutti legali perché un oggetto di tipo D ha anche tipo B e tipo A L assegnamento x = espr è corretta per il compilatore se: Tipo di espr è uguale a tipo di x Tipo di espr è sottotipo del tipo di x Analogamente se x è un parametro formale di un metodo e espr è il parametro attuale (della chiamata) 41 Controllo statico. 42 Upcasting Upcasting Upcasting: ci si muove da un tipo specifico ad uno più generico (da un tipo ad un suo sopratipo ). L upcasting è sicuro per il type checking: dato che una sottoclasse eredita tutti i metodi delle sue sopraclassi, ogni messaggio che può essere inviato ad una sopraclasse può anche essere inviato alla sottoclasse senza il rischio di errori durante l'esecuzione. Poligono p; Rettangolo r;... p.disegna(); r.disegna(); p.perimetro(); r.perimetro(); corretto per il compilatore

12 Upcasting Overriding se si facesse il controllo a runtime, sarebbe corretto perché p è legata ad un rettangolo (che possiede il metodo diagonale). Poligono p; Rettangolo r; p = r; r.diagonale(); corretto p.diagonale(); errore di compilazione p è di tipo Poligono e non ha il metodo diagonale 45 Una sottoclasse può anche riscrivere (OVERRIDING) un metodo della sopraclasse. Si deve MANTENERE LA STESSA SIGNATURA class Finestra Rettangolo r;... void disegnacornice()... void disegnacontenuto()... class FinestraConTitolo extends Finestra String titolo; void disegnacornice() disegna la cornice con il titolo 46 Riscrivere un metodo super Spesso un metodo di una sottoclasse definito per overriding non ridefinisce completamente il metodo della sua sopraclasse, ma lo estende. Ad esempio, il metodo disegnacornice della FinestraConTitolo estende il metodo disegnacornice della Finestra, con del codice specifico per disegnare il titolo. Per evitare di duplicare il codice, si può far riferimento ad un metodo della sopraclasse con lo stesso nome mediante la notazione super. 47 class FinestraConTitolo extends Finestra String titolo; void disegnacornice() super.disegnacornice();... nuovo codice... super.disegnacornice() chiama il metodo disegnacornice della sopraclasse (che altrimenti non sarebbe visibile, causa lookup dei metodi dal basso) Nota Senza super si avrebbe un loop infinito! 48 12

13 Cella Costruttori in classi derivate class Cella int contenuto=0; int get() return contenuto; void set(int n) contenuto=n; class CellaConMemoria extends Cella int backup=0; void set(int n) backup=contenuto; super.set(n); void restore() contenuto=backup; Il costruttore della classe derivata deve richiamare il costruttore della classe base per inizializzare i campi ereditati Java inserisce automaticamente una chiamata al costruttore della classe base nel costruttore della classe derivata (prima azione) Super come costruttore class ClasseSopra public ClasseSopra(int x) System.out.println("Costruttore ClasseSopra: " + x); public ClasseSopra() this(-1); System.out.println("Costruttore ClasseSopra"); class ClasseSotto extends ClasseSopra public ClasseSotto (int x) super(x); System.out.println("Costruttore ClasseSotto"); public ClasseSotto() super(); System.out.println("ostruttore ClasseSotto"); Super è utilizzata per chiamare un costruttore della sopraclasse La chiamata di this( ) o super( ) deve essere la prima istruzione del costruttore! Polimorfismo: perdita d informazione Poligono p; Rettangolo r;... p = r; p.disegna(); p.perimetro(); corretto per il compilatore, ma quale metodo si esegue? Quello di Poligono o quello di Rettangolo?

14 Binding dinamico Un oggetto decide quale metodo applicare a se stesso in base al proprio tipo BINDING DINAMICO: la forma di un oggetto determina dinamicamente quale versione di un metodo applicare Polimorfismo + Binding dinamico Oggetti diversi, ma con una interfaccia comune, sono trattati in modo omogeneo, ma ciascuno può rispondere a una chiamata di metodo in modo specifico Binding dinamico p.perimetro(); Si esegue il metodo perimetro dell oggetto a cui p fa riferimento in quel momento. Poligono p = new Poligono(); si esegue il metodo Rettangolo r = new Rettangolo(); perimetro di Poligono p.perimetro(); p = r; p.perimetro(); si esegue il metodo perimetro di Rettangolo Uso del binding dinamico Lookup dei metodi class Finestra Rettangolo r;... void disegnacornice()... void disegnacontenuto()... void rinfresca() disegnacornice(); disegnacontenuto(); class FinestraConTitolo extends Finestra String titolo; void disegnacornice() disegna la cornice con il titolo 55 Ricerca di un metodo per un oggetto: la sottoclasse verifica se possiede o meno un metodo con tale nome e con gli stessi parametri (stessa signatura), se si, lo usa se no, si cerca nella classe padre (e cosi` via nella gerarchia) Un metodo definito in una sottoclasse e avente la stessa signatura di un metodo di una delle classi antenate nasconde il metodo di quest ultima alla sottoclasse 56 14

15 Overloading vs. overriding Overriding di metodi privati class ClasseA public void metodo (int x) System.out.println("Metodo di Classe A: " + x); OVERLOADING public void metodo() System.out.println("Metodo di Classe A"); this.metodo(-1); OVERRIDING OVERLOADING class ClasseB extends ClasseA public void metodo (int x) System.out.println("Metodo di Classe B esteso"); super.metodo(x); OVERLOADING public void metodo() System.out.println("Metodo di Classe B esteso"); super.metodo(); Overloading: stesso nome ma diversa lista dei tipi di parametri Overriding: stessa firma ma classi diverse (purché nella stessa gerarchia) 57 class ClasseUno public void metodo1 () System.out.println("Eseguito metodo 1 nella classe Uno"); this.metodo2(); private void metodo2() System.out.println("Eseguito metodo 2 nella classe Uno"); class ClasseDue extends ClasseUno public void metodo2 () System.out.println("Eseguito metodo 2 nella classe Due"); Se invio il messaggio metodo1 ad un oggetto di tipo ClasseDue quale metodo metodo2 viene eseguito? Binding dinamico? Dichiarare che un metodo è privato equivale a cambiargli nome A parte ClasseUno nessuno sa o deve sapere dell esistenza di metodo2 di ClasseUno 58 Ereditarietà e Accesso Anche se la sottoclasse comprende tutti i membri della sopraclasse, non può accedere ai membri dichiarati private nella sopraclasse Un membro di una classe dichiarato private rimane tale anche per le sottoclassi Java non consente di riscrivere un metodo per restringerne l accesso (es. errore se public nella superclasse e private nella sottoclasse) La parola chiave final Come modificatore all inizio della dichiarazione di un metodo: il metodo non può essere riscritto nelle sottoclassi (risoluzione con binding statico) Come modificatore davanti alla dichiarazione di una classe : la classe non può essere ereditata (implicitamente tutti i suoi metodi sono final) Una classe non può essere contemporaneamente abstract e final!

16 Derivazione e classi astratte Derivazione e Interfacce Da una classe astratta possiamo derivare altre classi astratte e/o classi concrete (valgono tutte le regole della normale derivazione di classi) Uso: delle classi astratte posso dichiarare referenze a oggetti, anche se non posso creare oggetti uso del polimorfismo Un interfaccia può ereditare da altre interfacce utilizzando la parola chiave extends Interface Prima void m1(); void m2(); Interface Seconda extends Prima void m3(); L interfaccia Seconda include la Prima Implementazione di Interfacce Una classe può implementare un Interfaccia con la parola chiave implements class MyClass implements Seconda deve implementare m1, m2 e m3 1. MyClass deve implementare anche i metodi ereditati! 2. Polimorfismo: Seconda obj = new MyClass(); obj.m2(); 3. I metodi che implementano i metodi dell interfaccia devono essere dichiarati public devono avere la stessa signatura dell interfaccia Interfacce vs. classi astratte Le classi astratte possono essere miste, ossia possono contenere anche metodi non astratti. Ereditarietà singola per le classi, anche astratte, ma una classe può implementare più interfacce Una classe può implementare più di una interfaccia e contemporaneamente estendere una classe (parziale ereditarietà multipla, matrimonio di convenienza)

17 Interfacce multiple interface A void metodoa(); interface B void metodob(); class C implements A,B public void metodoa() System.out.println("sono A"); public void metodob() System.out.println("sono B"); public static void main(string[] args) A a = new C();//l oggetto è visto come un A B b = new C();//l oggetto è visto come un B a.metodoa(); b.metodob(); a.metodob(); //errore: A non ha il metodob 65 Verso l ereditarietà multipla Una classe può implementare più interfacce senza i problemi standard della multipla ereditarietà: non ci sono attributi (quindi non c è il problema della loro duplicazione). non ci possono essere problemi di name clash di metodi, perché i metodi ereditati sono astratti. 66 Horror Show (un esempio) Interface Mostro void minaccia(); Interface MostroPericoloso extends Mostro void distrugge(); Interface Letale void uccide(); Interface Vampiro extends MostroPericoloso,Letale void bevesangue(mostro m); Horror Show (continua) Class Dragone implements MostroPericoloso public void minaccia() ; public void distrugge() ; Class Dracula implements Vampiro public void minaccia() ; public void distrugge() ; public void uccide() ; public void bevesangue(mostro m) ;

18 Horror Show (continua) Interfacce per viste diverse Class HorrorShow static void azione1(mostro m) m.minaccia(); static void azione2(mostropericoloso mp) mp.minaccia(); mp.distrugge; public static void main ( ) Dragone animale = new Dragone(); Vampiro vp = new Dracula(); azione1(animale); azione2(animale); vp.bevesangue(animale) Interface CanSwim void nuota(); Interface CanFly void vola(); Class Azione public void combatte(); Class Eroe extends Azione implements CanSwim, CanFly Un Eroe è visto come CanSwim o come CanFly, a seconda che sia riferito da una variabile di tipo CanSwim o di tipo CanFly ( è visto = insieme dei servizi offerti) Betti BettiVenneri: Un esempio Un oggetto DataSet gestisce dei valori in ingresso, aggiungendo, tenendo il massimo, calcolando la media etc public class DataSet // Costruisce un insieme di dati vuoto. public DataSet() sum = 0; count = 0; maximum = 0; Un esempio (continua) // Aggiunge un valore all insieme dei dati. public void add(double x) sum = sum + x; if (count == 0 maximum < x) maximum = x; count++; //restituisce il massimo public double getmaximum() return maximum; private double sum; private double maximum; private int count;

19 Sviluppare codice riutilizzabile Usare Interfacce per migliorare il riuso -La classe DataSet potrebbe essere utilizzata anche per ottenere il minimo, il massimo, etc.. su conti bancari. Supponiamo di avere una classe BankAccount con un campo Saldo e un metodo getsaldo che restituisce questo valore Bisogna modificare la classa DataSet solo per cambiare il tipo dei dati: public void add(bankaccount x) public BankAccount getmaximum() private BankAccount maximum; Ma il resto del codice resta uguale! 73 E per analizzare le monete? Soluzione: invece di avere tante classi DataSet, utilizziamo un interfaccia comune Misurabile tale che monete, BankAccount, etc siano tutti Misurabili public class DataSet // Aggiunge un valore all insieme dei dati. public void add(misurabile x) sum = sum + x.getmisura; if (count == 0 maximum.getmisura < x.getmisura) maximum = x; count++; 74 Usare Interfacce (continua) Usare Interfacce (continua).. //Restituisce il massimo public Misurabile getmaximum() return maximum; private double sum; private Misurabile maximum; private int count; public interface Misurabile double getmisura() Public class BankAccount implements Misurabile public double getmisura return saldo; Così anche le classi moneta etc devono implementare Misurabile, ossia fornire la propria implementazione di getmisura

20 Usare Interfacce (continua) Il disaccoppiamento fra BankAccount,Moneta,etc. e DataSet rende riutilizzabile DataSet interface DataSet Misurabile BankAccount Moneta Aggiungere Interfacce strategiche Problema : Posso modificare le classi BankAccount, solo perché sono definite da me Posso misurare un oggetto in un unico modo Soluzione: la responsabilità della misurazione non deve ricadere sugli oggetti, è meglio che un altro oggetto effettui le misurazioni. Ci sarà un oggetto-misuratore per ogni tipo di dati, questi misuratori implementano un interfaccia comune Measurer Aggiungere Interfacce (continua) Aggiungere Interfacce (continua) File Measurer.java /** Descrive una qualsiasi classe i cui oggetti possano misurare altri oggetti. */ public interface Measurer /** Calcola la misura di un oggetto. anobject è l oggetto da misurare return la misura */ double measure(object anobject); La classe DataSet è ora costruita con un oggetto m di tipo Measurer, a cui sono demandate le operazioni di misurazione Per ottenere un misuratore dei BankAccount ci sarà la classe opportuna Class BankMeasurer implements Measurer che implementa il suo metodo measure (attenzione: il parametro è object,quindi sarà necessario un downcast esplicito!)

21 File DataSet.java public class DataSet /*Costruisce un insieme vuoto di dati con un misuratore assegnato. ameasurer è il misuratore che viene usato per misurare i valori dei dati */ public DataSet(Measurer ameasurer) sum = 0; count = 0; maximum = null; measurer = ameasurer; /** Aggiorna il massimo e aggiunge il dato */ public void add(object x) sum = sum + measurer.measure(x); if (count == 0 measurer.measure(maximum) < measurer.measure(x)) maximum = x; count++; Polimorfismo Parametrico /** Restituisce il dato maggiore tra i dati inseriti. */ public Object getmaximum() return maximum; private double sum; private Object maximum; private int count; private Measurer measurer; Tipi polimorfi = Tipi con un parametro di tipo Esempio: Pila [ t] Il comportamento della Pila può essere definito per un generico tipo t degli elementi (ortogonale al polimorfismo per sottotipo)

22 Classi generiche La proprietà che tutte le classi sono discendenti di Object consente di definire strutture dati che possono contenere oggetti di qualunque tipo. Non si può specificare il tipo degli elementi della pila: possono essere oggetti qualunque. PROBLEMA class Pila... void push(object x)...; Object pop()...; Classi Parametriche in C+ + Java non supporta la programmazione Generica (si usa Object ma è richiesto un cast) C+ + mette a disposizione i Template: Template <T> Class Pila Void push (T elemento). Per utilizzare una pila di BankAccount: Pila <BankAccount> piladiconti; Piladiconti.push(contoRossi); Gli oggetti della Pila sono solo Object! Downcasting in Java class Pila... void push(object x)...; Object pop()...; Pila s; Rettangolo r;... s.push(new Rettangolo()); r = s.pop(); Supponiamo di sapere che sulla pila vengono messi solo rettangoli. Come possiamo utilizzare gli oggetti estratti dalla pila? Errore di compilazione. pop restituisce un Object, che è più generale di Rettangolo 87 Downcasting Downcasting: ci si muove da un tipo più generale ad uno più specifico (da un tipo ad un sottotipo) Se A è un sottotipo di B e se espr ha tipo B, L assegnamento (A) espr ha tipo A A a = (A) espr è corretto per il compilatore (A) espr può dare errore a run time, se l oggetto ottenuto valutando espr non ha tipo A

23 Downcasting class Pila... void push(object x)...; Object pop()...;... Pila s; Rettangolo r;... s.push(new Rettangolo()); r = (Rettangolo) s.pop(); Accettato dal compilatore. Può dare errore a run time. Controllo a run-time. Quando si esegue questa istruzione si controlla che l'oggetto restituito da pop sia veramente un rettangolo. PARTE III Argomenti di approfondimento La classe di tutte le classi In Java ciascuna classe che non estende altre classi estende automaticamente la classe Object : Object è la radice di ogni gerarchia di derivazione. La classe Object si trova nel pacchetto java.lang, che viene automaticamente imporatato in ogni programma Dunque, ogni oggetto è anche un Object 91 La classe Object L utilità della classe Object consiste non solo nella possibilità di usare referenze Object per oggetti di qualunque classe ma anche nella possibilità di usare/riscrivere alcuni metodi, che in Object sono presenti ma molto generici. Alcuni metodi utili: tostring, equals, clone 1) tostring : restituisce una stringa che descrive l oggetto su cui è invocato ( di fatto è invocato ogni volta che concatenate + una stringa con un oggetto) Es: BankAccount mariorossi = new BankAccount(); String s= mariorossi.tostring(); 92 23

24 tostring s non è molto utile, si riferisce a qualcosa come BankAccountd1229bf ossia nome della classe e un indirizzo di memoria Esempio di Overriding del metodo: Public class BankAccount implements Misurabile public String tostring() return BankAccount[saldo= + saldo + ] ; Adesso con String s = mariorossi.tostring(); s si riferisce alla stringa BankAccount[saldo=3000] UTILE quando volete controllare l esecuzione del programma 93 getclass ( + getname ) final Class getclass: ottiene un oggetto di tipo Class usiamo anche il metodo getname che, invocato su un oggetto di tipo Class, restituisce il nome della classe Esempio: Public class BankAccount public String tostring() return getclass().getname()+ [saldo= + saldo + ] ; 94 Per Esercitazione Esercizio per prossima esercitazione: sia AccountUno una sottoclasse di BankAccount AccountUno mio=..; System.out.println (mio); Per controllare lo stato corrente dell oggetto, facciamo la stampa. stampiamo il nome della sottoclasse o quello della sopraclasse? Se vogliamo stampare oltre al nome della sottoclasse anche un nuovo attributo introdotto in AccountUno? Il metodo equals 2) Equals: Boolean equals (Object obj) Restituisce true se l oggetto su cui si invoca è uguale a obj, nel senso che contiene la stessa informazione. Si può riscrivere, ma dobbiamo di nuovo usare un cast!

25 Il metodo clone Clonare = fare una copia di un oggetto 3) metodo Clone () della classe Object Protected Quindi deve essere forzato a public nella classe che si vuole rendere clonabile (es. public Object clone() = return super.clone() ) Restituisce un tipo Object Dunque può richiedere downcast sul risultato La classe clonabile deve implementare l interfaccia Cloneable : se chiamo obj.clone() e la classe di obj non implementa Cloneable, è sollevata un eccezione Esempio di clonazione NOTA : Bisogna gestire l eccezione associata Esempio class Nuova implements Cloneable public Object Clone() Object ob = null; try ob = super.clone; catch (CloneNotSupportedException e) return null oppure e.stampa qualcosa; return ob; Clone esegue (definisce lo spazio necessario per eseguire) una copia bit a bit dell oggetto Clonazione e Derivazione Copia Profonda Ora tutte le classi derivate da Nuova sono automaticamente clonabili (a meno che non sia disattivata la clonazione) Attenzione: devo ridefinire clone se non voglio che venga usato quello della superclasse! La Clone esegue una copia superficiale: ad es., se alcuni campi contengono referenze ad altri oggetti, questi risultano condivisi dall oggetto clonato e dal suo clone Programmare l operazione di copia profonda: ma non posso sempre sapere se le classi degli oggetti interni sono Clonabili (in caso negativo, è sollevata l eccezione) (Alternativa: ottenere la copia profonda usando la serializzazione dgli oggetti)

26 SERIALIZZAZIONE Problema: persistenza degli oggetti fra un esecuzione e l altra Java offre una semplice soluzione fornendo il meccanismo Serializzazione: un qualunque oggetto di una classe, che implementi l interfaccia Serializable, può essere convertito in una sequenza di byte e ripristinato (su / da file: si usano flussi di oggetti invece che flussi binari import java.io metodo writeobject (della classe ObjectOutputStream) metodo readobject (della classe ObjectI nputstream) che, però, restituisce tipo Object 101 Esempio di serializzazione class BankAccount implements Serializable... ObjectOutputStream out = new ObjectOutputStream ( new FileOutputStream ( dato ) ); out.writeobject (mioconto); out.close; ObjectInputStream in = new ObjectInputStream ( new FileInputStream ( dato ) ); BankAccount mioconto = (BankAccount) in.readobject() in.close; Se si esegue la serializzazione in un unico flusso, la rete degli oggetti è salvata senza nessuna modifica: mettete i vostri dati in un contenitore e, alla fine, salvate questo contenitore! 102 RTTI I n fase di esecuzione posso avere informazioni sul tipo dell oggetto Ad es: Class c = x.getclass() c è un oggetto Class (la classe di x) c. getname restituisce il nome della classe oggettoclasse isi stance ( nomeoggetto) restituisce true se l oggetto è istanza della classe La Riflessione Possibilità di ottenere informazioni sulle classi in fase di esecuzione (il file.class viene aperto ed esaminato in esecuzione) La classe Class supporta la Riflessione Java.lang.reflect mette a disposizione alcuni metodi come getfields(), getmethods(),. per ottenere array degli oggetti che rappresentano i campi, i metodi,..di una classe (esempi di uso della Riflessione nel cap.12 del testo)

27 Documentazione del codice Il programma java.doc genera automaticamente un insieme di pagine HTML che descrivono (documentano) le classi. Per ogni metodo: commento di documentazione: incluso fra /* * e * nome del parametro e descrizione del valore restituito Per ogni classe: Commento di documentazione USO: il comando javadoc nomeclasse.java (anche prima della compilazione) produce il file nomeclasse.html che descrive l interfaccia della classe (e che si può esaminare con un browser) 105 APPENDICE O.O.P. Programmazione/ Progettazione per Contratto Una classe descrive un astrazione uniforme sulle proprietà di un insieme di oggetti; queste proprietà sono l insieme degli stati in cui gli oggetti possono trovarsi e il loro comportamento I nvariante di classe: asserzione che gli oggetti della classe soddisfano in ogni momento (dopo la loro costruzione, dopo la chiamata di un modificatore): VINCOLI DI CONSISTENZA 106 Invarianti di Classi e Es: invariante di stack numelementi> = 0 & numelementi< = dimensionestack Derivazionedi B da A: B eredita l invariante e aggiunge specifiche Inv.B Inv.A SpaziostatiB è incluso in SpaziostatiA ComportamentoB estende ComportamentoA Asserzioni dei metodi Precondizioni e Postcondizioni per ogni metodo: Precondizione: responsabilità per chi chiama il metodo Postcondizione: responsabilità per chi ha progettato il metodo Derivazione di B da A: per ogni metodo m di A riscritto in B: i) la sua precondizione in B non è più restrittiva di quella in A (può essere più larga ) ii) viceversa per la postcondizione covarianza-controvarianza Correttezza di una Classe Una classe è corretta rispetto alle sue asserzioni sse: 1. Per ogni metodo m INV & prec-di-m bodym INV & postc-di-m 2. Dato il costruttore C prec-di-c bodyc INV

28 Covarianza-Controvarianza Principio della sostitutività: Ogni oggetto/codice di tipo più piccolo può essere usato dove ne è richiesto uno di (ha anche) tipo più grande Regola di sottotipo per le funzioni: Sia f: A B: A B A B se e solo se A A e B B. Dunque la regola corretta per permettere di cambiare la signatura di f nella sua riscrittura nella sottoclasse è quella di riscriverla con un tipo più piccolo A B, ossia Controvarianza dell argomento : il tipo dei parametri cresce Covarianza del risultato : il tipo del risultato decresce

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

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

Dettagli

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

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

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

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

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

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

Dettagli

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

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

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

Dettagli

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

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

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

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

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

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

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

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo Subtype Polymorphism Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch Conversioni di tipo Variabile: locazione con un tipo associato Tipo della variabile

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

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

Gerarchia di classi Java 1

Gerarchia di classi Java 1 Costruttori della sottoclasse Gerarchia di classi Java Parte 2 Corso di laurea in Comunicazione digitale I costruttori non vengono ereditati, non essendo membri di classe Vengono definiti esplicitamente

Dettagli

CloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this

CloneNotSupportedException clone() Object clone() protected native Object clone() throws CloneNotSupportedException this Clonazione Importante esempio di eccezione controllata è CloneNotSupportedException che può essere lanciata dal metodo nativo clone() della classe Object. La dichiarazione di clone() è la seguente: protected

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

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

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

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

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

Dettagli

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una classe Modulo

Dettagli

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1 Informatica 3 Informatica 3 LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Modulo 1: Ereditarietà Modulo 2: Polimorfismo e classi astratte Modulo 3: Visibilità delle proprietà di una

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

Eredità e Polimorfismo in Java

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

Dettagli

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

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

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

Dettagli

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica

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

RTTI Run-time type identification

RTTI Run-time type identification RTTI Run-time type identification Come determinare il tipo di un oggetto durante l'esecuzione RTTI 1 Ereditarietà Forma Linea Rettangolo Cerchio interface Forma { class Linea implements Forma { void ;

Dettagli

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Uso di classi e oggetti Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Tipi di dati Tipi primitivi: interi Java fornisce otto tipi primitivi indipendenti dall implementazione

Dettagli

Java: Definire Classi e Creare Oggetti

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

Dettagli

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

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

Il linguaggio C. Puntatori e dintorni

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

Dettagli

Programmazione Orientata agli Oggetti

Programmazione Orientata agli Oggetti Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato

Dettagli

La Gestione della Memoria. Carla Binucci e Walter Didimo

La Gestione della Memoria. Carla Binucci e Walter Didimo La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina

Dettagli

Object-Oriented Technology. Giuliano Armano 1

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

Dettagli

Programmazione orientata agli oggetti. Ivan Lanese

Programmazione orientata agli oggetti. Ivan Lanese Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows

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

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

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

Programmazione con Java

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

Dettagli

Esercitazione n 2. Obiettivi

Esercitazione n 2. Obiettivi Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti

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

Interfacce e polimorfismo

Interfacce e polimorfismo Interfacce e polimorfismo La classe DataSet Serve a computare la media di un insieme di valori numerici public class DataSet Costruisce un insiemevuoto public DataSet() sum = 0; count = 0; minimum = 0;

Dettagli

1 Il Paradigma ad Oggetti

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

Dettagli

Modulo 2: Strutture fondamentali della programmazione Java

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

Dettagli

Object-Oriented Programming

Object-Oriented Programming Object-Oriented Programming Una metodologia di programmazione che consente di modellare la realtà in modo più naturale e vicino all uomo Concetti fondamentali Oggetto Incapsulazione Messaggio Classe Ereditarietà

Dettagli

Il Linguaggio Java. Le interfacce

Il Linguaggio Java. Le interfacce Il Linguaggio Java Le interfacce Ordinamento dei conti PROBLEMA: si vogliono ordinare i libretti di risparmio (SavingsAccount) in base al loro tasso di interesse REQUISITO: La classe dovrebbe essere ordinabile,

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Dettagli

Lezione 5 Namespace e JavaDoc

Lezione 5 Namespace e JavaDoc Lezione 5 Namespace e JavaDoc Vittorio Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Il namespace di Java: i package

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

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

La classe Object. L2-Linguaggi di Programmazione II-unina 1

La classe Object. L2-Linguaggi di Programmazione II-unina 1 La classe Object L2-Linguaggi di Programmazione II-unina 1 JAVA è dotata di una classe speciale, una classe cosmica, denominata Object Qualsiasi altra classe deriva da Object Object Una variabile di tipo

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

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

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

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

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

Dettagli

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Dettagli

Il linguaggio Java. La superclasse universale Object

Il linguaggio Java. La superclasse universale Object Il linguaggio Java La superclasse universale Object La classe Object La classe Object è la superclasse, diretta o indiretta, di ogni classe La classe Object definisce lo stato ed il comportamento base

Dettagli

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,

Dettagli

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Oggetti. Oggetti e classi. Utilizzo di classi. Classe Oggetti Oggetti e classi Oggetto: entità che può essere manipolata nel programma mediante l invocazione di metodi Black box dotato di:! Interfaccia pubblica " Metodi visibili " Comportamento dell oggetto!

Dettagli

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura Classi astratte Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura Rettangolo getarea() Quadrato getarea() getarea() Cerchio

Dettagli

domenica 9 giugno 13 Serializzazione

domenica 9 giugno 13 Serializzazione Serializzazione A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe

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

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

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

Tipi di Dati Astratti

Tipi di Dati Astratti Tipi di Dati Astratti April 19, 2017 Dati e Tipi di Dato Tipo di dato: concetto di alto livello Macchina fisica: unico tipo di dato sequenze di bit Macchine Astratte: tipi di dato più complessi Tipo di

Dettagli

Programmazione Java: Polimorfismo

Programmazione Java: Polimorfismo Programmazione Java: Polimorfismo romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Polimorfismo» Upcasting» Selezione dei metodi» Comportamento dei metodi polimorfi dentro i costruttori»

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 08 Ereditarietà A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Ereditarietà 1 Contenuti!Livelli di astrazione

Dettagli

Il linguaggio Java: aggiunte in Java 1.5

Il linguaggio Java: aggiunte in Java 1.5 .. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire:

Dettagli

Polimorfismo per Genericità in Java

Polimorfismo per Genericità in Java Polimorfismo per Genericità in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Polimorfismo Polimorfismo Ad-Hoc: Overloading Un metodo può essere sovraccaricato per manifestare

Dettagli

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

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

Dettagli

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

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

Dettagli

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

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione Calendario esercitazioni e laboratori 29 Marzo esercitazione 12 Aprile esercitazione 26 Aprile laboratorio (lab721) 2 Maggio laboratorio (lab721) 3 Maggio esercitazione 9 Maggio laboratorio (???) 17 Maggio

Dettagli

In questa lezione. Polimorfismo

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

Dettagli

Lezione 9 programmazione in Java Classi come contenitori

Lezione 9 programmazione in Java Classi come contenitori Lezione 9 programmazione in Java Classi come contenitori Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio

Dettagli

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

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

Dettagli

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

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

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

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

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

Dettagli

Le basi del linguaggio Java

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

Dettagli

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

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo tatiana.zolo@libero.it 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

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

Java: loading dinamico e reflection

Java: loading dinamico e reflection Java: loading dinamico e reflection Scopo del corso integrativo: Presentare le caratteristiche avanzate di Java che lo rendono un linguaggio molto flessibile pur senza rinunciare ai vantaggi di un typechecking

Dettagli

La programmazione ad oggetti (OOP)

La programmazione ad oggetti (OOP) Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente

Dettagli