Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Programmazione object oriented in C++
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Dispatch.
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Introduzione al linguaggio Java
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Overriding.
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
Gerarchia di classi Java
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.
1 laboratorio di calcolo II AA 2003/04 quinta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Java base IV: Java e la programmazione O.O.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
Programmazione in Java (8)
Ereditarietà e Polimorfismo
Java Contardi Carlo A.S. 2008/09.
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: ________________________________________________________________________________.
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.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Ereditarietà.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione ad oggetti
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Programmazione ad oggetti
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
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.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
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.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
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.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
La Programmazione ad Oggetti
1 Java primo contatto Quando le classi fanno la differenza …
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu

Facciamo chiarezza Abbiamo visto che è possibile ridefinire i metodi di una classe derivata Ma in realtà esistono due differenti modi di re-dichiarazione: 1. OVERLOADING, sovrapposizione 2. OVERRIDING, scavalcamento

OVERLOADING È il modo più semplice di ridefinire un metodo La classe discendente semplicemente lo dichiara e definisce di nuovo class Felino { public void Verso() Console.WriteLine("MEOW"); } }//Felino class Gatto : Felino { public void Verso() Console.WriteLine("MIAO"); } }//Gatto

OVERLOADING È il modo più semplice di ridefinire un metodo Il metodo è legato staticamente Il f1 chiama il verso del Felino Il g1 chiama il verso del Gatto Felino f1 = new Felino(); f1.Verso(); Gatto g1 = new Gatto(); g1.Verso(); MEOW MIAO

OVERLOADING Nella ridefinizione si può invocare il metodo del padre Il metodo può sfruttare quanto predisposto dal metodo paterno class Felino { public void Verso() Console.WriteLine("MEOW"); } }//Felino class Gatto : Felino { public void Verso() base.Verso(); Console.WriteLine("MIAO"); } }//Gatto

OVERLOADING È il modo più semplice di ridefinire un metodo Il metodo è legato staticamente Il f1 chiama il verso del Felino Il g1 chiama il verso del Gatto Felino f1 = new Felino(); f1.Verso(); Gatto g1 = new Gatto(); g1.Verso(); MEOW MEOW MIAO

un caso particolare Andrea Zoccheddu

i metodi Contento sono molto simili Un caso particolare Ma si osservi questa situazione: class Felino { public void Fusa () Console.WriteLine("Grrr"); } public void Contento() this.Fusa(); Console.WriteLine("Struscia"); }//Felino class Gatto : Felino { public void Fusa () Console.WriteLine("Prrr"); } public void Contento() this.Fusa(); Console.WriteLine("Struscia"); }//Gatto i metodi Contento sono molto simili

Un caso particolare Quando si invocano i metodi essi si comportano bene: Però quei metodi «Contento» sono proprio identici… è possibile evitare di ripetere il secondo? In fondo il metodo è ereditato dal padre ... Felino f1 = new Felino(); f1.Contento(); Gatto g1 = new Gatto(); g1. Contento(); GRRR Struscia PRRR Struscia

il metodo Contento è ereditato da Gatto Un caso particolare Le definizioni diventerebbero: class Felino { public void Fusa () Console.WriteLine("Grrr"); } public void Contento() this.Fusa(); Console.WriteLine("Struscia"); }//Felino class Gatto : Felino { public void Fusa () Console.WriteLine("Prrr"); } }//Gatto il metodo Contento è ereditato da Gatto

Un caso particolare Quando si invocano i metodi però: Il metodo Contento del gatto usa il metodo Fusa del Felino invece del suo, ed il motivo è il legame statico Felino f1 = new Felino(); f1.Contento(); Gatto g1 = new Gatto(); g1. Contento(); GRRR Struscia GRRR Struscia

Un caso particolare Il problema lo causa il metodo Contento del Felino Quando viene compilato il riferimento al metodo Fusa è statico e quindi impone un collegamento fisso Anche se è un Gatto che invoca il metodo Contento ormai il metodo è legato al metodo Fusa del Felino

Un caso particolare Invece vorremmo che il collegamento fosse «al volo» ovvero dinamico, a tempo di esecuzione del programma Così magari la macchina si accorge che si tratta di un Gatto e non di un Felino generico

polimorfismo OVERRIDING I METODI VIRTUALI Andrea Zoccheddu

il metodo Contento è ereditato OVERRIDING La situazione si può risolvere così class Felino { public virtual void Fusa () Console.WriteLine("Grrr"); } public void Contento() Fusa(); Console.WriteLine("Struscia"); }//Felino class Gatto : Felino { public override void Fusa () Console.WriteLine("Prrr"); } }//Gatto il metodo Contento è ereditato

Un caso particolare Quando si invocano i metodi essi si comportano bene: Cosa accade? Il collegamento al metodo Fusa è ritardato: si aspetta l’esecuzione della invocazione per decidere quale metodo invocare Felino f1 = new Felino(); f1.Contento(); Gatto g1 = new Gatto(); g1. Contento(); GRRR Struscia PRRR Struscia

polimorfismo Il polimorfismo è il concetto che una istanza può invocare un nome di metodo che si aggancia dinamicamente al metodo corretto «al volo» Il polimorfismo è un paradigma di programmazione, ovvero un modello ed una tecnica di realizzazione dei programmi Rappresenta un modello elevato di efficienza e flessibilità

virtual virtual è una parola riservata Un metodo virtual è dichiarato come un metodo con collegamento ritardato Il metodo verrà cercato a partire dal tipo di istanza legata alla variabile effettiva che la invoca Il metodo può essere ridefinito con override

virtual L’ordine in cui compaiono le parole public e virtual non è importante. Una funzione virtuale non può essere privata, o si ha un errore di compilazione. Infatti una funzione privata non può essere visibile e accessibile dalle classe derivate

override override è una parola riservata Un metodo override indica come eseguire il metodo nel caso di una istanza specifica Un metodo virtuale deve essere ridefinito con override per ottenere un collegamento dinamico Se uso di nuovo virtual invece sto scavalcando il metodo

override Una funzione con override deve fare riferimento ad una antenata virtuale o si ha un errore Il prototipo della funzione ridefinita deve coincidere perfettamente con quello della funzione base (public, tipo, parametri) o si ha un errore