Informatica Recupero debito quarto anno Terzo incontro.

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Programmazione ad oggetti
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Oggetti Java.
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo incontro
Recupero debito quarto anno Primo incontro Esercizi
PHP.
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
29 febbraio 2008 Progettare tipi di dato astratti.
Le gerarchie di tipi.
Metodologie di Programmazione = decomposizione basata su astrazioni
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
SISSIS MODULO DI JAVA PER LA CLASSE IV DELL’ITI
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Introduzione al linguaggio C++ 5 lezioni
Fisica Computazionale I - 41 APPROFONDIMENTI Dobbiamo approfondire a questo punto le nostre conoscenze delle regole di Java, definendo in modo rigoroso.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione al linguaggio Java
Overriding.
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.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Sistemi Operativi GESTIONE DEI PROCESSI.
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 ED EREDITARIETÀ Come si è visto, è cruciale che la gerarchia rispecchi la realtà del mondo ma a volte ciò contraddice principi di efficienza Esempio:
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
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Introduzione alla programmazione Object Oriented
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
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.
Ereditarietà e polimorfismo
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
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.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
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.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
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: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
La Programmazione ad Oggetti
Attività 1 Introduzione alla OOP
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2015/16 Oltre le classi.
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.
Transcript della presentazione:

Informatica Recupero debito quarto anno Terzo incontro

Obiettivi dellincontro Ripasso ereditarietà Ripasso ereditarietà Classi astratte Classi astratte Interfacce Interfacce

Ereditarietà Lereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza. Lereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza. La nuova classe viene definita esprimendo solamente le differenze che essa possiede rispetto alla classe di partenza. La nuova classe viene definita esprimendo solamente le differenze che essa possiede rispetto alla classe di partenza. Lereditarietà permette di specificare il punto di partenza, cioè la classe base, e le differenze rispetto a questa. Lereditarietà permette di specificare il punto di partenza, cioè la classe base, e le differenze rispetto a questa.

Gerarchia di classi Lereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Lereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore. Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore. Nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione. Nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione.

Un esempio class Persona { …} class Sportivo extends Persona { …} class Nuotatore extends Sportivo { …} class Motociclista extends Sportivo { …} class Calciatore extends Sportivo { …}

Ereditarietà singola e multipla Sono possibili due tipi di ereditarietà: Sono possibili due tipi di ereditarietà: ereditarietà singola ereditarietà singola ereditarietà multipla ereditarietà multipla Lereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse. Lereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse. Lesempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate. Lesempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate. Vari linguaggi ad oggetti pongono il vincolo dellereditarietà singola per problemi di chiarezza e semplicità dimplementazione, Java è uno di questi, C++ non lo è. Vari linguaggi ad oggetti pongono il vincolo dellereditarietà singola per problemi di chiarezza e semplicità dimplementazione, Java è uno di questi, C++ non lo è. Non è possibile quindi una definizione di classe del tipo: Non è possibile quindi una definizione di classe del tipo: class A extends B,C

Ereditarietà multipla Lereditarietà multipla si ha quando una sottoclasse deriva da più superclassi Lereditarietà multipla si ha quando una sottoclasse deriva da più superclassi La classe Quadrato ha due superclassi: PoligonoRegolare e Parallelogramma La classe Quadrato ha due superclassi: PoligonoRegolare e Parallelogramma

Java e lereditarietà multipla Java non prevede ereditarietà multipla fra classi Java non prevede ereditarietà multipla fra classi Lintroduzione delle Interfacce permette parzialmente di ovviare a questa limitazione Lintroduzione delle Interfacce permette parzialmente di ovviare a questa limitazione La definizione di Quadrato in pseudolinguaggio è la seguente: La definizione di Quadrato in pseudolinguaggio è la seguente: Classe Quadrato Deriva Da PoligonoRegolare,Parallelogramma … … fine Classe Quadrato Quadrato erediterà attributi e metodi sia da PoligonoRegolare che da Parallelogramma Quadrato erediterà attributi e metodi sia da PoligonoRegolare che da Parallelogramma

Estensione Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: nuovi attributi nuovi attributi e/o nuovi metodi e/o nuovi metodi in questo caso si parla di estensione. in questo caso si parla di estensione. Lesempio relativo alla classe Libro e LibroDiTesto è un esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristiche ma non altera il comportamento delle funzionalità offerte dalla classe base. Lesempio relativo alla classe Libro e LibroDiTesto è un esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristiche ma non altera il comportamento delle funzionalità offerte dalla classe base.

