1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.

Slides:



Advertisements
Presentazioni simili
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta di un corpo circolare sommerso in un serbatoio 50 cm 28 cm Blocco circolare.
Advertisements

Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public class Up extends Object { public.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
/ fax
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Interfacce Java.
Capitolo 7 Programmazione con metodi e classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004.
Alcune Classi Standard Object, Vettori. Esercizio dellultima volta Superclasse Persona Sottoclasse Libro.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Frontespizio Economia Monetaria Anno Accademico
1 la competenza alfabetica della popolazione italiana CEDE distribuzione percentuale per livelli.
Modellazione per addizione: denti posteriori
Dipartimento di Ricerca Sociale - Università del Piemonte Orientale 1 Castelli Aperti giugno 2005 Castello di Camino (AL) IL PUBBLICO DI CASTELLI.
PROGRAMMI DI COOPERAZIONE TERRITORIALE I controlli di primo livello in azione Un caso pratico Programma Interreg IV C Progetto B3 Regions Regione Piemonte.
Domenico Presenza Stato implementazione prototipo Engineering Milano – 20 Luglio 2005.
Model – View - Controller
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Dipartimento di Informatica e Sistemistica Alessandro DE CARLI Anno Accademico MOVIMENTAZIONE CONTROLLATA AZIONAMENTI CON MOTORE BRUSHLESS.
6.6Ordinamento di Vettori Ordinamento di dati –Applicazione computazionale importante –Virtualmente ogni organizzazione deve ordinare dei dati Enormi quantità
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Simulazione di un esperimento di laboratorio: Caduta di un corpo quadrato in.
Approfondimento delle classi
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Callbacks. Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo.
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
1Analisi RBS su rocce lunari Capitolo 6. 2Apparato per misure RBS Capitolo 6.
Lezione n° 05 Istituto Statale di Istruzione Superiore F. Enriques Corso JAVA.
Fondamenti delle Reti di Computer Il Browser Carasco 22/04/2010.
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
INPS - COMUNI SERVIZI AL CITTADINO.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Approfondimento Dependency Injection
SCOPRI LA TABELLINA click Trova la regola nascosta… click
1 Questionario di soddisfazione ATA - a. sc. 2008/09 Il questionario è stato somministrato nel mese di aprile Sono stati restituiti 29 questionari.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Unità Didattica 3 Linguaggio C
1101 = x 10 x 10 x x 10 x = CORRISPONDENZE
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
Ad opera di: Matteo Donatelli e Maurizio Di Paolo Presentazione su : Elettropneumatica 1.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
C’è / Ci sono Scegli un numero.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
Pippo.
Distribuzione per causa delle irregolarità al servizio Azienda ATL (Valori assoluti) 1.
Collection & Generics in Java
Bando Pittori e Scultori in Piemonte alla metà del ‘700
1 Videopoker esempio di applicazione in java. 2 Videopoker Un giocatore, con un portofaglio iniziale il giocatore punta il banco da 5 carte il giocatore.
lun mar mer gio ven SAB DOM FEBBRAIO.
1 Un esempio con iteratore: le liste ordinate di interi.
COMUNE DI BOLOGNA Dipartimento Riqualificazione Urbana Simulazione invio telematico SCIA Processo di dematerializzazione per la presentazione delle pratiche.
1 Analisi della gestione finanziaria dal 04 Gennaio 2008 Fondo Pensione Astri Comparto Bilanciato report al: 4 giugno 2010.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Gestione dei thread in Java
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
UML Diagramma statico di una classe
Transcript della presentazione:

1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java

2 Simulated multiple inheritance Sandro Pedrazzini Multiple inheritance in Java In Java esiste solo eredità semplice (eredità di implementazione) Una classe può però rappresentare più tipi (implementare più interfacce) Ogni relazione di ereditarietà può essere ricondotta a delegation

3 Simulated multiple inheritance Sandro Pedrazzini Classi e tipi PersistentObjFigura Triangolo ElasticObject public interface PersistentObject { void write(); void read(); } public interface ElasticObject { void enlarge(int offset); void restrict(int offset); } public class Triangolo extends Figura implements PersistentObject, ElasticObject {... }

4 Simulated multiple inheritance Sandro Pedrazzini Delegation Utilizzo della composizione al posto dell'ereditarietà ottenendo lo stesso grado di riutilizzo. Dalla relazione "is-a" alla relazione "has-a" Nel caso ideale basterebbe assemblare le varie componenti per realizzare una nuova funzionalità. FilledBox Box FilledBox Box move() box.move() move()

5 Simulated multiple inheritance Sandro Pedrazzini Problema Necessità di estendere contemporaneamente più implementazioni Person (caratteristiche di una persona) Employment (dettagli di una persona impiegata) Employee (caratteristiche complete di un impiegato)

6 Simulated multiple inheritance Sandro Pedrazzini Person public class Person { private String fName; private Date fBirthDate; public Person(String name, Date birthDate) { fName = name; fBirthDate = birthDate; } public String getName(){ return fName; } public Date getBirthDate(){ return fBirthDate; }

7 Simulated multiple inheritance Sandro Pedrazzini Employment public class Employment { private float fSalary; private Date fHireDate; public Employment(float salary, Date hireDate) { fSalary = salary; fHireDate = hireDate; } public float getSalary() { return fSalary; } public Date getHireDate() { return fHireDate; }

8 Simulated multiple inheritance Sandro Pedrazzini Desiderato public class Employee extends Person, Employment {... } Questo non è però possibile in Java Soluzione: - usare delegation per riutilizzare la funzionalità - aggiungere interface per mantenere il polimorfismo => Proxy / Decorator

9 Simulated multiple inheritance Sandro Pedrazzini Extract interfaces (1) public interface IEmployment { float getSalary(); Date getHireDate(); } public class Employment implements IEmployment {... }

10 Simulated multiple inheritance Sandro Pedrazzini Extract interfaces (2) public interface IPerson { String getName(); Date getBirthDate(); } public class Person implements IPerson {... }

11 Simulated multiple inheritance Sandro Pedrazzini Utilizzo delle interface public class Employee implements IPerson, IEmployment {... } In Java una classe può rappresentare più tipi contemporaneamente

12 Simulated multiple inheritance Sandro Pedrazzini Utilizzo delle interface (2) Utilizzando le interface otteniamo riutilizzo di design Come riutilizzare codice? Come sfruttare le implementazioni esistenti di Person e Employment?

13 Simulated multiple inheritance Sandro Pedrazzini Riutilizzo delle classi esistenti public class Employee extends Person implements IPerson, IEmployment {... } oppure: public class Employee extends Employment implements IPerson, IEmployment {... }

14 Simulated multiple inheritance Sandro Pedrazzini Sfruttamento multiplo La soluzione proposta permette di sfruttare attraverso ereditarietà solo una delle implementazioni presenti nelle due classi già disponibili (Person oppure Employment) Per sfruttare la seconda (o eventualmente anche entrambe) potremmo usare la delegation Il polimorfismo è garantito dal fatto di aver implementato le due interfacce

15 Simulated multiple inheritance Sandro Pedrazzini Sfruttamento multiplo (variante 1) IPersonPerson Employee IEmployment Employment

16 Simulated multiple inheritance Sandro Pedrazzini Sfruttamento multiplo (variante 2) IPerson Person Employee IEmployment Employment

17 Simulated multiple inheritance Sandro Pedrazzini Implementazione (variante 1) public class Employee extends Person implements IPerson, IEmployment { private IEmployment fEmploymentMixin; public Employee(String name, Date birthDate, float salary, Date hireDate) { super(name, birthDate); fEmploymentMixin = new Employment(salary, hireDate); } public float getSalary() { return fEmploymentMixin.getSalary(); } public Date getHireDate() { return fEmploymentMixin.getHireDate(); }

18 Simulated multiple inheritance Sandro Pedrazzini Overriding Consideriamo di dover estendere o modificare il comportamento di una classe da cui ereditiamo Person (eredità diretta): semplice overriding Employment (delegation): internal class + semplice overriding

19 Simulated multiple inheritance Sandro Pedrazzini Overriding di Person (1) Consideriamo di voler garantire limmutabilità di Employee Per far questo dobbiamo modificare il metodo getBirthDate() Quello nuovo deve restituirci non il riferimento alloggetto Date, bensì un nuovo oggetto Date (clone)

20 Simulated multiple inheritance Sandro Pedrazzini Overriding di Person (2) public class Employee extends Person implements IPerson, IEmployment { private IEmployment fEmploymentMixin; public Employee(String name, Date birthDate, float salary, Date hireDate) { super(name, birthDate); fEmploymentMixin = new Employment(salary, hireDate); } public float getSalary() { return fEmploymentMixin.getSalary(); } public Date getHireDate() { return fEmploymentMixin.getHireDate(); public Date getBirthDate() { return (Date) super.getBirthDate().clone(); }

21 Simulated multiple inheritance Sandro Pedrazzini Overriding di Employment (1) Sempre considerando di voler garantire limmutabilità di Employee, dobbiamo modificare anche il metodo getHireDate() Quello nuovo deve restituirci non il riferimento alloggetto Date, bensì un nuovo oggetto Date (clone) getHireDate() è un metodo delloggetto delegato

22 Simulated multiple inheritance Sandro Pedrazzini Overriding di Employment (2) Procedimento: –Creiamo una classe interna EmploymentMixin che erediti da Employment e riscriva il metodo getHireDate() –Utilizziamo un riferimento ad un oggetto di EmploymentMixin allinterno della classe Employee

23 Simulated multiple inheritance Sandro Pedrazzini Overriding di Employment (2) Classe interna che estende Employment private static class EmploymentMixin extends Employment { public EmploymentMixin(float salary, Date hireDate) { super(salary, hireDate); public Date getHireDate() { return (Date) super.getHireDate().clone(); }

24 Simulated multiple inheritance Sandro Pedrazzini Overriding di Employment (3) public class Employee extends Person implements IPerson, IEmployment{ private IEmployment fEmploymentMixin; public Employee(String name, Date birthDate, float salary, Date hireDate) { super(name, birthDate); fEmploymentMixin = new EmploymentMixin(salary, hireDate); }... private static class EmploymentMixin extends Employment {... }

25 Simulated multiple inheritance Sandro Pedrazzini Overriding di Employment (4) IPersonPerson Employee IEmployment EmploymentMixin Employment