Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.

Slides:



Advertisements
Presentazioni simili
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Advertisements

Unified Modeling Language
Oggetti Java.
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
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
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
Fondamenti di Informatica
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
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.
Oggetti e dati primitivi
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.
Java base IV: Java e la programmazione O.O.
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.
Programmazione in Java (8)
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
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: ________________________________________________________________________________.
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.
Variabili e assegnazione
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
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.
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 Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
1 Gerarchie e polimorfismo: liste. 2 Generalizzare le liste di interi  List 4 lista di oggetti –non modificabile 4 vorremo poi definire un sottotipo.
LIP: 9 Maggio Esercizi Riprendiamo un esercizio proposto Definire un tipo di dato Persona che definisce oggetti che rappresentano le informazioni.
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.
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.
Esercitazione sull’ ordinamento 20 maggio 2003
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
ADT 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 24 Introduzione ai.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
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.
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.
Introduzione alle Classi e agli Oggetti in Java 1.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Package Pacchetti e ereditarietà 29/12/2018 package.
Transcript della presentazione:

Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo1 Capitolo 25 marzo 2004

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo2 Estensione di classi Estensione (o derivazione) di classi definizione di una classe a partire da un’altra classe mediante l’aggiunta e/o la specializzazione di funzionalità classe base o super-classe classe estesa o derivata o sotto-classe

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo3 La classe Persona /* Un oggetto Persona rappresenta una persona. */ class Persona { /* Il nome di questa Persona. */ private String nome; /* Crea una nuova Persona, dato il nome. */ public Persona(String nome) { this.nome = nome; } /* Restituisce il nome di questa Persona. */ public String getNome() { return nome; } /* Restituisce una descrizione di questa Persona. */ public String toString() { return "Mi chiamo " + getNome() + "."; }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo4 La classe Studente /* Un oggetto Studente rappresenta uno studente. */ class Studente extends Persona { /* L'università in cui studia questo Studente. */ private String università; /* Crea un nuovo Studente, dati nome e università. */ public Studente(String nome, String università) { super(nome); this.università = università; } /* Restituisce l'università di questo Studente. */ public String getUniversità() { return università; } /* Restituisce una descrizione di questo Studente. */ public String toString() { return "Mi chiamo " + getNome() + " e studio a " + università + "."; }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo5 Uso delle classi Persona e Studente Persona mario; Studente paola; mario = new Persona("Mario"); System.out.println(mario.getNome()); // Mario System.out.println(mario.toString()); // Mi chiamo Mario. paola = new Studente("Paola", "Roma Tre"); System.out.println(paola.getNome()); // Paola System.out.println(paola.getUniversità()); // Roma Tre System.out.println(paola.toString()); // Mi chiamo Paola e studio a Roma Tre.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo6 Le classi Persona e Studente nome : String «costruttore» Persona(String nome) «operazioni» String getNome() String toString() Persona estende università : String «costruttore» Studente(String nome, String università) «operazioni» String getUniversità() String toString() Studente nome = "Mario" String getNome() String toString() mario : Persona nome = "Paola" università = "Roma Tre" String getNome() String getUniversità() String toString() paola : Studente

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo7 Polimorfismo un oggetto di una classe viene visto come dotato di diverse “forme” Polimorfismo, in pratica è possibile assegnare il riferimento a un oggetto della classe estesa a una variabile il cui tipo è la classe base tipo statico e tipo dinamico (late binding)

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo8 Polimorfismo Persona riccardo; riccardo = new Studente("Riccardo", "La Sapienza"); System.out.println(riccardo.toString()); // Mi chiamo Riccardo e studio a La Sapienza. // e non: Mi chiamo Riccardo. System.out.println(riccardo.getUniversità()); // NO, ERRORE (IN COMPILAZIONE)!

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo9 L’operatore instanceof Persona mario; Studente paola; mario = new Persona("Mario"); paola = new Studente("Paola", "Roma Tre"); System.out.println(mario instanceof Persona); // true System.out.println(mario instanceof Studente); // false System.out.println(paola instanceof Persona); // true System.out.println(paola instanceof Studente); // true

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo10 Conversione esplicita Persona riccardo; Studente riccardoComeStudente; riccardo = new Studente("Studente", "La Sapienza"); riccardoComeStudente = (Studente) riccardo; System.out.println( riccardoComeStudente.getUniversità()); // Mi chiamo Riccardo e studio a La Sapienza.

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo11 La classe Object In Java tutte le classi estendono (direttamente o indirettamente) la classe Object definita nel package java.lang la classe Object definisce un comportamento comune per tutti gli oggetti istanza String toString() boolean equals(Object altro)

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo12 Il metodo equals Nella classe Punto è opportuno definire i seguenti metodi /* Verifica se questo punto è uguale al Punto p. */ public boolean equals(Punto p) { // pre: p!=null return (this.x==p.x) && (this.y==p.y); } /* Verifica se questo oggetto è uguale all’oggetto p. */ public boolean equals(Object p) { // pre: p!=null boolean uguali; if (p instanceof Punto) uguali = this.equals((Punto) p); else uguali = false; return uguali; }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo13 Estensione di classi e progettazione di classi L’estensione di classi (e l’ereditarietà in generale) è una tecnica che va tenuta in considerazione nella progettazione di un insieme di classi prima viene progettata la gerarchia delle classi che si vogliono definire poi vengono implementate le varie classi criteri per decidere se una classe può essere definita come estensione di una classe

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo14 Il modificatore protected Nella definizione di gerarchie di classi, l’uso dei soli modificatori public e private è troppo restrittivo viene di solito usato il modificatore protected un livello di restrizione dell’accesso intermedio tra public e private

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo15 Classi astratte Una classe astratta è una classe implementata in modo parziale metodi astratti – viene specificata la loro intestazione ma non il loro corpo una classe astratta non può essere istanziata Utilità delle classi astratte definire il comportamento comune per tutte le classi della gerarchia dichiarare le funzionalità che devono essere implementate da tutte le classi che la estendono

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo16 La classe astratta Forma /* Un oggetto Forma rappresenta una forma geometrica. */ abstract class Forma { /* Il colore di questa Forma. */ protected String colore; /* Crea una nuova Forma di un certo colore. */ public Forma(String colore) { this.colore = colore; } /* Restituisce il colore di questa Forma. */ public String colore() { return colore; } /* Restituisce l'area di questa Forma. */ /* (Ogni forma deve saper calcolare la propria area.) */ public abstract double area(); }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo17 La classe concreta Quadrato /* Un Quadrato rappresenta una forma geometrica quadrato. */ class Quadrato extends Forma { /* Il lato di questo Quadrato. */ protected double lato; /* Crea una nuovo Quadrato. */ public Quadrato(double lato, String colore) { super(colore); this.lato = lato; } /* Restituisce il lato di questo Quadrato. */ public double lato() { return lato; } /* Restituisce l'area di questo Quadrato. */ public double area() { return lato*lato; }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo18 La classe concreta Cerchio /* Un Cerchio rappresenta una forma geometrica cerchio. */ class Cerchio extends Forma { /* Il raggio di questo Cerchio. */ protected double raggio; /* Crea una nuovo Cerchio. */ public Cerchio(double raggio, String colore) { super(colore); this.raggio = raggio; } /* Restituisce il raggio di questo Cerchio. */ public double raggio() { return raggio; } /* Restituisce l'area di questo Cerchio. */ public double area() { return raggio*raggio*Math.PI; }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo19 Uso di forme geometriche Quadrato q; // un quadrato Forma fq; // un altro quadrato q = new Quadrato(5, "bianco"); // lato 5 e colore bianco fq = new Quadrato(10, "rosso"); // lato 10 e colore rosso System.out.println(q.area()); // 25.0 System.out.println(q.colore()); // bianco System.out.println(q.lato()); // 5.0 System.out.println(fq.area()); // System.out.println(fq.colore()); // rosso System.out.println(fq.lato()); // NO, errore // di compilazione!

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo20 Interfacce Una interfaccia (interface) consiste nella dichiarazione di un certo numero di metodi d’istanza e pubblici – implicitamente astratti una classe implementa una interfaccia se implementa tutti i metodi d’istanza dichiarati dall’interfaccia

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo21 Esempio – l’interfaccia Comparable public interface Comparable { /** Confronta questo oggetto con o per determinare * in che relazione d'ordine sono. * Restituisce: * - zero, se questo oggetto e o sono uguali * - un valore negativo, * se questo oggetto è minore di o * - un valore positivo, * se questo oggetto è maggiore di o. */ public int compareTo(Object o); } le classi String e Integer implementano questa interfaccia

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo22 Implementazione di interfacce /* Un oggetto Numero rappresenta un numero intero, * con un valore che può essere acceduto e modificato. */ class Numero implements Comparable { /* valore del numero */ private int valore; /* Crea un nuovo Numero che ha valore iniziale v. */ public Numero(int v) { this.valore = v; } /* Calcola il valore di questo numero. */ public int getValore() { return this.valore; } /* Cambia in v il valore di questo numero. */ public void setValore(int v) { this.valore = v; }... segue...

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo23 Implementazione di interfacce /* Verifica in che ordine sono questo numero * e il numero o. */ public int compareTo(Numero o) { // pre: o!=null int confronto; if (this.valore==o.valore) confronto = 0; else if (this.valore<o.valore) confronto = -1; else // this.valore>o.valore confronto = 1; return confronto; } /* Verifica in che ordine sono questo numero * e l’oggetto o. */ public int compareTo(Object o) { // pre: o!=null && o instanceof Numero return compareTo((Numero) o); }

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo24 Interfacce e polimorfismo Una interfaccia definisce un tipo (parziale) che può essere implementato polimorficamente da più classi il metodo void sort(Object[] a) di Arrays ipotizza che gli elementi di a siano tutti di uno stesso tipo che questo tipo implementi l’interfaccia Comparable posso usarlo per ordinare un array di Numero

Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ereditarietà e polimorfismo25 Interfacce e implementazione di interfacce int compareTo(Object o) «interfaccia» Comparable implementa valore : int «costruttore» Numero(int v) «operazioni» int getValore() void setValore(int v) int compareTo(Numero o) int compareTo(Object o) Numero