Ridefinizione La classe derivata potrebbe però fornire le stesse caratteristiche della classe base differenziandosi invece per il comportamento La classe derivata potrebbe però fornire le stesse caratteristiche della classe base differenziandosi invece per il comportamento Si definisce ereditarietà per ridefinizione (overriding) la situazione in cui uno o più metodi della classe base siano ridefiniti nella classe derivata Si definisce ereditarietà per ridefinizione (overriding) la situazione in cui uno o più metodi della classe base siano ridefiniti nella classe derivata I metodi avranno quindi la stessa firma (nome e lista di tipi dei parametri) ma differente corpo I metodi avranno quindi la stessa firma (nome e lista di tipi dei parametri) ma differente corpo

Un esempio di overriding

Overring e overloading Attenzione a non confondere Attenzione a non confondere il sovraccarico dei metodi (overloading) situazione in cui oltre al corpo del metodo è differente anche la sua firma il sovraccarico dei metodi (overloading) situazione in cui oltre al corpo del metodo è differente anche la sua firma con la ridefinizione (overriding) situazione in cui la firma del metodo è identica ma è differente il corpo con la ridefinizione (overriding) situazione in cui la firma del metodo è identica ma è differente il corpo

Estenzione e ridefinizione È possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione È possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione Nellesempio presentato in precedenza relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la visualizzazione dei nuovi attributi. Nellesempio presentato in precedenza relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la visualizzazione dei nuovi attributi.

super La parola chiave this, intesa come riferimento alloggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo interno. La parola chiave this, intesa come riferimento alloggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo interno. In una gerarchia di classi può essere necessario far riferimento ad un attributo o metodo della superclasse, in questo caso si utilizza la parola chiave super. In una gerarchia di classi può essere necessario far riferimento ad un attributo o metodo della superclasse, in questo caso si utilizza la parola chiave super.

Vantaggi dellereditarietà Lereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze. Lereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze. Specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti eliminando ridondanza di codice. Specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti eliminando ridondanza di codice. Lereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. Non cè copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate Lereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. Non cè copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate

final Abbiamo fino ad ora utilizzato il modificatore final per definire attributi non modificabili (costanti) Abbiamo fino ad ora utilizzato il modificatore final per definire attributi non modificabili (costanti) final può essere utilizzato anche per i metodi; anche in questo caso sta a significare la non modificabilità del metodo (un metodo dichiarato final non può essere ridefinito da una sottoclasse) final può essere utilizzato anche per i metodi; anche in questo caso sta a significare la non modificabilità del metodo (un metodo dichiarato final non può essere ridefinito da una sottoclasse) Esistono anche classi definite final che non possono essere estese (una classe dichiarata final non può avere sottoclassi) Esistono anche classi definite final che non possono essere estese (una classe dichiarata final non può avere sottoclassi)

Classi e metodi astratti Si definiscono metodi astratti quei metodi in cui è presente solo la firma ma non il corpo (il modificatore di un metodo astratto è abstract) Si definiscono metodi astratti quei metodi in cui è presente solo la firma ma non il corpo (il modificatore di un metodo astratto è abstract) Una classe che contiene almeno un metodo astratto si definisce classe astratta e da essa non possono essere istanziati oggetti Una classe che contiene almeno un metodo astratto si definisce classe astratta e da essa non possono essere istanziati oggetti Le sottoclassi di una classe astratta devono implementare tutti i metodi astratti della classe base o essere a loro volta astratte Le sottoclassi di una classe astratta devono implementare tutti i metodi astratti della classe base o essere a loro volta astratte

Un esempio

Esercizio Definire la classe astratta Veicolo con gli attributi cilindrata e numero_posti, i metodi: set e get e stampa Definire la classe astratta Veicolo con gli attributi cilindrata e numero_posti, i metodi: set e get e stampa Definire le classi derivate Moto e Automobile, la classe Automobile ha anche lattributo Euro (valori da 0 a 5) Definire le classi derivate Moto e Automobile, la classe Automobile ha anche lattributo Euro (valori da 0 a 5) Realizzare una applicazione che utilizza 2 Automobili e 2 Motociclette e utilizza tutti i metodi presenti in queste classi Realizzare una applicazione che utilizza 2 Automobili e 2 Motociclette e utilizza tutti i metodi presenti in queste classi

