Académique Documents
Professionnel Documents
Culture Documents
Istruzioni di controllo
Andrea Bei
andrea.bei@dis.uniroma1.it
Istruzioni di iterazione
while
do-while
for
Istruzioni di salto
break
continue
return
Programmazione OO in Java - Andrea Bei
Istruzione di selezione: IF - 1
Sintassi:
if(<condizione>) <istruzione_1>
[else <istruzione_2>]
<istruzione_1> e <istruzione_2> possono essere istruzioni
singole o blocchi
Semantica:
Se <condizione>=true viene eseguita listruzione o il blocco
di istruzioni <istruzione_1> [ altrimenti viene eseguita
listruzione o il blocco di istruzioni <istruzione_2> ]
Istruzione di selezione: IF 2
Esempio 1:
if (x==10) System.out.println(il valore di x 10);
Esempio 2:
if (x>0 && y>0)System.out.println (coordinate positive);
else if (x>0) System.out.println(ascissa positiva);
else if (y>0) System.out.println(ordinata positiva);
else System.out.println(coordinate nulle o negative);
Esempio 3:
if (x==10) {
System.out.println(il valore di x 10);
System.out.println(...sono ancora nel blocco if);
}
System.out.println(...sono fuori dal blocco if)
Programmazione OO in Java - Andrea Bei
Istruzione di selezione: IF 3
Esempio 4:
switch(<espressione>){
case <costante 1>:[<istruzione 1>;]*
case < costante 2>:[<istruzione 2>;]*
Semantica:
Se <espressione>=<costante i> vengono eseguite le
listruzioni/blocchi <istruzione j> con j>=i . Se
<espressione> divers da tutte le costanti viene
eseguita listruzione <istruzioneDefault>
Semantica:
Finch <condizione>=true viene eseguita
listruzione/blocco <istruzione>
Esempio:
int i = 0;
while (i<10){
System.out.println(Il valore di i e: +i);
i=i+1;
}
Programmazione OO in Java - Andrea Bei
Semantica:
Viene eseguita listruzione/blocco <istruzione> finch
<condizione>=true. A differenza del while-do in questo
caso listruzione/blocco viene sempre eseguita almeno
una volta.
Esempio:
int r = 5;
do{
System.out.println(Countdown=+r);
r--;
} while (r>0)
Programmazione OO in Java - Andrea Bei
Semantica:
<istr1>;
while (<condiz>){
<istr3>
<istr2>
}
Programmazione OO in Java - Andrea Bei
int x;
for(x=0; x<10; x++)
System.out.println(Counter: +x);
Esempio 2:
Esempio 3:
Programmazione OO in Java
Collezioni
Andrea Bei
andrea.bei@dis.uniroma1.it
Collezioni
Una collezione un oggetto contenitore di altri
oggetti
La necessit di strutture dati che raggruppino oggetti
comune a molte applicazioni.
Es: mail folder (collezione di mail) , rubriche (collezione
di associazioni nome-numero di telefono) ...
Le collezioni in Java
Liste
Mantengono un ordinamento
Hanno posizioni indicizzate
Possono avere diverse politiche di accesso (es:LIFO,FIFO)
Insiemi
Non ammettono duplicati
Mappe
Gestiscono un insieme di coppie (chiave,valore) e
consentono laccesso diretto del valore a partire dalla
chiave
Mappe: interfacce
ArrayList
limplementazione pi usata
conviene se si hanno
prevalentemente accessi posizionali
agli elementi (tempo costante)
LinkedList
conviene se si hanno
prevalentemente inserimenti in testa
e cancellazioni al centro (tempo
costante)
HashSet
limplementazione pi usata
conviene se si hanno
prevalentemente accessi diretti agli
elementi (tempo costante)
TreeSet
conviene se si ha necessit di
mantenere un ordinamento (tempo
logaritmico rispetto agli elementi)
Mappe: implementazione
HashMap
limplementazione pi usata
conviene se si hanno accessi
diretti agli elementi
tempo di accesso costante
TreeMap
conviene se si ha necessit di
mantenere un ordinamento tra gli
elementi
tempo di accesso logaritmico
Iteratori
Un iteratore fornisce metodi per eseguire una visita degli
elementi di una collezione (iterare sugli elementi)
Linterfaccia Iterator fornisce i seguenti metodi
Object next(): si posiziona sullelemento successivo e lo restituisce
boolean hasNext(): restituisce true se il esiste successivo
elemento
void remove(): rimuove lattuale elemento
ArrayList: esempio
Notare:
1) La variabile l di tipo Collection NON ArrayList (riga 4 di MainClass). I
riferimenti a collezioni dovrebbero essere sempre del tipo di una delle
interfacce del framework. Evitare sempre luso delle classi concrete come tipi
per le variabili.
2) Il metodo printSommeEConcat polimorfo ha come parametro
Collection e pu funzionare per tutti i sottotipi di Collection
Programmazione OO in Java - Andrea Bei
java.util.StringTokenizer
permette di dividere una stringa
nelle parole (token) che la
costituiscono.
Il metodo nextToken restituisce
il token successivo.
Algoritmi
La classe Collections fornisce metodi statici che
impementano algoritmi di utilit. I principali sono:
Sorting: ordina gli elementi di una lista
static void sort(List list)
Min e Max:
static Object min(Collection coll)
static Object max(Collection coll)
Programmazione OO in Java - Andrea Bei
Relazioni dordine
Alcuni metodi (es: sorting, min e max, e searching) si basano sull
esistenza di una relazione dordine tra gli oggetti della lista. In altre
parole: dati due oggetti A e B della lista deve essere possibile stabilire
quali delle relazioni A>B;A=B;A<B sia vera.
Lesistenza di una relazione dordine tra gli oggetti di una classe
rappresentata dallimplementazione dell interfaccia Comparable
Elaborazione
Concetti OO e Modello di
Progetto
Andrea Bei
andrea.bei@dis.uniroma1.it
Concetti OO
Classe
Rappresenta una classe di oggetti aventi le stesse caratteristiche
strutturali e comportamentali
Es.: la classe Automobile rappresenta la classe degli oggetti che hanno
4 ruote, un motore, una marca, un modello (caratteristiche strutturali) e
che possono accelerare, frenare, sterzare, fare retromarcia, fare
rifornimento (caratteristiche comportamentali)
Oggetto
Un entit appartenente ad una classe.
Es.: Alfa 147, Ford ka, Fiat Punto, sono oggetti della classe
Automobile
Attributi
Definiscono le caratteristiche strutturali di una classe.
Es: attributi della classe Automobile possono essere: motore, ruote,
marca e modello
Operazioni
Definiscono le caratteristiche comportamentali di una classe.
Es: accelera(), frena(), rifornimento(int litri), retromarcia(), sterza(int
gradi)
Programmazione Orientata agli Oggetti - Andrea Bei
Classi e oggetti
Nome della classe
Classe Libro
copieVendute:
copieDisponibili=copieDisponibili-numeroCopie
Nome oggetto:
Classe
Valore degli
attributi
per il particolare
oggetto della
classe
L1,L2,L3: Oggetti o
instanze della
classe Libro
Programmazione Orientata agli Oggetti - Andrea Bei
Notazione UML
Notazione UML
Varie possibilit di scelta a seconda del livello di dettaglio del
diagramma
Oggetto
Oggetto
nominato
anonimo
Oggetto con
stato visibile
Interfacce
Definizione
una interfaccia una specifica di comportamento: una classe che
implementa una interfaccia fornisce una possibile realizzazione della
specifica
una interfaccia definita da un insieme di operazioni astratte.
la relazione che lega una interfaccia alla classe che la implementa si
chiama realizzazione
una interfaccia pu ereditare operazioni da unaltra interfaccia
Notazione UML
Realizzazione
La classe Elicottero
implementa linterfaccia
IVolante in quanto
implementa tutte le sue
operazioni (in questo caso
vaiA)
Window1
Timer
Notazione
a socket
socket line notation
Window1 usa linterfaccia
Timer
Window1 uses the Timer
E
una interfaccia richiesta
interface
it has a required interface
Notazione
di dipendenza
dependency
line notation
Window2 ha una dipendenza con
linterfaccia
Timer
quando collabora
Window2 has
a dependency
on the
conTimer
loggetto
Clock2
interface
when it collaborates
with a Clock2 object
interface
Timer
Clock2
...
getTime()
Clock1
...
getTime()
...
Timer
Window2
Timer
Window3
getTime()
...
Clock1
Clock1
implementa
implements and
linterfaccia
Timer.
provides
the
Timer
una
Timer interface
interfaccia
fornita
da Clock1
Clock3
...
getTime()
...
La notazione
lollipop
indica
che Clock3
lollipop
notationa indicates
Clock3
implements
fornisce
linterfaccia
Timer.
and provides the Timer interface to clients
Timer una interfaccia fornita
Notazione a socket
Window3
hanotation
una dipendenza con
socket line
linterfaccia Timer quando collabora
con
loggetto
Clock3
Window3
has a
dependency on the
Principi OO
Incapsulamento.
E la capacit di una classe di incapsulare insieme dati e operazioni sui
dati
Information Hiding
nascondere attributi e operazioni che rappresentano limplementazione.
mostrare solo le operazioni che devono essere visibili dagli altri oggetti.
Ereditariet
E la possibilit di derivare una classe da una classe esistente ereditando
da questultima attributi e operazioni.
La classe derivata detta sottoclasse, la classe esistente superclasse.
La sottoclasse pu definire nuovi attributi e operazioni e ridefinire attributi
e operazioni della superclasse sovrascrivendoli (Overriding)
Polimorfismo
Dal greco pluralit di forme: la capacit di una cosa di assumere forme
diverse a seconda del contesto.
Nei linguaggi OO i tipi di polimorfismo sono 4: ad-hoc
(coercion,overloading) e universale (per inclusione, parametrico)
In Java ci si riferisce principalmente alla possibilit per una variabile di
contenere valori di tipi
diversi e per una operazione di eseguire
8
Programmazione Orientata agli Oggetti - Andrea Bei
implementazioni diverse a seconda del contesto (polimorfismo universale
Progettazione a oggetti
Approcci alla progettazione OO:
Si progetta mentre si codifica
10
asincrono
sincrono
11
myB : B
doOne
Una possibile
implementazione della
classe A in Java
public class A {
doTwo
private B myB;
doThree
Diagrammi di comunicazione
doOne
:A
public A(){
myB=new B();
}
public doOne(){
myB.doTwo();
myB.doThree();
}
}
1: doTwo
2: doThree
myB : B
12
: Sale
makePayment(cashTendered)
makePayment(cashTendered)
create(cashTendered)
Sequenza
: Payment
direction of message
Comunicazione
makePayment(cashTendered)
:Register
1: makePayment(cashTendered)
:Sale
1.1: create(cashTendered)
:Payment
13
Notazione partecipanti
Istanza anonima della classe
lifeline box representing an
Sale
:Sale
named instance
Istanza
di una
metaclasse
lifeline box
representing
the(Font
class
una
istanza
della
classe
Class)
Font, or more precisely, that Font is
metaclass
Font
s1 : Sale
Istanza
di una
classe ArrayList
lifeline box
representing
an
parametrizzata
per contenere
instance of an ArrayList
class,
oggetti
di tipo Sale
parameterized
(templatized) to
sales:
ArrayList<Sale>
sales[ i ] : Sale
x : List
Esempio
related
correlato
example
14
: Sale
doX
doA
Un messaggio trovato: si
a found
message in cui
chiama cos
un messaggio
whoseilsender
will not da
viene omesso
partecipante
be
specified
cui generato
Specifica di esecuzione:
rappresenta lintervallo di tempo in
cui il partecipante (in questo caso
specification
una istanza execution
di Register)
ha il
bar indicates focus of
controllo
control
doB
doC
doD
Un messaggio sincrono: E un
messaggio mostrato con una
typicalpiena.
sychronous message
freccia
15
: Sale
doX
d1 = getDate
Valori di ritorno:
si pu etichettare il messaggio con
var=nomeMessaggio(parametro)
Si pu usare una freccia di ritorno
tratteggiata etichettata con il valore
di ritorno
getDate
aDate
: Register
doX
clear
16
Loggetto
creato
note that newly created
mostrato
alla
stessa
objects are placed
at their
altezza
del
messaggio
di
creation "height"
creazionev
: Sale
makePayment(cashTendered)
create(cashTendered)
: Payment
authorize
: Sale
create(cashTendered)
: Payment
...
destroy
17
Notazione - Frame
:A
:B
makeNewSale
Ciclo con un
espressione di
guardia
a UML loop
booleana
frame, with a
loop
[ more items ]
enterItem(itemID, quantity)
boolean guard
expression
description, total
endSale
Condizione con
UML 2.0
: Foo
opt
Condizione con
UML 1.0
: Bar
: Foo
: Bar
xx
xx
calculate
yy
yy
[ color = red ]
18
Notazione Frame
Messaggi
condizionali
mutuamente esclusivi
(if .. then .. else)
:A
:B
:C
doX
alt
[ x < 10 ]
calculate
Iterazione su una
collezione
[ else ]
calculate
lineItems[i] :
SalesLineItem
: Sale
t = getTotal
loop
[ i < lineItems.size ]
st = getSubtotal
i++
Una istanza di
This lifeline box represents one
SalesLineItem
della
instance from a collection of many
collezione
il
SalesLineItem lineItems.
objects.
valore di i coincide con
lineItems[i]
is theguardia
expressiondel
to
quello
della
select one element from the
frame
loop
collection of many
SalesLineItems; the i value
refers to the same i in the guard
in the LOOP frame
an action
box may
contain arbitrary
language
Una
casella
di azione
pu permettere
statements (in this case, incrementing i)
di esplicitare una o pi operazioni in
un
linguaggio
it isqualsiasi
placed over the
lifeline to which it applies
Programmazione Orientata agli Oggetti - Andrea Bei
19
authorize() {abstract}
...
CreditPayment
DebitPayment
authorize()
...
authorize()
...
Messaggio
polimorfo
polymorphic message
:Register
:Payment {abstract}
doX
authorize
:DebitPayment
:Foo
authorize
Oggetto
suo ruolo di
object in rolenel
of abstract
superclass
classe
astratta
stop
at this point
dont show any
scambio
di messaggi
perch
further details for this message
:CreditPayment
:Bar
authorize
doA
doX
doB
Il seguito
interazione
dipende
dalla
classe concreta sottoclasse
separatedella
diagrams
for each polymorphic
concrete
case
di Payment. Si rappresentano tutti i casi possibili (in questo caso 2)
20
DebitPayment
CreditPayment
Programmazione eOrientata
agli Oggetti - Andrea Bei
Diagrammi di comunicazione
1: makePayment(cashTendered)
2: foo
: Register
:Sale
2.1: bar
Link
link line
msg1
1: msg2
2: msg3
3: msg4
: Register
:Sale
3.1: msg5
21
Notazione - Creazione
3 modi per mostrare la creazione di
una nuova
un diagramma
Three
waysistanza
to showin
creation
in a
di comunicazione
communication
diagram
1: create(cashier)
: Register
:Sale
1: create(cashier)
: Register
: Register
:Sale {new}
create
1: make(cashier)
:Sale
22
1: msg2
:A
:B
1.1: msg3
Primo
first
:C
Secondo
second
Terzo
third
msg1
:A
1: msg2
:B
1.1: msg3
2.1: msg5
2: msg4
:C
Quinto
Quarto
fourth
fifth
2.2: msg6
Sesto
sixth
Programmazione Orientata agli Oggetti - Andrea Bei
:D
23
message1
1 [ color = red ] : calculate
: Foo
Messaggio inviato
unconditionaldopo
after 1
comunque
either msg2 or msg4
o 1b
:E
: Bar
1a e 1b sono messaggi
1a and 1b are mutually
mutuamente
esclusivi
exclusive conditional
paths
2: msg6
1a [test1] : msg2
msg1
:A
:B
:D
1b.1: msg5
1a.1: msg3
:C
24
runSimulation
: Simulator
: Random
25
doX
:Register
authorize
authorize
:DebitPayment
:Payment {abstract}
authorize
doA
doB
:Foo
:CreditPayment
doX
:Bar
26
Sezioni: 3 com m on
com partm ents
Nome della
classe
Attributi 1 . cla ssifie r n am e
Operazioni
2 . attribu tes
3 . op eration s
Un interfaccia
mostrata
an interface
sho w n w ith a
con lo stereotipo
keyw ord
<<interface>>
interface
R unn ab le
ru n()
E possibile
officially
in U M L, specificare
the top form at isil
use
d
to
distingu
ish
th e packa ge
path della classe
nam e from the class na m e
completo dei package in
uno
the
second
altern ative
cuifficially,
questa
contenuta
is com m on
Dipendenza
F ru it
dependency
...
...
Implementazione
di
interfa ce
im
ple
m
en
tation
interfaccia (linea
and
tratteggiata)
e eredita
su bcla ssin g
(subclassing) da una
superclasse (linea
continua)
S ubclassF oo
P urchaseO rder
1
...
ru n()
...
order
a sso ciatio n w ith
Associazione
m ultiplicities
con
molteplicit
...
...
27
28
Associazione
Notazione UML
Semantica
Modella una relazione di connessione strutturale tra classi:Un
oggetto della classe A ha un riferimento ad uno o pi oggetti della
classe B
Lassociazione la pi generale delle relazioni e semanticamente
la pi debole. Specifica solamente il fatto che esiste una
connessione tra le classi ma non esprime il tipo di connessione.
Composizione e Aggregazione sono tipi particolari di
associazione. Sono semanticamente pi forti in quanto descrivono
meglio la realt specificando il tipo di associazione.
Quando il grado di conoscenza della realt che si sta modellando
lo consente consigliabile usare una relazione semanticamente
pi forte. Si ottiene un modello con pi alto potere espressivo
Programmazione Orientata agli Oggetti - Andrea Bei
29
Associazione: notazioni
Si inserisce un attributo
using
attribute
di tipo
Salethe
per
indicare
text
notation
to
che Register ha un
indicatead
Register
riferimento
una has
a reference
to one
istanza
di tipo Sale
Salesono
instance
Le classi
associate
ma visualmente separate
Si traccia una linea di
associazione tra Register e
OBSERVE: this style
Sale. Le classi sono
visually emphasizes
visualmente connesse da
the connection
una associazione. Questo
between these classes
rende immediatamente
leggibile lassociazione
La forma pi completa
prevede insieme
entrambe le forme
thorough
and
precedenti
unambiguous,
but some
attributo + link
people
dislike
the
Vantaggio:
chiarezza
possible
redundancy
Svantaggio:
ridondanza
di informazione
Sale
Register
currentSale : Sale
...
...
...
Register
Sale
1
...
currentSale
...
...
...
Si
usa the
la notazione
per indicare
using
associationassociazione
notation to indicate
che
Register
ha
una
istanza
di
Sale
Register has a reference to one Sale instance
Register
Sale
1
currentSale : Sale
...
currentSale
...
...
30
Associazione: notazioni
Linea Guida
Mostrare
gli attributi
di tipi
applying
the guideline
di dato semplici (interi,
to show attributes as
testo, float, ..) come
attribute
text gli
versus
attributi
mentre
quelliasdi
tipoassociation
classe comelines
associazioni
Register
Sale
1
id: Int
currentSale
...
Register ha 3 attributi:
has THREE attributes:
1. Register
Id
2. 1. currentSale
id
3. 2. location
currentSale
3. location
time: DateTime
...
Store
1
location
address: Address
phone: PhoneNumber
...
31
Dipendenza
Notazione UML
Classe cliente
Classe fornitore
Semantica
Modella una relazione di dipendenza
32
Dipendenza
33
Nome
Esprime il significato
della associazione
Ruolo
Il ruolo che ha la classe nella
associazione.
In questo caso la Persona
assume il ruolo di Impiegato
nellassociazione Lavora Per
34
Generalizzazione (Ereditariet)
Notazione UML
Superclasse
Sottoclasse
Semantica
E una relazione tassonomica tra un classificatore pi generale
(superclasse) e un classificatore pi specifico (sottoclasse)
Ogni istanza della sottoclasse anche una istanza della superclasse
La sottoclasse possiede indirettamente le caratteristiche strutturali
(attributi) e comportamentali (operazioni) della superclasse (in
relazione alle regole di visibilit)
Una generalizzazione in un DCD nei linguaggi OO si realizza con
lereditariet (B eredita da A)
B di tipo A (is-a, is-a-kind-of)
B ha i propri attributi e metodi + gli attributi e operazioni ereditati da A
(con visibilit public,protected)
Programmazione Orientata agli Oggetti - Andrea Bei
35
Generalizzazione (Ereditariet)
Esempio
36
Le operazioni
astratte sono
implementate in
sottoclassi
concrete
37
Composizione
Notazione UML
Classe composta
Classe parte
Semantica
Modella una relazione di composizione di una o pi parti: un
oggetto della classe A composto da uno o pi oggetti della
classe B. B parte di A (relazione whole-part)
Un oggetto della classe B esiste solo fino a quando esiste un
oggetto della classe A di cui una parte
La responsabilit della creazione di un oggetto della classe B
interamente devoluta ad un oggetto della classe A
La classe componente (B) pu avere una sola relazione di
composizione nel ruolo di componente. La classe B non pu
essere la classe componente di unaltra classe oltre la A
Programmazione Orientata agli Oggetti - Andrea Bei
39
Aggregazione
Notazione UML
Classe parte
Classe aggregata
Semantica
Modella una relazione di aggregazione di una o pi parti: un
oggetto della classe A aggrega uno o pi oggetti della classe B
Laggregazione un vincolo pi debole della composizione
Oggetti della classe A mantengono riferimenti di oggetti della
classe B ma gli oggetti della classe B esistono
indipendentemente dagli oggetti della classe A.
La vita di un oggetto della classe B indipendente da quella di
un oggetto della classe A
Programmazione Orientata agli Oggetti - Andrea Bei
40
Aggregazione
Class Diagram
Object Diagram
41
42
Note e Stereotipi
Note
E possibile fornire informazioni su un elemento di un diagramma
mediante una Nota. La Nota a tutti gli effetti un elemento del
linguaggio UML.
Stereotipi
E un nuovo elemento visuale derivato da uno esistente ma specifico
per la propria realt di interesse
Pu essere una icona o un nome tra parentesi angolate (<<nome>>)
Es: in Java ci sono delle classi di tipo Exception la cui specificit duso
ne giustifica la rappresentazione con un simbolo distinto da quello di
classe.
43
Programmazione OO in Java
Andrea Bei
andrea.bei@dis.uniroma1.it
Caratteristiche OO di Java
Classi
Oggetti
Interfacce
Ereditariet
Incapsulamento, Information Hiding, Polimorfismo
Packages
Programmazione OO in Java - Andrea Bei
Programmare OO in Java
Programmare in Java significa:
1.
2.
3.
Osservazioni:
In Java tutto un oggetto tranne i tipi di dato
predefiniti (int, char, ecc.)
Le classi sono raggruppate in package
Molti package sono gi disponibili
Programmazione OO in Java - Andrea Bei
Classi
class <nome_classe>
{
<definizioni di attributi>
<definizioni di metodi>
}
sintassi minimale
un tipo di dato
un insieme di operazioni sul tipo di dato
limplementazione delle operazioni: i metodi
Esempio:
class Serbatoio{
Attributi
Gli attributi di una classe definiscono la struttura
dello stato degli oggetti della classe
Sintassi: ogni attributo definito usando la stessa
sintassi usata per la definizione delle variabili locali
Esempio:
class Serbatoio
{
int livello;
Metodi
<tipoRitornato> <nomeMetodo> ([<parametri>])
{
<body>
}
sintassi minimale
Esempio:
Costruttori
I costruttori sono metodi particolari che hanno lo
stesso nome della classe
I costruttori di una stessa classe si distinguono per
numero, posizione o tipo dei parametri
Nei costruttori non deve essere indicato il tipo ritornato
Oggetti
Gli oggetti sono creati attraverso loperatore new.
Sintassi
new <nome classe>(<parametri costruttore>);
Semantica
Viene allocato lo spazio per il nuovo oggetto
Viene creato un oggetto della classe <nome classe> tramite il
costruttore che ha come argomenti: <parametri costruttore>
Viene ritornato un riferimento alloggetto
null
String s;
s
String(Hallo)
(1)
(2)
Programmazione OO in Java - Andrea Bei
Esempio
...
int liv;
Serbatoio s = new Serbatoio();
liv = s.getLivello();
System.out.println(liv);
Programmazione OO in Java - Andrea Bei
s1
Serbatoio()
{livello=10}
S1=S;
s1
Serbatoio()
{livello=20}
Serbatoio()
{livello=15}
null
s
Serbatoio()
{livello=10}
S1.rifornimento(10);
s1
s
S.consumo(5);
s1
null
S = new Serbatoio();
null
s1
S=null;
null
Programmazione OO in Java - Andrea Bei
Serbatoio()
{livello=15}
s1
Distruzione di oggetti
Java non supporta "distruttori" espliciti: gli oggetti che non
hanno pi riferimenti vengono eliminati automaticamente
e la memoria che questi occupano viene liberata
String s;
s = new String ("abc");
s = "def";
// dichiarazione
// creazione: s punta a "abc
// "abc" non pi puntata da s
Finalizzatori di oggetti
Per un oggetto potrebbero essere previste delle
operazioni da effettuare prima della definitiva
eliminazione (per esempio la chiusura di file aperti)
Prima di procedere alla eliminazione di un oggetto il GC
invoca il metodo delloggetto chiamato finalize,
definibile dall utente
void finalize ()
{ close (); }
Parametri
Sintassi
<parametri>=<tipo> <nomePar>[,<tipo> <nomePar>]
Esempio:
int distanza(int x1,int y1,int x2,int y2)
int a=5;
Prova obj=new Prova();
int b=obj.somma(4,a);
parametri formali
Programmazione OO in Java - Andrea Bei
parametri attuali
Parametri
I parametri sono passati per valore: quando il
metodo viene invocato, al parametro formale
assegnata una copia del valore del corrispondente
parametro attuale.
Per i parametri il cui tipo sia uno dei tipi semplici
Una modifica del valore del parametro formale non
comporta una modifica del valore del parametro attuale.
Parametri: esempio
tipi semplici
class Robot {
x=20;
}
class Robot {
void muoviti(Punto p} {
p.x=20;
}
}
Programmazione OO in Java - Andrea Bei
{
int x=0;
System.out.println(x); //stampa 0
}
System.out.println(x); //errore: x non visibile da qui
Il riferimento this
Il riferimento this implicitamente presente
in ogni oggetto e punta alloggetto stesso
Permette di usare lo stesso nome per
attributi e parametri. Es:
class Serbatoio {
int livello;
// attributo
Overloading
Allinterno di una classe ci possono essere pi metodi con lo
stesso nome, purch si possano distinguere per numero,
posizione o tipo dei parametri (il solo tipo di ritorno non
basta)
Es:
class Esempio {
...
public int somma(int a, int b){ ... };
//OK
public double somma(double a, double b){ ... }; //OK
public int somma(double a, double b) { ... };
//errore
...
}
Attributi costanti
Sintassi
Esempio:
class Colori {
public static final int GIALLO = 0, ROSSO = 1,
Programmazione OO in Java
Andrea Bei
andrea.bei@dis.uniroma1.it
class B extends A
{
Sottoclasse
//definizione attributi
//definizione metodi
}
Metodi final
Sintassi
final
<tipoRitornato><nomeMetodo> ([<parametri>])
{
<body>
}
Semantica
i metodi final non possono essere ridefiniti dalle sottoclassi. Per tali
metodi vietato loverriding
Esempio:
class Colori {
public static final int getColoreSfondo(...)}
Classi final
Sintassi
final class NomeClasse [extends NomeSuperClasse]
{CorpoClasse}
Semantica
Le classi final non possono essere ereditate. Non possono avere
sottoclassi
Esempio:
final class Colori {
...}
Il riferimento super
Il riferimento super viene usato per riferirsi alla
superclasse
Per riferirsi a variabili, metodi o costruttori della superclasse
(anche quelli sovrascritti dalla sottoclasse)
Spesso si invoca il costruttore della superclasse dal
costruttore della sottoclasse.
Sintassi:
Invocazione di un metodo della superclasse
super.<nomeMetodo>(<listaParamAttuali>);
Ereditariet e costruttori
I costruttori non vengono ereditati
Allinterno di un costruttore possibile richiamare il
costruttore della superclasse tramite listruzione
super(<listaParametriAttuali>)
La classe Object
Tutte le classi discendono dalla classe Object
Se una classe non eredita esplicitamente da una
superclasse allora eredita implicitamente dalla classe
Object
La classe Object fornisce i seguenti metodi:
boolean equals(Object);: true se due riferimenti sono
alias
String toString();: restituisce una stringa di caratteri
contenente il nome della classe e un valore che
identifica loggetto univocamente
Ereditariet: un esempio
Classi Astratte
abstract class <nome_classe {
//definizione attributi
//definizione costruttori e metodi
//definizione metodi astratti
}
Classi Astratte
Interfacce: definizione
interface Int {
//definizione operazioni
}
// iconizza
Interfacce: implementazione
class A implements Int1,Int2,, IntN
{
//definizione attributi
//implementazione metodi di Int1,Int2, IntN
//implementazione altri metodi di A
}
Interfacce: uso
Le interfacce consentono la separazione tra operazioni (specifiche di
comportamento) e metodi (implementazione)
Programmazione OO in Java
Java: Incapsulamento,
Information Hiding,
Polimorfismo
Andrea Bei
andrea.bei@dis.uniroma1.it
Information Hiding
Nascondere i dettagli implementativi agli utenti della
classe.
Evitare che gli utenti abbiano la necessit di conoscere
come una classe implementata al fine di poterla usare.
<modificatore>[static][final]<tipo><identificatore>[=<valore>]
[,<identificatore>[=<valore>]]
<modificatore>
public
protected
Descrizione
accessibile ai metodi della classe in cui usato
accessibile ai metodi di altre classi
accessibile ai metodi della classe in cui usato
accessibile ai metodi delle sottoclassi della classe in cui usato
accessibile ai metodi di classi dello stesso package della classe in
cui usato
accessibile ai metodi della classe in cui usato
accessibile ai metodi di classi dello stesso package della classe in
cui usato
private
Information Hiding
Non esporre i dati
Dichiarare privati tutti gli attributi e usare metodi getter e setter
Incapsulamento:
i dati (x e y) e le operazioni sui
dati (distanza(..)) ora sono nella
stessa classe Punto.
N.B.
La funzione distanza ora ha un solo
argomento. Laltro argomento
loggetto stesso su cui invocato il
metodo.
No Information Hiding
Uno dei limiti limpossibilit di
controllare che il valore
assegnato a x e y sia compreso in
un certo intervallo.
Es: supponiamo di voler gestire uno
spazio bidimensionale circolare in
cui x sia in [0,100] e y sia in
[0,100] e x=105 venga trasformato
in x=5
Fig.1
Fig.2
Variabile
rif
Oggetto A
Classe A
Classe B
Classe C
Programmazione OO in Java - Andrea Bei
ERRORE
Il metodo ripara ha un
parametro polimorfo di tipo
VeicoloAMotore.
Il parametro assume i
sottotipi Scooter e
Automobile.
Programmazione OO in Java - Andrea Bei
Se il parametro m di tipo
VeicoloAMotore punta ad un oggetto
di tipo Automobile (test a riga 9)
posso effettuare il casting per
ottenere un riferimento di tipo
Automobile (riga 10) e poter
invocare il metodo retromarcia (riga
11)
Programmazione OO in Java - Andrea Bei
2.
Caratteristiche
Bassa estendibilit: Se aggiungo un altro
formato (es:MIDI) devo modificare la classe
MediaPlayer per inserire il metodo play del
nuovo formato (es:playMIDI).
Bassa riusabilit (interna e esterna)
1. Non uso ereditariet: Alcuni attributi e metodi
sono identici nei formati audio (es:
titolo,durata,stream). Se in futuro dovr
aggiungere un formato dovr riscrivere da
zero anche i metodi e gli attributi comuni
2. Non uso lincapsulamento: Ho i dati
(stream) e le operazioni sui dati (play) in
classi diverse. Non posso riusare MP3 in un
altra applicazione mi mancherebbero le
operazioni
1.
2.
Caratteristiche
Media estendibilit: Se aggiungo un altro
formato audio (es:MIDI) non devo modificare la
classe MediaPlayer. Mi basta aggiungere una
classe MIDI che eredita dalla classe AudioMedia e
implementa il metodo play e tutto funziona
correttamente. Ma se voglio aggiungere un
formato Video ? Il problema che uso la classe
astratta per due funzioni contemporaneamente:
riuso (ereditariet) e estendibilit (polimorfismo)
Alta riusabilit (interna e esterna)
1. Esterna: Ogni classe formato riusabile
perche completa (dati e operazioni)
2. Interna: Riuso attributi e operazioni comuni
(ereditariet)
Programmazione OO in Java
Java: Package
Andrea Bei
andrea.bei@dis.uniroma1.it
Package: definizione
Contenitori di classi e interfacce organizzati in modo gerarchico
Ad ogni package corrisponde una directory nel file system
Sintassi del percorso completo di una classe o interfaccia:
<package 1>.<package 2><package N>.<Classe/Interf.>
UML
Package: uso
Per usare una classe di un package (2 alternative):
specificare ogni volta il percorso completo
Altamente sconsigliata (dispendiosa, bassa manutenibilit)
importare la classe e usare il nome della classe
sintassi (per una classe):
import <package 1>.<package 2> <nomeClasse>;
Package: dichiarazione
Il package a cui una classe appartiene specificato nella
prima istruzione del file sorgente in cui definita la classe
Sintassi:
package pkg1[.pkg2][.pkgN];
Listruzione package va inserita prima delle istruzioni import
Esempio:
BlueJ aggiunge
automaticamente
listruzione
package in base al
package da cui si
crea la classe
Package: visibilit
Da un programma sono visibili solo i package
la cui directory base specificata nel classpath
SET CLASSPATH=;c:\MyPackages;
la cui directory base aggiunta come libreria (IDE)
Modificatore
abstract: tra i vari metodi, deve contenerne almeno uno
astratto, ma non pu contenere metodi privati o statici; deve
dare origine a sottoclassi; non pu essere istanziata
final: termina una catena di classi-sottoclassi, non pu dare
origine a ulteriori sottoclassi
public: pu essere usata da altre classi nel package che ne
contiene la dichiarazione senza formalit; disponibile anche in
altri package, purch vi venga importata
synchronizable: tutti i metodi interni sono "sincronizzati
Programmazione OO in Java - Andrea Bei
Modificatore
public: visibile dalle classi di tutti i package
nessun qualificatore: visibile solo nel package in cui
definita
InterfaceBody
dichiarazione dei metodi (sono implicitamente abstract )
dichiarazione delle costanti (sono implicitamente final,
static e public)
Programmazione OO in Java - Andrea Bei
Programmazione OO in Java
Stringhe
Andrea Bei
andrea.bei@dis.uniroma1.it
StringBuffer
Un oggetto di tipo StringBuffer una stringa variabile
nel contenuto e nella dimensione.
Meno economico di String.
Programmazione OO in Java - Andrea Bei
Implicita:
Quando il compilatore incontra una serie di
caratteri delimitati da virgolette crea un oggetto
di tipo String a cui assegna la stringa
individuata.
Es.
String S = parola;
//equivale a
String S = new String(parola);
Programmazione OO in Java - Andrea Bei
// len == 6
// c ==p
// i == 3
// sub==ro
Es:
Corso Java
Wrapper
Andrea Bei
andrea.bei@dis.uniroma1.it
Le classi wrapper
Le classi wrapper
sono classi involucro per i tipi atomici
servono per poter trattare come oggetti i tipi atomici.
Sono necessarie per poter usare strutture dati per Object
con interi,booleani,float
Esempio
...
Matrix m=new Matrix(3,3);
int num=10;
Integer numObj=new Integer(num);
...
m.set(2,2, numObj);
...
int i=((Integer) m.get(2,2)).intValue();
Programmazione OO in Java - Andrea Bei
num
numObj
char
double
byte
short
float
long
int
Programmazione OO in Java - Andrea Bei
Modello di
implementazione
Andrea Bei
andrea.bei@dis.uniroma1.it
Modello di implementazione
Un Modello di Implementazione costituito
dallinsieme dei sorgenti che implementano un
Modello di Progetto
Linee guida per passare dal modello di progetto
al modello di implementazione
Progettare la visibilit
Creare classi e interfacce dai DCD
Creare metodi dai diagrammi di interazione
Usare collezioni per implementare relazioni uno a
molti tra classi
Seguire un ordine di implementazione guidato
sullaccoppiamento
Programmazione Orientata agli Oggetti - Andrea Bei
Progettare la visibilit
Un oggetto A pu inviare un messaggio
ad un oggetto B solo se questo visibile
ad A
4 tipi di visibilit da A verso B
Per attributo
B un attributo di A
Per parametro
B un parametro di un metodo di A
Locale
B un oggetto locale di un metodo di A
Globale
B visibile globalmente
Programmazione Orientata agli Oggetti - Andrea Bei
enterItem
(itemID, quantity)
: Register
: ProductCatalog
enterItem(id, qty)
:Register
2: makeLineItem(desc, qty)
:Sale
1: desc = getProductDesc(id)
2.1: create(desc, qty)
:Product
Catalog
makeLineItem(ProductDescription desc, int qty)
{
...
sl = new SalesLineItem(desc, qty);
...
}
sl : SalesLineItem
2: makeLineItem(desc, qty)
:Sale
2: desc = getProductDesc(id)
2.1: create(desc, qty)
:Product
Catalog
sl : SalesLineItem
// initializing method (e.g., a Java constructor)
SalesLineItem(ProductDescription desc, int qty)
{
...
description = desc; // parameter to attribute visibility
...
}
Visibilit locale
enterItem(id, qty)
{
...
// local visibility via assignment of returning object
ProductDescription desc = catalog.getProductDes(id);
...
}
enterItem
(itemID, quantity)
: Register
: ProductCatalog
ProductDescription
SalesLineItem
quantity : Integer
getSubtotal() : Money
2: makeLineItem(desc, qty)
1: desc = getProductDesc(id)
:Sale
lineItems :
List<SalesLineItem>
class Register {
...
private ProductCatalog catalog;
public void enterItem(ItemID id,int qty) {
ProductDescription desc=catalog.getProdutDesc(id);
currentSale.makeLineItem(desc,qty);
}
...
Programmazione Orientata agli Oggetti - Andrea Bei
isComplete : Boolean
time : DateTime
becomeComplete()
makeLineItem()
makePayment()
getTtotal()
SalesLineItem
lineItems
1..*
quantity : Integer
getSubtotal()
Le A
classi
collezione sono
collection class is necessary to
necessarie
per mantenere
maintain attribute
visibility to all la
the
visibilit
per
attributo
di
tutte
le
SalesLineItems.
SalesLineItem
10
address : Address
name : Text
ProductCatalog
addSale(...)
1
Acc=0
Acc=1
ProductDescription
...
1..*
getProductDesc(...)
description : Text
price : Money
itemID : ItemID
...
1
Register
Acc=2
Acc=2
Sale
isComplete : Boolean
time : DateTime
...
endSale()
enterItem(...)
makeNewSale()
makePayment(...)
SalesLineItem
becomeComplete()
makeLineItem(...)
makePayment(...)
getTotal()
...
1..*
quantity : Integer
getSubtotal()
Payment
1
1 Acc=0
amount : Money
...
Acc=1
11
2: ProductSpecification ( ProductDescription)
12
4: SalesLineItem
13
14
6: Store
15
Programmazione OO in Java
Andrea Bei
andrea.bei@dis.uniroma1.it
Eccezioni
Uneccezione un evento imprevisto anomalo e
indesiderato che non consente la normale
prosecuzione del programma.
Es: apertura di un file inesistente, divisione per 0, indice di
unarray al di fuori dellintervallo consentito
Eccezioni in Java
Eccezioni in Java
Errori
le sottoclassi di Error rappresentano errori gravi non gestibili dalla
programma e di solito non provocati dal programma ma dalla JVM
es: VirtualMachineError
Eccezioni checked
Tutte le sottoclassi della classe Exception
es: IOException, FileNotFoundException
La gestione delle eccezioni checked obbligatoria
Eccezioni unchecked
Tutte le sottoclassi della classe RuntimeException
es: NullPointerException (obj=null; obj.m1(); )
es: IndexOutOfBoundsException (int a[]=new a[3]; a[5]=0;)
La gestione delle eccezioni unchecked opzionale
La classe Throwable
Definizione:
Un oggetto di tipo Throwable una eccezione (checked o
unchecked) o un errore;
Costruttori:
Throwable()
Throwable(String message)
Metodi principali:
getMessage()
restituisce il messaggio associato alleccezione
printStackTrace(Stream s)
restituisce una fotografia dello stack di esecuzione
sulloggetto stream (PrintWriter o PrintStream)
printStackTrace()
restituisce una fotografia dello stack di esecuzione su
stderr
Programmazione OO in Java - Andrea Bei
generata da un metodo
tramite il costrutto
throw <oggetto Throwable>
Programmazione OO in Java - Andrea Bei
try/catch
il costrutto try / catch costituito da un blocco try e da uno o pi
blocchi catch
Il blocco try contiene il codice che pu generare una o pi tipi di
eccezione
Il blocco catch i-esimo cattura e gestisce le eccezioni della classe
<classe eccezione i>) o sottoclassi di questa (Exception Handler)
Allinterno del blocco catch ci si pu riferire alla eccezione mediante
il riferimento ei
try{
// codice che pu generare leccezione
}catch (<classe eccezione 1> e1) {
// codice che gestisce leccezione e1
}
}catch (<classe eccezione 2> e2) {
// codice che gestisce leccezione e2
}
Programmazione OO in Java - Andrea Bei
try/catch
1
...
try{
s=s+v[k]/m;
...
}catch (ArrayIndexOutOfBoundsException e) {
6.
7.
dellintervallo consentito:+e.getMessage() );
8.
9.
10.
Se m=0
listruzione 3 genera
leccezione che
viene gestita da
questo blocco catch
System.out.println(Eccezione generica !) }
Tutte le altre
eccezioni sono
gestite da questo
blocco catch
throws
m1()
main()
MainClass
main
m1()
cattura E1
propaga
le altre
cattura E2
propaga
le altre
Obj1:Class1
Obj2:Class2
m2()
genera
E0,E1,E2,E3
cattura E0
propaga
le altre
Obj3:Class3
m3()
E0
Errore !
E3
E3
E3
E3
E1
E1
E2
tempo
FileNotFoundException
generata da m3 (8) e
catturata localmente (caso E0)
FileNotFoundException
generata da m3 (8),
propagata da m3 (4) ed m2
(4) e catturata da m1 (11)
(caso E1)
Generazione di eccezioni
Generazione: sintassi del costrutto throw
throw <oggetto_di_tipo_Throwable>;
Generazione: semantica del costrutto throw
Se leccezione non catturata localmente viene interrotta
lesecuzione del metodo (1) e leccezione viene propagata al metodo
chiamante (2)
public int somma(int a,int b) throws Exception
int somma=a+b;
Esempio
throw
new RangeException(x=+x)
catturate e gestite
try {
....
}catch(RangeException exc){
System.out.println( Errore di intervallo:
+ exc.getMessage());}
propagate
public boolean numeroPrimo(...) throws RangeException
Programmazione OO in Java - Andrea Bei
Il metodo isNumeroPrimo
restituisce true se n un
numero primo e false nel caso
contrario. Genera una
RangeException se il numero
negativo.
Leccezione
RangeException
eredita da Exception
E obbligatorio gestire
leccezione RangeException
generata dal metodo
isNumeroPrimo
La clausola finally
La clausola finally inserito dopo il blocco try/catch
delimita una sezione di codice che deve essere
eseguita comunque a prescindere da ci che avviene
nel blocco try/catch