Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.

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
Recupero debito quarto anno Primo incontro
Recupero debito quarto anno Secondo 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.
Programmazione orientata agli oggetti OOP Object Oriented Programming
SISSIS MODULO DI JAVA PER LA CLASSE IV DELL’ITI
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
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
Derivazione tra classi
Overriding.
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.
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
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
Java Contardi Carlo A.S. 2008/09.
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.
Programmazione concorrente
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: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
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.
Metodologie di Programmazione Esercizi sulla semantica di Java.
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.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
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.
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 alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Introduzione all’Ereditarietà Pietro Palladino

Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce le proprietà e le funzionalità delle sue istanze (oggetti)

Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce le proprietà e le funzionalità delle sue istanze (oggetti) Persona

Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Proprietà: attributi Persona nome: String

Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Funzionalità: metodi Persona nome: String scriviNome(): void

Richiami UML Relazione Una connessione tra due classi Persona nome: String scriviNome(): void Indirizzo via: String getCittà(): String

Richiami UML Relazione Una connessione tra due classi La molteplicità indica quanti oggetti di una classe possono far riferimento ad ogni oggetto dell'altra Persona nome: String scriviNome(): void Indirizzo via: String getCittà(): String * 1

Ereditarietà Principio che consente a una classe di ereditare le variabili e i metodi di un’altra classe Consente di raffinare le caratteristiche di classi di oggetti a partire da classi generali  riutilizzo del codice

Relazione stabilita tra due classi La classe destinazione è la superclasse e definisce un concetto generale La classe sorgente è la sottoclasse e definisce una specializzazione della superclasse Ereditarietà Studente classe: String Persona nome: String scriviNome(): void

Alcuni esempi Animale respira(): void

Alcuni esempi PesceAnimale respira(): void

Alcuni esempi UccelloAnimale respira(): void Pesce

Alcuni esempi UccelloPesceAnimale respira(): void Squalo

Alcuni esempi UccelloPesceAnimale respira(): void SqualoAquila

Alcuni esempi Uccello vola(): void Pesce nuota(): void Animale respira(): void SqualoAquila

Perché? Permette di riutilizzare il codice delle classi già definite Posso definire un nuovo Pesce senza preoccuparmi di dover ridefinire come respira Le nuove classi aggiungono funzionalità ma sono COMPATIBILI con le vecchie Posso definire un nuovo tipo di Uccello e utilizzarlo come se fosse un Uccello o un Animale e basta Posso non dover/voler conoscere il tipo specifico!  principio di sostituibilità

Proprietà La classe Animale è la classe base/superclasse La classe Pesce è la classe derivata/specializzata Le classi create definiscono una gerarchia Una classe può estendere SOLO un’altra classe Può essere estesa da n classi  Albero delle classi

Sintassi Java In Java, l’ereditarietà si definisce utilizzando la parola chiave extends Quando omesso, le classi estendono Object class Animale { … } class Pesce extends Animale { … }

Sintassi Java La classe derivata eredita tutte le variabili e i metodi della classe base La classe derivata NON eredita il costruttore Se la classe base ha un costruttore senza parametri la classe derivata richiama quello Se la classe base NON ha un costruttore senza parametri la classe derivata deve esplicitamente richiamarlo: super class Animale { Animale(int numeroZampe) { … } } class Pesce extends Animale{ Pesce() { super(0); } }

Overriding La classe derivata può riscrivere il comportamento di un metodo definito nella classe base class Animale { void respira() { … } } class Pesce extends Animale { void respira() { getBranchie().respira(); }

Binding dinamico Il codice da eseguire viene calcolato a run-time  oggetti polimorfici/polimorfismo A run-time la variabile a è di tipo Squalo  viene eseguito il metodo respira() della classe Squalo Animale a = new Squalo(); a.respira();

Protezione di accesso Una classe derivata può non aver bisogno di accedere a tutti i membri della classe base private : accessibile solo all’interno della classe default/package : accessibile all’interno del package protected : accessibile anche alle sottoclassi public : accessibile a tutti - attributo: tipo # attributo: tipo + attributo: tipo attributo: tipo

Classi astratte Una classe astratta ( abstract ) è una classe di cui non possono essere istanziati oggetti Possono essere istanziati oggetti solo delle sue sottoclassi Permette di definire un comportamento generale

Nell’esempio precedente Uccello vola(): void Pesce nuota(): void Animale respira(): void SqualoAquila

Abstract Una classe astratta può non voler definire tutti i metodi L’implementazione deve essere definita nelle classi concrete Una classe con almeno un metodo definito abstract e quindi non implementato deve essere dichiarata abstract abstract class Animale { abstract void respira(); }

Final Una classe final NON può essere derivata Un metodo final non può essere riscritto final class Squalo extends Pesce { … } class Pesce extends Animale { final int numeroZampe() { return 0; }

Casting Posso utilizzare oggetti delle classi derivate come fossero delle classi base Attenzione! Un Animale non può volare!! (non lo abbiamo definito) Aquila q = new Aquila(); Animale a = q; a.respira(); Aquila q = new Aquila(); Animale a = q; a.vola();

Casting Posso voler utilizzare un Animale come Aquila Adesso l’aquila può volare Animale a = new Aquila(); Aquila q = (Aquila) a; q.vola();

Casting Non si può trasformare un oggetto in un altro a piacimento Animale a = new Squalo(); Aquila q = (Aquila) a; q.vola();

Esercizi Individuare la gerarchia tra le seguenti classi Persona, Studente, Lavoratore, Docente Considerare, ove opportuno, gli attributi: nome, cognome, stipendio, data di nascita, altezza, materia, classe Disegnare il diagramma delle classi UML e implementare il codice Java

Esercizi Individuare la gerarchia tra le seguenti classi Quadrilatero, Rettangolo, Triangolo, Rombo Implementare il calcolo dell’area Disegnare il diagramma delle classi UML e implementare il codice Java

Esercizi abstract class Animale { abstract String getNome(); } class Gatto extends Animale { String getNome() { return "Gatto"; } } class Cane extends Animale { String getNome() { return "Cane"; } } public static void main(String[] args) { Animale a1 = new Cane(); Animale a2 = new Gatto(); a1 = a2; System.out.println(a1.getNome()); }