Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta...

29
Programmazione in Java (8) Mauro Lorenzutti

Transcript of Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta...

Page 1: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

Programmazionein Java (8)

Mauro Lorenzutti

Page 2: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 2

Scaletta Ripasso ereditarietà Esercitazioni

Solidi Persone I/O

Serializzazione

Page 3: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 3

Ripasso ereditarietà Concetti base Modificatori di visibilità Overriding La classe Object Classi astratte Polimorfismo

Page 4: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 4

Concetti base L’ereditarietà è l’atto di derivare una

nuova classe da una già esistente (esempio progetto casa)

Lo scopo è il riutilizzo del software Le variabili e i metodi ereditati possono

essere usati nella classe derivata come se fossero locali

Gerarchie di classi OK Ereditarietà multipla NO!!!!

Page 5: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 5

Un esempio Mammiferi, cavalli e cani

Page 6: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 6

Nomi La classe Mammifero è definita:

Classe base Superclasse Classe padre

Le classi Cavallo e Cane sono dette: Classe figlio Sottoclasse

Page 7: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 7

Modificatori di visibilità

public a()protected b()

c()private d()

Page 8: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 8

public e private I metodi e le variabili public sono

ereditati da tutte le sottoclassi e accessibili ovunque

I metodi e le variabili private NON vengono mai ereditate e sono visibili solamente all’interno della classe in cui vengono dichiarati

Page 9: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 9

protected I metodi e le variabili protected sono

ereditati da tutte le sottoclassi, indipendentemente dal package di appartenenza.

Ogni classe nello stesso package può accedere ai membri protected di una classe.

Page 10: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 10

Default Nessun modificatore specificato Sono ereditati solamente dalle

sottoclassi che appartengono allo stesso package della superclasse.

Sono visibili da tutte le classi all’interno dello stesso package.

Page 11: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 11

Esempio

class P

public a()

protected b()

c()

private d()

class C1

class AltraClasse1

class C2

class AltraClasse2

P x = new P()

C1 y = new C1()

C2 z = new C2()

Page 12: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 12

Esempio 2 Il metodo c() ha visibilità di default,

quindi: C1 eredita c() C2 NON eredita c() AltraClasse1 può invocare il metodo

x.c() AltraClasse2 NO!

Page 13: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 13

Overriding Si parla di overriding quando una

classe figlio definisce un metodo con lo stesso nome e lo stesso prototipo della classe padre.

Mascherare le variabili non è consigliabile

Page 14: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 14

La classe Object È la classe base in Java Se una classe non estende

direttamente un’altra classe (extends) in automatico estende la classe Object

Due metodi particolari: equals() toString()

Page 15: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 15

Classi astratte Una classe astratta rappresenta un

concetto generico partendo dal quale le sottoclassi possono definire una propria implementazione

Una classe astratta NON può essere istanziata

Una classe derivata da una astratta deve ridefinire tutti i metodi astratti della classe padre, altrimenti sarà essa stessa una classe astratta.

Page 16: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 16

Esempioabstract public class Poligono {

int numLati; String tipo = "Poligono"; public Poligono(int nl){ numLati = nl; } public int numeroDiLati(){return numLati;}public String tipo(){ return tipo;}

abstract public double area();abstract double perimetro();

}

Page 17: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 17

Polimorfismo Polimorfismo: avere più forme Un riferimento polimorfico è un

riferimento che può puntare a oggetti di tipi differenti in momenti differenti

Interfacce Ereditarietà

Page 18: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 18

Un esempioPoligono elenco[] = new Poligono[4];elenco[0] = new Rettangolo(3.2, 4.5);elenco[1] = new Quadrato(5);elenco[2] = new Triangolo(3,4,5);elenco[3] = new TriangoloEquilatero(3);for (int i = 0; i<elenco.length; i++)

System.out.println("Il perimetro del " + elenco[i].tipo() + " è " + elenco[i].perimetro());

Page 19: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 19

Dynamic binding Nell’esempio precedente i metodi

tipo() e perimetro() vengono collegati solamente durante l’esecuzione

Si parla di Late binding (collegamento ritardato) Dynamic binding (collegamento

dinamico)

Page 20: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 20

Esercizi Solidi

Estendere il package “geometria” della lezione scorsa

Persone Esempio in sospeso della lezione scorsa

I/O Vedi slide seguente

Page 21: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 21

I/O Progettare e implementare una gerarchia

di classi per astrarre il device di I/O per la classe Persona

Input da: Tastiera File

Output su Video File

Page 22: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 22

Serializzazione Perché Concetti base Un po’ di codice Esercizio

Page 23: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 23

Persistenza degli oggetti Quando un programma termina tutti

gli oggetti muoiono con lui Serve un meccanismo per salvare gli

oggetti per farli “vivere” indipendentemente dal programma che li ha generati

Questo fenomeno è detto persistenza degli oggetti

Page 24: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 24

Serializzazione Per ottenere la persistenza degli oggetti si

può codificarli in un file e poi leggerli molto scomodo

Si può serializzarli e scriverli in un file o inviarli attraverso la rete

Serializzare un oggetto vuol dire rappresentarlo come una sequenza di byte

Questa rappresentazione in byte può essere usata per ricostruire l’oggetto

Page 25: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 25

Serializzare su file

FileOutputStream fos = new FileOutputStream(nomefile);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(oggetto);

Page 26: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 26

De-serializzare da file Il processo inverso: da un flusso di byte

ricostruire l’oggetto originale

FileInputStream fis = new FileInputStream(nomefile);

ObjectInputStream ois = new ObjectInputStream(fis);

TipoOggetto oggetto = (TipoOggetto)ois.readObject();

Page 27: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 27

Attenzione! L’oggetto da serializzare e tutti i suoi

attributi devono essere predisposti alla serializzazione

public class Persona implements Serializable{

private static final long serialVersionUID = 1L;

Page 28: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 28

Escludere dal flusso È possibile in certi casi avere la

necessità di escludere una variabile dal flusso di byte

private transient String password;

Page 29: Programmazione in Java (8) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta Ripasso ereditarietà Esercitazioni Solidi Persone I/O Serializzazione.

30/09/2005 Corso Java - Mauro Lorenzutti 29

Esercizio Estendere la gerarchia di I/O per

includere una classe che permetta il salvataggio su file di dati serializzati e la successiva lettura e ricostruzione di questi