Ereditarietà e Polimorfismo

Размер: px
Начинать показ со страницы:

Download "Ereditarietà e Polimorfismo"

Транскрипт

1 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 porzione di stato/comportamento condivise L approccio Taglia&Incolla, però, non è una strategia vincente Difficoltà di manutenzione correttiva e perfettiva Meglio specializzare codice funzionante Sostituendo il minimo necessario

2 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 derivata modella un concetto più specifico La classe derivata: Dispone di tutte le funzionalità (attributi e metodi) di quella base Può aggiungere funzionalità proprie Può ridefinirne il funzionamento di metodi esistenti (polimorfismo)

3 Esempio Persona Nome cognome dettagli Impiegato salario aumentasalario(n) Studente Nomeuniversità numeromaterie decrescinumeromaterie

4 Terminologia Persona Classe base, superclasse Impiegato Studente Classi derivate, sottoclassi

5 Astrazione Il processo di analisi e progettazione del software di solito procede per raffinamenti successivi Spesso capita che le similitudini tra classi non siano colte inizialmente In una fase successiva, si coglie l esigenza/opportunità di introdurre un concetto più generico da cui derivare classi specifiche Processo di astrazione Si introduce la superclasse che astrae il concetto comune condiviso dalle diverse sottoclassi Le sottoclassi vengono spogliate delle funzionalità comuni che migrano nella superclasse

6 Veicolo double getvelocità() double getaccelerazione() Bicicletta void pedala() Automobile void avvia() void spegni()

7 Tipi ed ereditarietà Ogni classe definisce un tipo: Un oggetto, istanza di una sotto-classe, è formalmente compatibile con il tipo della classe base Il contrario non è vero! Esempio Un automobile è un veicolo Un veicolo non è (necessariamente) un automobile La compatibilità diviene effettiva se I metodi ridefiniti nella sotto-classe rispettano la semantica della superclasse L ereditarietà gode delle proprietà transitiva Un tandem è un veicolo (poiché è una bicicletta, che a sua volta è un veicolo)

8 Vantaggi dell ereditarietà Evitare la duplicazione di codice Permettere il riuso di funzionalità Semplificare la costruzione di nuove classi Facilitare la manutenzione Garantire la consistenza delle interfacce

9 Ereditarietà in Java Si definisce una classe derivata attraverso la parola chiave extends Seguita dal nome della classe base Gli oggetti della classe derivata sono, a tutti gli effetti, estensioni della classe base Anche nella loro rappresentazione in memoria

