Introduzione alla programmazione con linguaggio Java

Introduzione alla
programmazione con linguaggio
Java
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Note di Copyright
Queste trasparenze (slide) sono coperte dalle leggi sul copyright. Testi grafica
e immagini in essa contenuti sono di proprietà dei rispettivi autori:
Dott.
Dott.ssa Emma Calabresu,
Calabresu, Dr. Maurizio Carta, Ing.
Ing. Mauro Ennas,
Ennas,
Ing.
Ing. Stefano Piras e Ing.
Ing. Fabrizio Saba.
Saba.
Tali slide possono essere duplicate e riprodotte dalle scuole di ogni ordine e
grado italiane o estere per applicazioni legate alla didattica e senza finalità
di lucro.
Ogni altra finalità o uso (ivi compresa la duplicazione su supporto magnetico, la
trasmissione, la memorizzazione e la stampa totale o parziale) è vietata senza
autorizzazione scritta da parte degli autori.
Gli autori non si assumono nessuna responsabilità sulle informazioni contenute in
queste slide che sono state realizzate per finalità meramente didattiche e sono
aggiornate alla data riportata in calce.
L’intestazione a piè pagina deve comunque non essere alterata e deve sempre
essere riportata anche in un utilizzo parziale del suddetto materiale.
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Indice del corso
•
•
•
•
•
•
•
Modulo
Modulo
Modulo
Modulo
Modulo
Modulo
Modulo
1: Introduzione
2: Sintassi Java
3: Oggetti e Classi
4: Features
5: Eccezioni
6: GUI
7: Extra
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Modulo 4
Features
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
In questo modulo
•
•
•
•
•
Static e final
Public, private protect
Classi astratte
Interfacce
Wrapper
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili d’istanza
Programmazione Java SDK 2.0
©2004 {Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili d’istanza
Variabili d’istanza
Ogni oggetto ha la sua copia delle variabili d’istanza.
Ciò significa che ogni istanza di una classe avrà in
memoria un suo spazio riservato per le sue variabili
class ExUsoRettangolo
Rettangolo r1 = new Rettangolo();
Rettangolo r2 = new Rettangolo();
r1
class ExUsoRettangolo
double
double
double
double
base;
altezza;
area();
perimetro ()
;
golo()
Rettan
w
e
n
1 =
golo r
Rettan
Rettang
olo r2
= new R
ettango
lo();
Base = 4.1;
Altezza = 3.0;
r2
Base = 5.5;
Altezza = 1.7;
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili d’istanza
Una volta definita una classe Rettangolo, si possono
creare oggetti di tipo Rettangolo e accedere alle loro
variabili e ai loro metodi:
r1.base = 4.1;
r1.altezza = 3.0;
System.out.println(r1.area());
r2.base = 5.5;
r2.base = 1.7;
Fissa i valori
Fissa i valori
Si
Si veda:
veda: ExUsoRettangolo.java
ExUsoRettangolo.java
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili statiche
Variabili dichiarate con la parola static sono condivise
da tutte le istanze di una classe esistenti nello stesso
programma.
Se si cambia il valore di una variabile statica in
un'istanza, essa viene modificata in tutte le altre
istanze.
Questo è un po' pericoloso...
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili static e final
Spesso le veriabili static sono dichiarate anche final,
cioè “non modificabili”
Convenzione: le variabili “final” sono scritte tutte
maiuscole. Sono quasi sempre pubbliche:
Static double gravity = 9.8;
Static final double PI_GRECO = 3.1415925;
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili static e final
Si
Si veda:
veda: Rettangolo2.java
Rettangolo2.java
ExUsoRettangolo2.java
ExUsoRettangolo2.java
class Rettangolo
double base;
double altezza;
Static double sqrt2 = 1.414;
class Geometria
Rettangolo rett1;
Rettangolo rett2;
rett1
double base = 4.1;
double altezzaa = 3.0;
Static double sqrt2 = 1.414;
rett2
double base = 5.5;
double altezzaa = 1.7;
Static double sqrt2 = 1.414;
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Accesso alle variabili
Una classe può limitare l’accesso alle sue variabili con
alcune parole chiave:
–
–
–
–
Public – accessibile a chiunque all’esterno
Private – inaccessibile a chiunque all’esterno
Protect – (vedremo in seguito il significato)
Nessuna parola chiave – (vedremo in seguito il significato)
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Accesso alle variabili tramite metodi
• Spesso le variabili d'istanza sono private, e si accede ad
esse mediante due tipi di metodi, noti come “set” e “get”
• I metodi “set” servono per fissare il valore di una
variabile d'istanza in un oggetto qualsiasi, i metodi “get”
servono per ispezionarne il valore
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Accesso alle variabili tramite metodi
Per ogni variabile d’istanza come, per esempio:
private int pippo;
Si scrivono, nella classe, i metodi:
void setPippo (int newPippo) {
pippo = newPippo;
}
int getPippo () {
return pippo;
}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Accesso alle variabili tramite metodi
Per esempio, per la classe Rettangolo:
private int base;
Si scrivono, nella classe, i metodi:
void setBase (double b) {
base = b;
}
Double getBase () {
return base;
}
Si
Si veda:
veda: Rettangolo3.java
Rettangolo3.java
ExUsoRettangolo3.java
ExUsoRettangolo3.java
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili locali
Ogni variabile ha il suo “scope”, cioè
il blocco di codice entro il quale essa
è accessibile e che determina
quando la variabile è creata o distrutta
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili locali
La posizione della dichiarazione della variabile dentro il
codice ne stabilisce lo scope e la pone in una delle quattro
categorie:
–
–
–
–
Variabile d’istanza
Variabile locale
Parametro di un metodo
Parametro di una “exception-handler”
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Variabili locali
class MyClass
Memeber
Variabile
Scope
{
…
dichiarazione variabile di membro
…
public void aMethod (method parameters)
Method
Variabile
Scope
{
…
dichiarazione variabile locale
…
Catch (exception handler parametres)
Local
Variabile
Scope
{
…
}
…
Exception-hander
Parameter
Scope
}
…
}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
“shadowing” di variabili
Se una variabile d'istanza e una variabile locale (interna ad
un metodo o parametro di un metodo) hanno lo stesso
nome, la variabile locale nasconde o “ombreggia” il nome
della variabile d'istanza.
class Rettangolo {
double base;
double altezza;
… …
Void setAltezza(double aa) {
double altezza = aa;
}
Viene assegnato il
valore “aa” ad una
variabile locale!
}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
“shadowing” di variabili
class Rettangolo {
double base;
double altezza;
… …
Void setAltezza(double altezza) {
altezza = 2;
}
Viene assegnato il
valore “altezza” al
paramtro del metodo!
}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Metodi astratti
Si può dichiarare un metodo abstract e darne solo la
“signature”, senza il corpo.
Ad esempio:
public abstract void aMethod (String s);
In questo modo si indica il prototipo
del metodo, ma non lo si realizza
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Classi astratte
Ogni classe che contenga uno o più metodi astratti deve
essere dichiarata abstract anch’essa
Ad esempio:
public abstract class aClass {
…
abstract void aMethod (String s);
}
Una classe astratta NON può essere istanziata!
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Classi astratte
Una classe astratta può contenere metodi non astratti;
tuttavia non può essere istanziata
Per usarla, bisogna creare sottoclassi che implementino i
metodi astratti, cioè diano ad essi un corpo
Finchè, col “subclassing”, non sono stati implementati tutti i
metodi astratti, anche le sottoclassi sono astratte e non
possono essere istanziate
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Classi astratte
Le classi astratte sono utilissime!
Forniscono una struttura alle classi che riempiranno i
metodi.
Es.: la classe java.io.InputStream ha un metodo astratto:
public abstract int read();
Le sue sottoclassi implementano read() a modo loro,
leggendo in modo diverso dalle sorgenti.
Il resto della classe ImputStream, d’altra parte, fornisce
funzionalità basate sul metodo read().
Ogni sottoclasse di ImputStream eredita queste funzionalità
e implementa read().
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Interfacce
Sono classi contenenti SOLO metodi astratti: sono il caso
estremo delle classi astratte
Si costruiscono come segue:
public interface MyInterface {
abstract double method1 (String s);
abstract void method2 (int k);
}
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Interfacce
Le interfacce si utilizzano in modo diverso delle classi
astratte: ogni classe che voglia implementare uno o più
metodi di un’interfaccia deve dichiararlo nel modo
seguente:
class MyClass implements MyInterface { … }
Se una classe non implementa tutti i metodi astratti di
un’interfaccia, deve essere dichiarata abstract, e non può
essere istanziata.
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Interfacce
• Le interfacce sono uno strumento potentissimo nella
programmazione object oriented. Definiscono un minimo
standard di comportamento cui una classe deve attenersi
per eseguire certi compiuti.
• Sono come classi: si possono dichiarare variabili il cui
tipo sia un’interfaccia, e i metodi possono accettare in
input e restituire variabili di questo tipo. Ciò è molto
importante: significa che oggetti di qualunque classe
implementi quella interfaccia vanno bene.
• Massimizzano la riutilizzabilità dei codici …
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Ereditarietà
Interfacce
Esempi che mostrano come le interfacce massimizzino la
riutilizzabilità di un codice, localizzando in pochi punti le
modifiche necessarie per la riutilizzazione.
ExInterfaccia1.java, ObjReusable.java,
IPersona.java e ILibro.java
ExInterfaccia2.java, ObjFactory.java,
ObjReusable.java e ILibro.java
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Ereditarietà
Wrapper class
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Ereditarietà
Conclusioni
Abbiamo visto:
• Cosa sono le classi astratte e come possono essere
utilizzate
• Le
interfacce,
uno
strumento
programmazione object oriented
potente
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
della
Ereditarietà
Richiami e suggerimenti
Importante:
• Comprendere bene la potenza delle interfacce per lo
sviluppo di programmi object oriented
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }
Grazie per l’attenzione – Domande?
©2004 { Dott.ssa E. Calabresu, Dr. M. Carta, Ing. M. Ennas, Ing. S. Piras, Ing. F. Saba }