programmazione in java (8) mauro lorenzutti. 30/09/2005corso java - mauro lorenzutti2 scaletta...
Post on 02-May-2015
216 Views
Preview:
TRANSCRIPT
Programmazionein Java (8)
Mauro Lorenzutti
30/09/2005 Corso Java - Mauro Lorenzutti 2
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
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!!!!
30/09/2005 Corso Java - Mauro Lorenzutti 5
Un esempio Mammiferi, cavalli e cani
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
30/09/2005 Corso Java - Mauro Lorenzutti 7
Modificatori di visibilità
public a()protected b()
c()private d()
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
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.
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.
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()
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!
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
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()
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.
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();
}
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à
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());
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)
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
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
30/09/2005 Corso Java - Mauro Lorenzutti 22
Serializzazione Perché Concetti base Un po’ di codice Esercizio
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
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
30/09/2005 Corso Java - Mauro Lorenzutti 25
Serializzare su file
FileOutputStream fos = new FileOutputStream(nomefile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(oggetto);
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();
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;
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;
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
top related