Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoFausto Rota Modificato 11 anni fa
1
CLASSI ED EREDITARIETÀ Come si è visto, è cruciale che la gerarchia rispecchi la realtà del mondo ma a volte ciò contraddice principi di efficienza Esempio: creare una classe che rappresenti i numeri reali e poi aggiungere una classe per i numeri complessi A X B
2
REALI E COMPLESSI Una classe per i reali dentro, un dato float più vari metodi per le operazioni class Real { protected float val; public Real(float x) { val = x; } public Real sum(Real x){ return val + x.val;}... } Real
3
REALI E COMPLESSI Approccio pragmatico: poiché un Complex è caratterizzato da due float (parte reale e immaginaria), deriviamo Complex da Real è un approccio efficiente –riusiamo il float dei Real come parte reale –aggiungiamo un nuovo float per la parte immaginaria ma la realtà è fatta a rovescio!! Complex un sottinsieme di Real ??? Complex Real
4
REALI E COMPLESSI Approccio pragmatico: poiché un Complex è caratterizzato da due float (parte reale e immaginaria), deriviamo Complex da Real Conseguenze: si può assegnare un Complex a un Real, ma non viceversa le compatibilità di tipo vanno tutte a rovescio rispetto alla realtà è un modello assurdo! Complex Real
5
REALI E COMPLESSI Approccio concettualmente corretto: poiché un Complex è un soprainsieme dei Real, deriviamo Real da Complex bisogna riprogettare anche Real non è un approccio efficiente –ogni Real ha due float, ma uno (la parte immaginaria) è sempre zero –le operazioni sono fra Complex inutilmente complicate per i Real ma modella correttamente la realtà Real Complex
6
REALI E COMPLESSI Possibile che non si possa coniugare: lefficienza del primo approc- cio (dal punto di vista imple- mentativo)... Real Complex Real … con la correttezza del secondo (dal punto di vista concettuale) ?
7
REALI E COMPLESSI Bisognerebbe poter avere due gerarchie: una per la parte implemen- tativa, che risponda a prin- cipi di efficienza... Real Complex Real … e una per linterfaccia esterna, che mantenga la correttezza concettuale.
8
REALI E COMPLESSI Bisognerebbe poter avere due gerarchie: una per la parte implemen- tativa, che risponda a prin- cipi di efficienza... Real Complex Real … e una per linterfaccia esterna, che mantenga la correttezza concettuale. CLASSI INTERFACCE
9
Una interfaccia costituisce una pura specifica di interazione contiene solo dichiarazioni di metodi ed eventualmente costanti ma non variabili né definizioni di metodi public interface Icomplex { public Icomplex sum(Icomplex z); }
10
INTERFACCE Una classe può implementare una o più interfacce le interfacce contengono dichiarazioni di metodi la classe deve definire i metodi delle interfacce implementate public class complex implements Icomplex { public Icomplex sum(Icomplex z){…} } A Ia
11
INTERFACCE Una classe può implementare una o più interfacce le interfacce contengono dichiarazioni di metodi la classe DEVE definire i metodi delle interfacce implementate public class complex implements Icomplex { public Icomplex sum(Icomplex z){…} } A Ia Se non lo fa, il compilatore Java segnala ERRORE
12
GERARCHIE DI INTERFACCE Le interfacce possono dare luogo a gerarchie proprio come le classi: public interface Ireal extends Icomplex {...} è una gerarchia separata da quella delle classi è slegata dagli aspetti implementativi esprime le relazioni concettuali della realtà guida il progetto del modello della realtà Ib Ia
13
UN ALTRO ASPETTO In Java, lereditarietà fra classi può essere solo singola una classe può ereditare da una sola superclasse Questo può essere limitativo in alcune circostanze altri linguaggi supportano lereditarietà multipla che però comporta non pochi problemi A Object B
14
EREDITARIETÀ MULTIPLA Con lereditarietà multipla fra classi la classe C unisce sia i dati di A sia quelli di B –che si fa con le omonimie? –come si distinguono? la classe C unisce i metodi di A con quelli di B –e se ci sono definizioni doppie? –e nelle classi successive? Java non la supporta fra classi... A C B
15
EREDITARIETÀ MULTIPLA … ma la supporta fra interfacce una interfaccia contiene solo dichiarazioni di metodi non ha implementazioni nessun problema di colli- sione fra metodi omonimi non ha variabili nessun problema di colli- sione fra dati omonimi È un potente strumento di modellizzazione Ia Iab Ib
16
INTERFACCE E PROGETTO Le interfacce inducono un diverso modo di concepire il progetto prima si definiscono le interfacce che ser- vono, e si stabiliscono le relazioni tra loro –la gerarchia delle interfacce riflette scelte di progetto (pulizia concettuale) poi si creano le classi che implementano tali interfacce –la gerarchia delle classi riflette scelte implementative (efficienza ed efficacia)
17
INTERFACCE E PROGETTO Tale ruolo è così essenziale da portare a definire, a volte, interfacce vuote non dichiarano funzionalità fungono da marcatori per le classi che asseriscono di implementarle –esempi: Cloneable, Serializable una classe che le implementa parla di sé –ad esempio, di essere clonabile, serializzabile.. –è una forma di auto-documentazione –sfrutta il compilatore per trovare incongruenze
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.