CLASSI ED EREDITARIETÀ Come si è visto, è cruciale che la gerarchia rispecchi la realtà del mondo ma a volte ciò contraddice principi di efficienza Esempio:

Slides:



Advertisements
Presentazioni simili
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione al linguaggio Java
Derivazione tra classi
Overriding.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
Gerarchia di classi Java
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Subtype Polymorphism. Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch.
Progettazione di una base di dati
Lezione XI Laboratorio di Programmazione. Ereditarieta Fondamentale proprieta dei linguaggi OO. Permette di specificare un nuova classe derivata da unaltra.
Java base IV: Java e la programmazione O.O.
CLASSI ASTRATTE L’ereditarietà porta riflettere sul
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione in Java (8)
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
Ereditarietà e Polimorfismo
Introduzione alla programmazione Object Oriented
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
UML.
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 Astrazione sul controllo: gli iteratori. 2 Perché vogliamo iterarare “in modo astratto” 4 problema: iterare su tipi di dato arbitrari  esempio: procedura.
Ese 1 (del 31 Marzo 2004). Il compilatore Non esegue il programma, non guarda i valori che possono assumere di volta in volta le variabili, non fa assunzioni.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Metodologie di Programmazione Esercizi sulla semantica di Java.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
La Programmazione ad Oggetti
ADT 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 24 Introduzione ai.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
La programmazione ad oggetti
28/12/2001package 1 Package Pacchetti e interfacce.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

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

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

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

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

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

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

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.

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

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); }

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

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

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

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

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

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

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)

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