Recupero debito quarto anno Secondo incontro

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Programmazione ad oggetti
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Oggetti Java.
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
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.
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Fisica Computazionale I - 41 APPROFONDIMENTI Dobbiamo approfondire a questo punto le nostre conoscenze delle regole di Java, definendo in modo rigoroso.
Introduzione al linguaggio Java
Derivazione tra classi
Overriding.
Soluzione Esercizio - Classe Vettore
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
CAPITOLO 3 ELEMENTI DI PROGRAMMAZIONE OBJECT-ORIENTED.
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.
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Basi di dati 2002 EER Vogliamo aumentare lespressività degli Entity Model EER: Entity Model Esteso.
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
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
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: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Problema dei Contratti Telefonici
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.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Ereditarietà e polimorfismo
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
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.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Gestione dei thread in Java
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.
Esercitazione del 7 marzo 2008 Ereditarieta’. Esercizio: soluzione Implementare la seguente specifica che definisce un tipo di dato Libro.
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.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
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.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
La Programmazione ad Oggetti
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.
1 Diagramma delle Classi. 2 Diagramma delle classi Grafico che fornisce una vista strutturale (statica) del sistema in termini di classi attributi operazioni.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Gli oggetti: concetti avanzati
Transcript della presentazione:

Recupero debito quarto anno Secondo incontro Informatica Recupero debito quarto anno Secondo incontro

Obiettivi dell’incontro Conoscere il concetto di ereditarietà Attivare processi di astrazione e specializzazione Saper implementare classi derivate

Ereditarietà L’ereditarietà 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. L’ereditarietà permette di specificare “il punto di partenza”, cioè la classe base, e le differenze rispetto a questa.

Un esempio Classe Animale con proprietà: colore degli occhi peso lunghezza numero dei sensi velocità massima Queste proprietà vanno bene per definire uccelli, pesci e mammiferi, però ce ne vorrebbero altre per definire meglio le tre sottocategorie. Gli uccelli potrebbero avere la proprietà “apertura alare”, ai pesci si potrebbe aggiungere “numero di pinne” e ai mammiferi “lunghezza del pelo”.

Sottoclasse e Superclasse La nuova classe (nell’esempio Uccello, Pesce e Mammifero) viene definita sottoclasse (o classe derivata) La classe di provenienza (nell’esempio Animale) viene definita superclasse (o classe base) La sottoclasse eredita tutte le caratteristiche (attributi e metodi) della superclasse e si differenza da questa: per l’aggiunta di nuovi attributi e/o metodi per la ridefinizione di alcuni metodi della superclasse Attenzione: è vero che un pesce è un animale, non è vero il contrario in quanto un animale non è detto che sia un pesce

Un esempio di ereditarietà

Un diagramma di ereditarietà LibroDiTesto deriva da Libro e aggiunge nuove caratteristiche

Definizione di sottoclassi Java class Sottoclasse extends Superclasse { <attributi> <metodi> }

La sottoclasse LibroDiTesto class LibroDiTesto extends Libro { private String materia; private boolean adozione; public void setmateria(String materia) { this.materia = materia; } public String getmateria() { return materia; public void cambiaadozione() { adozione = !adozione;

Istanze di classe e di sottoclasse Un oggetto di tipo Sottoclasse è contemporaneamente e automaticamente anche di tipo Superclasse. Ogni qual volta che è necessario utilizzare un oggetto di tipo Superclasse è possibile utilizzare un oggetto di tipo Sottoclasse. Al contrario invece la regola non vale. Ogni oggetto di tipo LibroDiTesto è anche un oggetto di tipo Libro. Infatti è vero che un libro di testo è un libro. Non è vero invece il contrario: un libro non è necessariamente un libro di testo, potrebbe essere per esempio un romanzo.

Polimorfismo Il tipo LibroDiTesto è compatibile con il tipo Libro Libro lib; LibroDiTesto libtes = new LibroDiTesto(); lib = libtes; Il tipo LibroDiTesto è compatibile con il tipo Libro Questo fenomeno è chiamato polimorfismo ed è uno dei principi fondamentali della programmazione orientata agli oggetti. Una variabile come lib definita nell’esempio precedente è polimorfa: può contenere oggetti di tipo diverso.

Situazioni d’errore Un oggetto della classe base non può essere utilizzato al posto di uno della classe derivata. Nel nostro esempio una situazione come la seguente genera un errore: Libro lib = new Libro(); LibroDiTesto libtes; libtes = lib; //**** ERRORE ****

Gerarchia di classi L’ereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. 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.

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à: ereditarietà singola ereditarietà multipla L’ereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse. L’esempio 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 dell’ereditarietà singola per problemi di chiarezza e semplicità d’implementazione, Java è uno di questi, C++ non lo è. Non è possibile quindi una definizione di classe del tipo: class A extends B,C

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

Java e l’ereditarietà multipla Java non prevede ereditarietà multipla fra classi L’introduzione delle Interfacce permette parzialmente di ovviare a questa limitazione 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

Estensione Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: nuovi attributi e/o nuovi metodi in questo caso si parla di estensione. L’esempio 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 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

Un esempio di overriding

Overring e overloading Attenzione a non confondere 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

Estenzione e ridefinizione È possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione Nell’esempio 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 all’oggetto 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.

Un esempio class Libro { … public void stampa(){ System.out.print(autore+” “); System.out.print(titolo+” “); System.out.print(“pag. “+numeroPagine); System.out.print(“ “+codiceISBN); } class LibroDiTesto extends Libro { super.stampa(); System.out.print(“ “+materia);

Vantaggi dell’ereditarietà L’ereditarietà 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. L’ereditarietà 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

Esercizi Classi e Oggetti Definire la classe Animale con gli attributi: specie, nome, eta; con i metodi getSpecie, getNome, getEta e setSpecie, setNome, setEta, il metodo toString, il metodo stampa ed il metodo stessaSpecie che riceve i input un altro animale e restituisce true se fanno parte della stessa specie. Istanziare poi due oggetti: il primo di specie “Cavallo”, di nome “Freccia” e di 2 anni; il secondo di specie “Asino”. Ereditarietà Estendere la classe Animale con la classe Erbivoro che aggiunge l’attributo ciboPreferito con i metodi set… e get… e ridefinisce i metodi che devono essere ridefiniti. Relazione fra classi Definire la classe Gabbia con i due attributi pubblici “ospite” (l’animale presente nella gabbia) e superficie (in metri quadri). Cosa succede se si inserisce in una gabbia un “Erbivoro” e poi si chiama il metodo stampa di questo?