1 / 17

CLASSI ED EREDITARIETÀ

X. A. B. 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.

uriah
Download Presentation

CLASSI ED EREDITARIETÀ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. X A B 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

  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 Realcome parte reale • aggiungiamo un nuovo float per la parte immaginaria • ma la realtà è fatta a rovescio!! Complex un sottinsieme di Real??? Real Complex

  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 Complexa un Real, ma non viceversa • le compatibilità di tipo vanno tutte“a rovescio” rispetto alla realtà • è un modello assurdo! Real Complex

  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 (laparte immaginaria) è sempre zero • le operazioni sono fra Complex inutilmente complicate per i Real • ma modella correttamente la realtà Complex Real

  6. Real Complex Complex Real REALI E COMPLESSI Possibile che non si possa coniugare: • l’efficienza del primo approc-cio (dal punto di vista imple-mentativo)... … con la correttezza del secondo (dal punto di vista concettuale) ?

  7. Real Complex Complex Real REALI E COMPLESSI Bisognerebbe poter avere due gerarchie: • una per la parte implemen-tativa, che risponda a prin-cipi di efficienza... … e una per l’interfaccia esterna, che mantenga la correttezza concettuale.

  8. Real Complex Complex Real REALI E COMPLESSI Bisognerebbe poter avere due gerarchie: • una per la parte implemen-tativa, che risponda a prin-cipi di efficienza... CLASSI … e una per l’interfaccia esterna, che mantenga la correttezza concettuale. INTERFACCE

  9. INTERFACCE Una interfacciacostituisce 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 Ia Una classepuò implementare una o più interfacce • le interfacce contengono dichiarazioni di metodi • la classe deve definire i metodidelle interfacce implementate public class complex implements Icomplex { public Icomplex sum(Icomplex z){…} } A

  11. INTERFACCE Ia Una classepuò implementare una o più interfacce • le interfacce contengono dichiarazioni di metodi • la classeDEVEdefinire i metodidelle interfacce implementate public class complex implements Icomplex { public Icomplex sum(Icomplex z){…} } Se non lo fa, il compilatore Java segnala ERRORE A

  12. GERARCHIE DI INTERFACCE Ia Le interfacce possono dare luogo a gerarchieproprio come le classi: public interface Ireal extends Icomplex {...} • è una gerarchia separatada quella delle classi • è slegata dagli aspetti implementativi • esprime le relazioni concettuali della realtà • guida il progetto del modello della realtà Ib

  13. Object A B UN ALTRO ASPETTO In Java, l’ereditarietà fra classi può essere solo singola • una classe può ereditare da una sola superclasse Questo può essere limitativo in alcune circostanze • altri linguaggi supportano l’ereditarietà multipla • che però comporta non pochi problemi

  14. A B C EREDITARIETÀ MULTIPLA Con l’ereditarietà 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 supportafra classi...

  15. Ia Ib Iab EREDITARIETÀ MULTIPLA … ma la supportafra interfacce • una interfaccia contiene solo dichiarazionidi 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

  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 riflettescelte 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

More Related