Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.

Slides:



Advertisements
Presentazioni simili
Dichiarazione di classi Programmazione Corso di laurea in Informatica.
Advertisements

AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE FUNZIONI.
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella.
Programmazione in Java Parte II Lezione 5 Dott. Marco Faella.
Programmazione orientata agli Oggetti. Classi Le classi sono uno strumento per costruire strutture dati che contengano non solo dati ma anche il codice.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Basi di dati - Fondamenti
Tecnologia OO.
Java World Introduzione.
Java: concetti e costrutti base
Introduzione al linguaggio C
Esercizi.
10. Programmazione Ricorsiva Ing. Simona Colucci
Strutture classi e oggetti
Programmazione a oggetti
Unità didattica 1: Introduzione al linguaggio Java
I vincoli di integrità Alcuni aspetti della realtà NON possono essere modellati solamente con entità, attributi e relazioni, per esempio i vincoli di integrità.
LE CLASSI ASTRATTE.
TIPI PRIMITIVI TIPI STRUTTURATI
Programmazione a oggetti
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Le basi della programmazione a oggetti
Corso Java Introduzione.
Vettori dinamici Definiremo la classe vector.
Gli oggetti: concetti avanzati
Corso Java Esercitazione.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a. a
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
OBJECT ORIENTED DATABASE
Corso Java Cicli e Array.
Secondo Programma in C.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Copia di oggetti il costruttore di copia ha le stesse particolarità della signature di un costruttore ordinario; il primo parametro è una reference ad.
Il passaggio dei parametri Metodi statici Il riferimento this
Ricorsione 16/01/2019 package.
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Unità A2 Java: le basi del linguaggio
La struttura dei primi programma in C
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C
Esercitazione guidata 1
Interfacce in Java Superare il meccanismo dell’ereditarietà singola
Java Costruttore di copia e GetStatus.
Ese 2 (del 31 Marzo 2004).
Esercizio 2.
Corso Java Lezione 1 5/12/2019.
Java Introduzione.
UML Diagramma statico di una classe
Ese 1 (del 31 Marzo 2004).
Programmazione e Laboratorio di Programmazione
Programmazione Procedurale
Transcript della presentazione:

Programmazione in Java Parte I: Fondamenti Lezione 3 Dott. Marco Faella

Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili L'ereditarietà consente di riutilizzare una classe esistente, aggiungendovi funzionalità L'ereditarietà consiste nel definire una nuova classe A a partire da una data classe B La sintassi è la seguente: class A extends B { … } In questo caso, A viene chiamata sottoclasse di B, e B superclasse di A Gli oggetti di classe A dispongono di tutti i campi e i metodi della classe B Tuttavia, per accedere ai membri della classe B, il codice della classe A deve sottostare alle regole di visibilità Ad esempio, consideriamo i campi di B...

Ereditarietà dei campi Esempio: Memory layout: class B { public int i; private double x; public double getX() { return x; } class A extends B { public int j; public void f() { j = 5; i = 7; x = 3; // errore! i = (int)x; // errore! un oggetto di tipo B: x i un oggetto di tipo A: x i j barriera di visibilità

Uso corretto dell'ereditarietà Una classe dovrebbe estenderne un'altra solo quando gli oggetti della prima classe sono un tipo particolare di oggetti della seconda In gergo, si dice che la sottoclasse deve essere in relazione “is a” con la superclasse Ad esempio, supponiamo che Rettangolo sia una classe caratterizzata dagli attributi base ed altezza E' corretto se la classe Quadrato estende Rettangolo, perché un quadrato è un rettangolo i cui lati sono uguali ovvero, un quadrato è un tipo particolare di rettangolo Non è corretto se la classe Triangolo estende Rettangolo, perché un triangolo non è un tipo particolare di Rettangolo, anche se è dotato anch'esso di base e altezza

Creazione di oggetti della sottoclasse Se A estende B, ogni costruttore di A deve necessariamente invocare uno dei costruttori di B Un costruttore di A può invocare un costruttore di B usando la parola chiave super class A extends B { public A(int n) { // chiama il costruttore di B che accetta un intero super(n); } public A() { // chiama il costruttore di B che accetta due interi super(3, 7); L'invocazione super deve essere la prima riga di ciascun costruttore Se un costruttore di A non inizia con una chiamata a super, il compilatore inserisce una chiamata del tipo “super()” Quindi, viene automaticamente invocato il costruttore di B senza argomenti Se un tale costruttore non c'è, viene segnalato un errore di compilazione

Esercizi Rettangolo e Quadrato con main separato Poligono con getArea e getPerimetro Triangolo dati i lati formula di Erone Array di Poligoni

Poligono p = new Rettangolo(10, 5); Sottotipi Un oggetto di tipo A (sottoclasse) può essere assegnato ad un riferimento di tipo B (superclasse) Si dice che A è sottotipo di B Quindi, ogni riferimento ha due tipi: il tipo dichiarato (o statico) il tipo effettivo (o dinamico) Il tipo dichiarato è quello usato nella dichiarazione del riferimento esso non cambia durante tutta l'esecuzione del programma Il tipo effettivo è il tipo dell'oggetto puntato dal riferimento esso può cambiare durante l'esecuzione Ad esempio, nel frammento Poligono p = new Rettangolo(10, 5); diremo che: il tipo dichiarato di “p” è Poligono (e tale resterà per tutto il programma) il tipo effettivo di “p”, in questo momento, è Rettangolo (ma potrebbe cambiare in seguito ad una nuova assegnazione)

elenco dei parametri (formali) tipo restituito (o di ritorno) L'overriding Una sottoclasse può ridefinire un metodo della superclasse, ovvero fornirne una versione più specifica Questa possibilità prende il nome di overriding Dato un metodo nella superclasse, ad es.: public int f(int i, String s) La sottoclasse può a sua volta definire un metodo con lo stesso nome, stessi parametri, stesso tipo di ritorno* e stessa visibilità* Invocando un metodo su un riferimento, verrà invocata la versione più specifica di quel metodo, cioè quella corrispondente al tipo effettivo del riferimento (*) Nota: il tipo di ritorno e la visibilità possono anche essere diversi, a certe condizioni elenco dei parametri (formali) tipo restituito (o di ritorno) nome visibilità