10 Ereditarietà in Java public class Veicolo { private double velocità; private double accelerazione; public double getvelocità() { public double getaccelerazione() { Veicolo.java public class Automobile extends Veicolo { private boolean avviata; public void avvia() { Automobile.java

11 Ereditarietà in Java Automobile a= new Automobile(); Memoria a velocità: 0.0 accelerazione: 0.0 avviata: false

12 Meccanismi Costruzione di oggetti di classi derivate Accesso alle funzionalità della superclasse Ri-definizione di metodi

13 Costruttori Per realizzare un istanza di una classe derivata, occorre innanzi tutto costruire l oggetto base Di solito, provvede automaticamente il compilatore, invocando come prima operazione di ogni costruttore della classe derivata il costruttore anonimo della superclasse Si può effettuare in modo esplicito, attraverso il costrutto super( ) Eventuali ulteriori inizializzazioni possono essere effettuate solo successivamente

14 Esempio class Impiegato { String nome; double stipendio; Impiegato(String n) { nome = n; stipendio= 1500; class Funzionario extends Impiegato { Funzionario(String n) { super(n); stipendio = 2000;

15 Accedere alla superclasse L oggetto derivato contiene tutti i componenti (attributi e metodi) dell oggetto da cui deriva Ma i suoi metodi non possono operare direttamente su quelli definiti privati La restrizione può essere allentata: La super-classe può definire attributi e metodi con visibilità protected Questi sono visibili alle sottoclassi

16 Ridefinire i metodi Una sottoclasse può ridefinire metodi presenti nella superclasse A condizione che abbiano Lo stesso nome Gli stessi parametri (tipo, numero, ordine) Lo stesso tipo di ritorno (La stessa semantica!) Per le istanze della sottoclasse, il nuovo metodo nasconde l originale

17 Ridefinire i metodi class Base { int m() { return 0; class Derivata extends Base { int m() { return 1; Base b= new Base(); System.out.println(b.m()); Derivata d= new Derivata(); System.out.println(d.m());

18 Ridefinire i metodi A volte, una sottoclasse vuole perfezionare un metodo ereditato, non sostituirlo in toto Per invocare l implementazione presente nella super-classe, si usa il costrutto super.<nomemetodo> ( ) class Base { int m() { return 0; class Derivata extends Base { int m() { return super.m()+ 1;

19 Compatibilità formale Un istanza di una classe derivata è formalmente compatibile con il tipo della super-classe Base b = new Derivata( ); Il tipo della variabile b (Base) limita le operazioni che possono essere eseguite sull oggetto contenuto Anche se questo ha una classe più specifica (Derivata), in grado di offrire un maggior numero di operazioni Altrimenti viene generato un errore di compilazione

20 Compatibilità formale C print() C v1= new C(); C v2= new D(); D v3= new D(); D print() reset() v1.print() v2.print() v2.reset() v3.reset()

21 Polimorfismo class Base { int m() { return 0; class Derivata extends Base { int m() { return 1; Base b= new Derivata(); System.out.println(b.m());

22 Polimorfismo Java mantiene traccia della classe effettiva di un dato oggetto Seleziona sempre il metodo più specifico anche se la variabile che lo contiene appartiene ad una classe più generica! Una variabile generica può avere molte forme Contenere oggetti di sottoclassi differenti In caso di ridefinizione, il metodo chiamato dipende dal tipo effettivo dell oggetto

23 Polimorfismo Per sfruttare questa tecnica: Si definiscono, nella super-classe, metodi con implementazione generica sostituiti, nelle sottoclassi, da implementazioni specifiche Si utilizzano variabili aventi come tipo quello della super-classe Meccanismo estremamente potente e versatile, alla base di molti pattern di programmazione

24 Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore attuale un valore massimo di conteggio uno stato interno che indica se si è verificato un errore. Il valore massimo è selezionabile dall utente alla costruzione. Se si tenta di superarlo, viene modificato lo stato del contatore per memorizzare l avvenuta condizione d errore e le successive operazioni di modifica non devono avere effetto Il contatore deve offrire i seguenti metodi: void inc(),void reset(),int getvalue(),boolean iserror() Infine, scrivete un applicazione Java che: Crea e inizializza un nuovo Counter con valore massimo n Incrementa il contatore per n+1 volte e visualizza, ogni volta, il valore attuale e lo stato interno (errato/corretto) Terminare

25 Esercizio 6 Create il tipo di dato Impiegato come estensione del tipo di dato Persona. Dove una classe Persona ha le variabili nome, cognome, età. Ha i metodi GetNome, GetCognome, GetEtà e un metodo dettagli() che restituisce in una stringa le informazioni sulla persona in questione. Dove una classe Impiegato ha le variabili nome, cognome, età, salario. Ha un metodo dettagli() che restituisce in una stringa le informazioni sulla persona in questione. Ha un metodo aumentasalario() che aumenti lo stipendio secondo una certa percentuale.

26 Inoltre, per entrambi gli esercizi scrivere un main con le istruzioni presenti rispettivamente nell esercizio 1 e nell esercizio 4.

Esercizi della lezione 5 di Java

Esercizi della lezione 5 di Java Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore

Подробнее

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

Подробнее

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

Подробнее

ESERCIZIO 1 (STRINGHE)

ESERCIZIO 1 (STRINGHE) ESERCIZIO 1 (STRINGHE) Fornire N stringhe di caratteri in input al programma. Per ogni stringa: si stampi a video la stringa si sostituiscano tutte le occorrenze di un carattere ( old_char ) con un altro

Подробнее

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Fondamenti di Informatica T-1. Costruttori Ereditarietà Costruttori Ereditarietà 2 Costruttori Si occupano della creazione e dell'allocazione in memoria degli oggetti. public class Persona{ //Variabili di istanza private String nome; private String cognome;

Подробнее

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

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à e polimorfismo

ereditarietà e polimorfismo ereditarietà e polimorfismo Java 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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

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

Подробнее

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 [email protected] Programmazione,

Подробнее

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

Подробнее

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/

Подробнее

Programmazione a oggetti

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

Подробнее

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

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

Подробнее

Esercitazione. Docente Ing. Mariateresa Celardo

Esercitazione. Docente Ing. Mariateresa Celardo Esercitazione Docente Ing. Mariateresa Celardo [email protected] Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore del motorino, velocità: un

Подробнее

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

Подробнее

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

Подробнее

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 [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Подробнее

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.

Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona. Esercizio 3 Scrivere un programma con i seguenti requisiti. Utilizzare una classe Persona che dichiara le variabili nome, cognome, età. Si dichiari inoltre un metodo dettagli() che restituisce in una stringa

Подробнее

Lezione 1 - Relazioni tra classi

Lezione 1 - Relazioni tra classi Lezione 1 - Relazioni tra classi Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti e-mail: [email protected] web: http://homes.di.unimi.it/anisetti/ Università

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

17 - Ereditarietà, tipi e gerarchie

17 - Ereditarietà, tipi e gerarchie 17 - 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

Подробнее

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

E7 Esercizi sul Capitolo 7 Realizzazione di Classi E7 Esercizi sul Capitolo 7 Realizzazione di Classi Esercizio 1 (esercizio 7.1 del libro di testo). Nella classe Studente definita di seguito indicare le variabili d istanza, le variabili di classe e le

Подробнее

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

Подробнее

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

Подробнее

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

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

Подробнее