Definizione esplicita di interfaccia E possibile definirne uninterfaccia esplicitamente mediante un costrutto specifico E possibile definirne uninterfaccia esplicitamente mediante un costrutto specifico Interfaccia Risorsa Metodo leggi() Di Tipo Stringa Metodo leggi() Di Tipo Stringa Metodo scrivi(buffer Di Tipo Stringa) Metodo scrivi(buffer Di Tipo Stringa) Metodo disponibili() Di Tipo Intero Metodo disponibili() Di Tipo Intero Fine Interfaccia Risorsa Linterfaccia di questo esempio definisce le operazioni di un ipotetico oggetto di tipo Risorsa. Linterfaccia di questo esempio definisce le operazioni di un ipotetico oggetto di tipo Risorsa. Linterfaccia non essendo una classe implementata non può essere istanziata direttamente. Linterfaccia non essendo una classe implementata non può essere istanziata direttamente. Per implementare delle risorse dobbiamo implementare i metodi dichiarati dallinterfaccia Risorsa Per implementare delle risorse dobbiamo implementare i metodi dichiarati dallinterfaccia Risorsa Ma per ogni tipo di risorsa dovranno essere implementati in maniera differente (es. per accedere ad un file si effettueranno operazioni diverse rispetto che per accedere alla rete) Ma per ogni tipo di risorsa dovranno essere implementati in maniera differente (es. per accedere ad un file si effettueranno operazioni diverse rispetto che per accedere alla rete)

Utilità delle interfacce Linterfaccia fornisce uno schema di come dovrà essere strutturata la classe: quali metodi dovranno essere presenti Linterfaccia fornisce uno schema di come dovrà essere strutturata la classe: quali metodi dovranno essere presenti Linterfaccia non fornisce limplementazione dei metodi ma lascia allo sviluppatore lonere di scriverli in modo specifico per ognuna delle classi che fa uso dellinterfaccia. Linterfaccia non fornisce limplementazione dei metodi ma lascia allo sviluppatore lonere di scriverli in modo specifico per ognuna delle classi che fa uso dellinterfaccia. Lutilizzo di uninterfaccia è utile quando di devono definire i metodi che dovrà possedere un oggetto senza poterne dare unimplementazione univoca per tutte le tipologie di oggetti che faranno uso dellinterfaccia. Lutilizzo di uninterfaccia è utile quando di devono definire i metodi che dovrà possedere un oggetto senza poterne dare unimplementazione univoca per tutte le tipologie di oggetti che faranno uso dellinterfaccia. Una classe che vuole fare uso di uninterfaccia si dice che la implementa; questo rende obbligatorio limplementazione di tutti i metodi definiti nellinterfaccia. Una classe che vuole fare uso di uninterfaccia si dice che la implementa; questo rende obbligatorio limplementazione di tutti i metodi definiti nellinterfaccia.

Interfacce in Java public interface Risorsa { public String leggi(); public String leggi(); public void Scrivi(String buffer); public void Scrivi(String buffer); public int disponibili(); public int disponibili();} public class RisorsaFile implements Risorsa { public String leggi() { public String leggi() { // Ritorno il contenuto del file // Ritorno il contenuto del file } public void Scrivi(String buffer) { public void Scrivi(String buffer) { // Scrivo il contenuto di buffer nel file // Scrivo il contenuto di buffer nel file } public int disponibili() { public int disponibili() { // Ritorno il numero di caratteri disponibili nel file // Ritorno il numero di caratteri disponibili nel file }}

Interfacce ed ereditarietà multipla Una classe può implementare anche più di una interfaccia Una classe può implementare anche più di una interfaccia E possibile implementare uninterfaccia e contemporaneamente estendere una classe. E possibile implementare uninterfaccia e contemporaneamente estendere una classe. In questo modo si può ovviare al limite di Java di non possedere lereditarietà multipla. In questo modo si può ovviare al limite di Java di non possedere lereditarietà multipla. Rimane linconveniente che utilizzando uninterfaccia per simulare lereditarietà multipla è necessario implementarne tutti i metodi, rendendo le scelte di progetto difficili e delicate. Rimane linconveniente che utilizzando uninterfaccia per simulare lereditarietà multipla è necessario implementarne tutti i metodi, rendendo le scelte di progetto difficili e delicate.

Esercizio Riprendere lesercizio relativo ai veicoli sostituendo alla classe astratta Veicolo linterfaccia MezzoDiTrasporto Riprendere lesercizio relativo ai veicoli sostituendo alla classe astratta Veicolo linterfaccia MezzoDiTrasporto