Derivazione tra classi

Slides:



Advertisements
Presentazioni simili
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Advertisements

Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Type Checking (1° parte)
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Appunti di Java Da: Concetti di informatica e Fondamenti di Java2 - 2Ed. - Cay Horstmann.pdf.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione al linguaggio Java
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Scomposizione di stringhe
Overriding.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi
Approfondimento delle classi
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Java base IV: Java e la programmazione O.O.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
Ereditarietà e Polimorfismo
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Programmazione a oggetti
Programmazione ad oggetti
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
Gestione dei thread in Java
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
estensione (con piccole varianti) di quella in
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
28/12/2001package 1 Package Pacchetti e interfacce.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

Derivazione tra classi

Classe D derivata da B class B { //CLASSE BASE int x; void G() { x = x * 20; } } class D extends B { //CLASSE DERIVATA void H() { x = x * 10; } }

Principi fondamentali della derivazione – Principio 1 Tutte le proprietà definite per la classe base vengono implicitamente definite anche nella classe derivata …

Principi fondamentali della derivazione – Principio 1 … cioè vengono ereditate da quest’ultima. Ad esempio la classe D ha il campo dati int x; e la funzione void G();

Principi fondamentali della derivazione – Principio 2 La classe derivata può avere ulteriori proprietà … Ad esempio la classe D ha in più, rispetto alla classe base B, la funzione void H();

Principi fondamentali della derivazione – Principio 3 Ogni oggetto della classe derivata è anche un oggetto della classe base … … cioè si può usare un oggetto della classe derivata in ogni situazione/contesto in cui si può usare un oggetto della classe base

Principi fondamentali della derivazione – Principio 3 static void stampa(B bb) { System.out.println(bb.x); } … D d = new D(); d.G(); //OK stampa(d); //OK … la classe D è compatibile con la classe B.

Principi fondamentali della derivazione – Principio 4 Non è vero che un oggetto della classe base è anche un oggetto della classe derivata … … non è possibile usare un oggetto della classe base laddove si può usare un oggetto della classe derivata.

Principi fondamentali della derivazione – Principio 4 B b = new B(); b.H(); //NO: non ha il campo H() D d = b; //NO: B non è compatibile con D b = new D(); //OK D è compatibile con B

Gerarchie di classi: in profondità Una classe derivata può fungere da classe base per ulteriori derivazioni … class B {…} class D extends B {…} class E extends D {…}

Gerarchie di classi: in ampiezza Una classe può avere un numero qualsiasi di classi derivate … class B {…} class D extends B {…} class Dbis extends B {…}

Gerarchie di classi: esempio Dbis E Ogni classe ha solo una classe base… …no ereditarietà multipla in Java

Casting

Riferimenti di diverse classi possono denotare lo stesso oggetto class B {…} class D extends B { int x_d; } … D d = new D(); d.x_d = 10; B b = d; //OK b e d denotano lo stesso ogg. b.x_d = 20; //NO x_d non è un campo di B! //type checking statico

Casting per accedere ai campi della classe derivata class B {…} class D extends B { int x_d; } … D d = new D(); d.x_d = 10; B b = d; //OK b e d denotano lo stesso ogg. ((D)b).x_d = 20; //OK (D)b è un riferimento di tipo D

Il casting tra classi lungo lo stesso cammino in una gerarchia di derivazione è … … sempre sintatticamente corretto (non vengono mai rivelati errori di compilazione) … … ma è responsabilità del programmatore che sia anche semanticamente corretto …

Esempio class B {…} class D extends B { int x_d; } … B b = new B(); D d = (D)b; //OK a tempo di compilazione, ma … //NO a runtime (ClassCastException) d.x_d = 10; //NOTA: x_d non esiste nell’oggetto //denotato da d!

Livello di accesso protected

Una classe D derivata da un’altra classe B, anche se in un package diverso, ha una relazione speciale con quest’ultima… …non è un cliente qualsiasi di B in quanto vogliamo poter usare oggetti di D al posto dei quelli di B… …non coincide con B.

Per questo motivo può essere che B voglia mettere a disposizione di D dei campi che non sono a disposizione di clienti generici di B …per fare ciò si dicharano detti campi protected… …garantendo l’accesso ad essi alle classi derivate, ma bloccandone l’accesso ai clienti generici.

Costruttori delle classi derivate

Anche gli oggetti delle classi derivate sono creati chiamando un costruttore… …tale costruttore però deve inizializzare anche i campi dati ereditati… … alcuni dei quali sono inaccessibili dalla classe derivata (es. private)…

…per fare ciò Java richiede di invocare un costruttore della classe base nei costruttori della classe derivata… …mediante il costrutto super() che deve essere la prima istruzione eseguibile del corpo del costruttore della classe derivata.

Esempio EsempioCostuttori1.java

Qualora un costruttore della classe derivata non contiene l’invocazione esplicita di un costruttore … …viene invocato automaticamente il costruttore senza parametri… …se quest’ultimo non è presente viene generato un errore.

Esempio EsempioCostuttori2.java

Se una classe derivata non contiene costruttori … …Java ne fornisce automaticamente un costruttore standard senza parametri… …che invoca il costruttore senza parametri della classe base... …e lascia i campi dati della classe derivata al loro valore di default.

Esempio EsempioCostuttori3.java

Costrutto this() …da utilizzare in modo analogo a super()… …è un’invocazione esplicita ad un altro costruttore della stessa classe… …permette si riusare codice già scritto…

Esempio PersonaThis.java

Principi fondamentali della derivazione Principio 1: la classe derivata eredita le proprietà (campi) della classe base Principio 2: può avere ultriori proprietà Principo 3: è compatibile con la classe base Principio 4: ma non il viceversa