ereditarietà e polimorfismo
|
|
|
- Serafina Bini
- 7 anni fa
- Просмотров:
Транскрипт
1 ereditarietà e polimorfismo Java
2 ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze che essa possiede rispetto alla classe di partenza o l ereditarietà permette di specificare il punto di partenza, cioè la classe base, e le differenze rispetto a questa
3 un esempio di ereditarietà
4 un diagramma di ereditarietà o LibroDiTesto deriva da Libro e aggiunge nuove caratteristiche
5 sottoclasse e superclasse o la nuova classe (nell esempio LibroDiTesto) viene definita sottoclasse (o classe derivata) o la classe di provenienza (nell esempio Libro) viene definita superclasse (o classe base) o la sottoclasse eredita tutte le caratteristiche (attributi e metodi) della superclasse e si differenza da questa: o per l aggiunta di nuovi attributi e/o metodi o per la ridefinizione di alcuni metodi della superclasse
6 definizione di sottoclassi class Sottoclasse extends Superclasse { <attributi> <metodi>
7 la sottoclasse LibroDiTesto class LibroDiTesto extends Libro { private String materia; private boolean adozione; public void setmateria(string materia) { this.materia = materia; public String getmateria() { return materia; public void cambiaadozione() { adozione =!adozione;
8 ereditarietà e modificatori di visibilità o public o elemento visibile in qualunque classe o private o elemento visibile solo all interno della classe o protected o elemento visibile all interno della classe e di tutte le sottoclassi di questa
9 istanze di classe e di sottoclasse o un oggetto di tipo Sottoclasse è contemporaneamente e automaticamente anche di tipo Superclasse o quando è necessario utilizzare un oggetto di tipo Superclasse è possibile utilizzare un oggetto di tipo Sottoclasse o al contrario invece la regola non vale o ogni oggetto di tipo LibroDiTesto è anche un oggetto di tipo Libro o è vero che un libro di testo è un libro o non è vero il contrario o un libro non è necessariamente un libro di testo, potrebbe essere per esempio un romanzo
10 polimorfismo Libro lib; LibroDiTesto libtes = new LibroDiTesto(); lib = libtes; o il tipo LibroDiTesto è compatibile con il tipo Libro o questo fenomeno è chiamato polimorfismo ed è uno dei principi fondamentali della programmazione orientata agli oggetti o una variabile come lib definita nell esempio precedente è polimorfa: può contenere oggetti di tipo diverso
11 polimorfismo o in informatica, il termine polimorfismo (dal greco "avere molte forme") viene usato in senso generico per riferirsi a espressioni che possono rappresentare valori di diversi tipi (dette espressioni polimorfiche) o nel contesto della programmazione orientata agli oggetti, si riferisce al fatto che una espressione il cui tipo sia descritto da una classe A può assumere valori di un qualunque tipo descritto da una classe B sottoclasse di A (polimorfismo per inclusione) wikipedia
12 situazioni d errore o un oggetto della classe base non può essere utilizzato al posto di uno della classe derivata. o nel nostro esempio una situazione come la seguente genera un errore: Libro lib = new Libro(); LibroDiTesto libtes; libtes = lib; //**** ERRORE ****
13 gerarchia di classi l ereditarietà può estendersi a più livelli generando una gerarchia di classi una classe derivata può, a sua volta, essere base di nuove sottoclassi nell esempio: Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione
14 un esempio class Persona { class Sportivo extends Persona { class Nuotatore extends Sportivo { class Motociclista extends Sportivo { class Calciatore extends Sportivo {
15 ereditarietà singola e multipla o sono possibili due tipi di ereditarietà: o ereditarietà singola o ereditarietà multipla o l ereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse o l esempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate o vari linguaggi ad oggetti pongono il vincolo dell ereditarietà singola per problemi di chiarezza e semplicità d implementazione, Java è uno di questi o non è possibile quindi una definizione di classe del tipo: class A extends B,C
16 ereditarietà multipla o l ereditarietà multipla si ha quando una sottoclasse deriva da più superclassi o la classe Quadrato ha due superclassi: PoligonoRegolare e Parallelogramma
17 Java e l ereditarietà multipla o Java non prevede ereditarietà multipla fra classi o l introduzione delle Interfacce (che vedremo in seguito) permette parzialmente di ovviare a questa limitazione
18 estensione o una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: o nuovi attributi o e/o nuovi metodi o in questo caso si parla di estensione o l esempio relativo alla classe Libro e LibroDiTesto è un esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristiche ma non altera il comportamento delle funzionalità offerte dalla classe base
19 ridefinizione o la classe derivata potrebbe però fornire le stesse caratteristiche della classe base differenziandosi invece per il comportamento o si definisce ereditarietà per ridefinizione (overriding) la situazione in cui uno o più metodi della classe base siano ridefiniti nella classe derivata o i metodi avranno quindi la stessa firma (nome e lista di tipi dei parametri) ma differente corpo
20 un esempio di overriding
21 overriding e overloading o attenzione a non confondere o il sovraccarico dei metodi (overloading) situazione in cui oltre al corpo del metodo è differente anche la sua firma o con la ridefinizione (overriding) situazione in cui la firma del metodo è identica ma è differente il corpo
22 estensione e ridefinizione o è possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione o nell esempio presentato in precedenza relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la visualizzazione dei nuovi attributi
23 super o la parola chiave this, intesa come riferimento all oggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo interno o in una gerarchia di classi può essere necessario far riferimento ad un attributo o metodo della superclasse, in questo caso si utilizza la parola chiave super
24 un esempio class Libro { public void stampa(){ System.out.print(autore+" "); System.out.print(titolo+" "); System.out.print("pag. "+numeropagine); System.out.print(" "+codiceisbn); class LibroDiTesto extends Libro { public void stampa(){ super.stampa(); System.out.print(" "+materia);
25 casting o Java permette di trasformare il tipo di un oggetto mediante l operazione di casting o l operatore di casting viene premesso al riferimento dell oggetto: (tipo)oggetto o dove tipo e il nuovo tipo di oggetto (nome della classe)
26 la classe Object o tutte le classi Java sono implicitamente derivate dalla classe Object che risulta quindi al vertice di ogni gerarchia di classi o la classe Object implementa alcuni metodi che possono essere ridefiniti dalle nuove classi o in particolare può risultare utile ridefinire il metodo tostring() che fornisce una rappresentazione della classe sotto forma di stringa
27 final o abbiamo fino ad ora utilizzato il modificatore final per definire attributi non modificabili (costanti) o final può essere utilizzato anche per i metodi; anche in questo caso sta a significare la non modificabilità del metodo (un metodo dichiarato final non può essere ridefinito da una sottoclasse) o esistono anche classi definite final che non possono essere estese (una classe dichiarata final non può avere sottoclassi)
28 un esempio class Parola extends String { public boolean isunsaluto(){ if (this.equals("ciao")) return true; else return false; o nell esempio si tenta di estendere la classe String aggiungendo un nuovo metodo o l esempio non è funzionante perché la classe String fornita dal linguaggio è definita final quindi non estendibile o l errore in fase di compilazione è il seguente: Cannot inherit from final java.lang.string
29 classi e metodi astratti o si definiscono metodi astratti quei metodi in cui è presente solo la firma ma non il corpo (il modificatore di un metodo astratto è abstract) o una classe che contiene almeno un metodo astratto si definisce classe astratta e da essa non possono essere istanziati oggetti o le sottoclassi di una classe astratta devono implementare tutti i metodi astratti della classe base o essere a loro volta astratte
30 un esempio
31 abstract class PoligonoRegolare { // Superclasse della gerarchia dei poligoni regolari protected int numerolati; //numero lati poligono protected double lato; //lunghezza del lato // Costruttore PoligonoRegolare(int nl,double l) { numerolati=nl; lato=l; public double perimetro() { return lato*numerolati; abstract double area (); class TriangoloEquilatero extends PoligonoRegolare { TriangoloEquilatero(double l) { // viene attivato il costruttore della superclasse super(3,l); // implementazione del metodo astratto della superclasse public double area() { return (lato*altezza()/2); // metodo privato per il calcolo dell'altezza del triangolo private double altezza () { return (lato*math.sqrt(3)/2);
32 vantaggi dell ereditarietà o l ereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze o specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti poiché elimina ridondanza di codice o l ereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. o non c è copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate
33 l interfaccia verso il mondo esterno o l interfaccia di un oggetto è l insieme delle firme dei suoi metodi o se non si vuole dare accesso diretto agli attributi, e se si vuole nascondere l implementazione di una classe, l unica cosa che deve conoscere chi utilizza la nostra classe, è l interfaccia o conoscere l interfaccia significa sapere quali sono le operazioni (metodi) che si possono invocare su un oggetto
34 definizione esplicita di interfaccia o una interfaccia (interface) in Java ha una struttura simile a una classe, ma può contenere solo metodi astratti e costanti (quindi non può contenere costruttori e attributi) o l interfaccia non essendo una classe implementata non può essere istanziata direttamente o una classe che vuole fare uso di un interfaccia si dice che la implementa; questo rende obbligatorio l implementazione di tutti i metodi definiti nell interfaccia
35 utilità delle interfacce o l interfaccia fornisce uno schema di come dovrà essere strutturata la classe: quali metodi dovranno essere presenti o l interfaccia non fornisce l implementazione dei metodi ma lascia allo sviluppatore l onere di scriverli in modo specifico per ognuna delle classi che fa uso dell interfaccia o l utilizzo di un interfaccia è utile quando di devono definire i metodi che dovrà possedere un oggetto senza poterne dare un implementazione univoca per tutte le tipologie di oggetti che faranno uso dell interfaccia
36 interfacce in Java public interface Risorsa { public String leggi(); public void Scrivi(String buffer); public int disponibili(); public class RisorsaFile implements Risorsa { public String leggi() { // Ritorno il contenuto del file public void Scrivi(String buffer) { // Scrivo il contenuto di buffer nel file public int disponibili() { // Ritorno il numero di caratteri disponibili nel file
37 interfacce ed ereditarietà multipla o una classe può implementare anche più di una interfaccia o è possibile implementare un interfaccia e contemporaneamente estendere una classe. o in questo modo si può ovviare al limite di Java di non possedere l ereditarietà multipla. o rimane l inconveniente che utilizzando un interfaccia per simulare l ereditarietà multipla è necessario implementarne tutti i metodi, rendendo le scelte di progetto difficili e delicate.
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
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),
Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1
Incapsulamento Paradigmi della PO Ereditarietà Polimorfismo Software per TLC - AA 2008/2009 1 Incapsulamento Una classe contiene dati e metodi Filosofia Ai dati si accede solo attraverso i metodi I metodi
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Variabili statiche Ereditarietà multipla Le interfacce Binding Esercizi Variabili statiche Se una variabile di una classe ha il
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
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/
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 [email protected] Programmazione,
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
INFORMATICA OOP Relazioni tra classi Roberta Gerboni
2015 - Roberta Gerboni Relazione di associazione E possibile legare varie classi presenti in un progetto con una relazione di associazione. Una associazione individua una connessione logica tra classi
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
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
Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo
Ereditarietà & Polimorfismo Ereditarietà Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un altra (classe base) La classe base modella un concetto generico La classe
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
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
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
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
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1
Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1 Gerarchia delle classi Una sottoclasse eredita metodi, variabili, etc. dalla superclasse... Per
JAVA GENERICS. Angelo Di Iorio Università di Bologna
JAVA GENERICS Angelo Di Iorio Università di Bologna Tipi parametrici In diversi casi è utile definire classi che operano su tipi di dato diverso e implementano un comportamento comune e indipendente dal
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
Esercitazione n 3. Obiettivi
Esercitazione n 3 Obiettivi Capacità di analisi e di estensione di progetti esistenti Linguaggio Java: Ereditarietà delle classi Utilizzo di costruttori e metodi di superclasse Visibilità: public, private,
Programmazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
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
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,
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
Programmazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
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
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
