AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.

Slides:



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

Unified Modeling Language
Oggetti Java.
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.
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.
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
SISSIS MODULO DI JAVA PER LA CLASSE IV DELL’ITI
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Package, Interfacce, Ereditarietà 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.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Introduzione al linguaggio Java
Derivazione tra classi
Overriding.
Soluzione Esercizio - Classe Vettore
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 Programmazione Corso di laurea in Informatica.
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
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.
Ereditarietà. Concetti principali Ereditarietà e (overriding) di metodi Dynamic dispatch e polimorfismo Ereditarietà e costruttori Livelli di accesso.
Ereditarietà. Concetti principali Ereditarietà e (overriding) di metodi Dynamic dispatch e polimorfismo Ereditarietà e costruttori Livelli di accesso.
Programmazione con Interfacce
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.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Programmazione in Java (8)
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.
1 Interfacce e polimorfismo Sandro Pedrazzini Approfondimento Interfacce e polimorfismo.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
Programmazione ad oggetti
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 11 Ereditarietà in C++
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
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.
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.
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
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.
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 |
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2015/16 Oltre le classi.
La programmazione ad oggetti
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.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro

AlgoLab - Ereditarieta' Che cosa è il polimorfismo? Polimorfismo: quando certi valori o certe variabili possono avere più di un tipo. Varie forme di polimorfismo: parametrico: lo stesso codice si comporta uniformemente su valori (dati) di diverso tipo inclusione: si basa su una relazione di specializzazione sovraccarico: quando una funzione opera in modo differente su valori di tipo differente coercizione: quando un valore di un tipo viene visto (e talvolta trasformato) come valore di un altro tipo.

AlgoLab - Ereditarieta' Sottotipo ed Ereditarietà Interfacce La vista esteriore degli oggetti di una classe Sottotipo Relazione di specializzazione tra interfacce Implementazione La rappresentazione interna degli oggetti di una classe Ereditarietà Relazione tra implementazioni

AlgoLab - Ereditarieta' Che cosa è uninterfaccia? E unastrazione che elenca alcuni metodi pubblici posseduti da un oggetto Può vedersi come una classe sottospecificata, di cui si omettono la parte privata, i campi ed il corpo dei metodi pubblici Linterfaccia di un oggetto è il suo tipo

AlgoLab - Ereditarieta' Interfaccia: esempio interface Point { double getx(); void setx(double x); double gety(); void sety(double y); void move(double dx, double dy); } Tutti i metodi di uninterfaccia sono public ; in Java le interfacce non possono contenere campi privati, ma solo campi public static final.

AlgoLab - Ereditarieta' Sottotipo Relazione di specializzazione tra tipi: B sottotipo di A se ogni oggetto di tipo B può essere impiegato dove ci si aspetterebbe un oggetto di tipo A interface ColoredPoint extends Point { Color getcolor(); void setcolor(Color c); }

AlgoLab - Ereditarieta' Una classe implementa uninterfaccia Una classe specifica ed estende i metodi elencati nellinterfaccia class MyPoint implements Point { private double x; private double y; public getx() { return x;} public void setx(double val){x = val;}... } Una classe può implementare più interfacce.

AlgoLab - Ereditarieta' Ereditarietà (sottoclasse) Relazione tra implementazioni basata sullidea che una sottoclasse reimpiega, in tutto o in parte, il codice di un classe già implementata. class Body {class CelestialBody private String name; extends Body { public String getname() private CelestialBody { return name;} orbits;}

AlgoLab - Ereditarieta' La gerarchia delle classi Poiché ogni classe può estendere al più una classe, si genera una gerarchia ad albero, alla radice della quale è la classe Object : Object intint[]X YZ class A {…} equivale a class A extends Object {…}.

AlgoLab - Ereditarieta' Il grafo dei sottotipi Daltra parte un interfaccia può estendere più interfacce: interface W {…} interface X extends W {…} interface Y extends W {…} interface Z extends X, Y {…} W X Y Z

AlgoLab - Ereditarieta' Ridefinizione (overriding) Una classe Y che estende una classe X può anche ridefinire un metodo della classe X conservandone la segnatura: class X {class Y extends X { private int n; public int f(int m) public int f(int m){return n += m;} {return n+m;} … …} }

AlgoLab - Ereditarieta' In Java: sottoclasse = sottotipo Poiché in Java le classi sono tipi, la relazione di sottoclasse si identifica con quella di sottotipo class A {…} class B extends A {…} … B obj1 = new B(); A ob2 = obj1; // sussunzione

AlgoLab - Ereditarieta' Abbinamento dinamico dei metodi (1) Se obj è un riferimento ad un oggetto di classe Y che estende X, allora per eseguire obj.f() si procede: 1.si cerca il corpo di f() in Y: lo si esegue se trovato, altrimenti 2.si cerca il corpo di f() nella superclasse X: lo si esegue se trovato, altrimenti si cerca nella superaclasse di X. Ecc.

AlgoLab - Ereditarieta' La parola chiave super Luso di super consente di chiamare la versione della sopraclasse di un metodo ridefinito: class A { void f() {}..} class B extends A { void f() {}; // ridefinizione di f() void g() { … super.f(); …} } B b = new B(); b.g(); // la chiamata di f() esegue il metodo // f() di A Nota: questo è il solo caso in cui il tipo governa labbinamento del metodo

AlgoLab - Ereditarieta' Nellinvocazione di un metodo conta la classe cui loggetto appartiene e non il tipo del riferimento attraverso cui si accede alloggetto: class A { public void f() {System.out.print(A);} class B extends A { public void f() {System.out.print(B);} A obj = new B(); obj.f(); // produce la stampa di B Abbinamento dinamico dei metodi (2)

AlgoLab - Ereditarieta' Sovraccarico (overloading) Quando nella stessa classe un metodo ha più definizioni con diversa segnatura void f(A a); void f(A a, D d); // diverso numero di param. void f(B b, D d); // diversi tipi dei param.

AlgoLab - Ereditarieta' Quale metodo si applica? class Dolce {} class Torta extends Dolce {} class TortaSacher extends Torta {} class Pasticcino extends Dolce {} class Bigne extends Pasticcino {} Dolce PasticcinoTorta TortaSacherBigne void sceglie(Dolce d, Pasticcino p) // (a) void sceglie(Torta t, Dolce d) // (b) void sceglie(TartaSacher ts, Pasticcino p) // (c) sceglie(dolce, pasticcino) // forma (a) sceglie(tortasacher, dolce) // forma (b) sceglie(tortasacher, bigne)// forma (c) sceglie(torta, pasticcino)// illegale

AlgoLab - Ereditarieta' Poblemi: casting del valore ritornato La necessità di mantenere il tipo dei metodi ridefiniti (overridden) obbliga alluso del casting: protected Object clone() // produce una copia delloggetto, ma non degli // oggetti riferiti al suo inetrno class A { // public A clone() {…} // illegale public Object clone() {…} …} A b = (A)a.clone(); // supposto a di classe A.

AlgoLab - Ereditarieta' Problemi: metodi binari Un metodo è binario se tra i suoi parametri ve nè uno il cui tipo è lo stesso delloggetto cui il metodo appartiene. class A {public boolean eq(A other){…} …} class B extends A { // public boolean eq(B other) {…} // illegale public boolean eq(A other) {…} …} B b1 = new B(); b2 = new B(); b1.eq((A)b2); // casting del parametro