,//,1*8$**,2-$9$
ÊXQOLQJXDJJLRREMHFWRULHQWHGWRWDOPHQWHDRJJHWWL
WUDQQHLWLSLSULPLWLYLGLEDVHLQWIORDW«WXWWRqRJJHWWR
UHOD]LRQHGLHUHGLWDULHWjVHPSOLFHIUDFODVVLHUHGLWDULHWj
PXOWLSODGHOOHLQWHUIDFFH
ÊIRUWHPHQWHLVSLUDWRD&PDULSURJHWWDWRVHQ]DLO
UHTXLVLWRGHOODSLHQDFRPSDWLELOLWjFRQ&FRPXQTXH
VLPLOLWXGLQL«
2JQLSURJUDPPDqXQLQVLHPHGLFODVVLQRQHVLVWRQR
IXQ]LRQLGHILQLWHFRPHLQ&DOLYHOORHVWHUQRDQFKHOD
IXQ]LRQHPDLQYDGHILQLWDGHQWURDXQDFODVVH
-$9$/,1*8$**,22$5&+,7(7785$"
$GLIIHUHQ]DGL&-DYDYLHQHIRUQLWRFRQXQDDPSLD
JHUDUFKLDGLFODVVLVWDQGDUGGLOLQJXDJJLRJLjSURQWH
$UFKLWHWWXUDVRIWZDUHPLGGOHZDUH
&DUDWWHULVWLFKHSULQFLSDOLGL-DYD
/LQJXDJJLRRULHQWDWRDJOLRJJHWWL
,QWHUSUHWDWRE\WHFRGHLQWHUPHGLRHVHJXLWRGDXQD
PDFFKLQDYLUWXDOH
3RUWDELOHOLQJXDJJLRLQGLSLPSOHPHQWD]LRQHGHOOD
PDFFKLQDYLUWXDOHFRGLFHJHQHUDWRLQGLSSLDWWDIRUPD
'LQDPLFRFODVVORDGLQJDWHPSRGLHVHFX]LRQH
5REXVWRIRUWHPHQWHWLSDWRDVVHQ]DGLSXQWDWRUL
JHVWLRQHHFFH]LRQL
6XSSRUWRHYROXWRDOODVLFXUH]]D
q
5LIHULPHQWL
MDYDVXQFRP
OLDGHLVXQLERLW0LVF
q
0RGHOORGLVLFXUH]]D6HFXULW\0DQDJHUHSHUPHVVL
&ULWWRJUDILDFKLDYLSXEEOLFKHSULYDWHFRQWUROORDFFHVVL«
6XSSRUWRSHULOPXOWLWKUHDGLQJ
PLUURUGHOWXWRULDO-DYD
(VLVWRQR PROWLVVLPL OLEUL VX -DYD VLD VX OLQJXDJJLR
DUFKLWHWWXUD FKH VX DVSHWWLSDFNDJH VSHFLILFL VLD LQ OLQJXD
LWDOLDQDFKHLQLQJOHVH&RQVLJOLDWL
')ODQDJDQ-DYDLQD1XWVKHOO7KLUG(GLWLRQ2¶5HLOO\
&6+RUVWPDQQ*&RUQHOO&RUH-DYD)RXUWK(GLWLRQ
INTRODUZIONE ALLA OOP IN JAVA -- 1
6XSSRUWRDOODSURJUDPPD]LRQHGLUHWH50,VRFNHW
FODVVORDGHUGLVWULEXLWR85/«
$SSOHWFRPHDSSOLFD]LRQHLQWHJUDWDLQ:HEEURZVHUFRQ
FRGLFHVFDULFDWRGDOODUHWHDWHPSRGLHVHFX]LRQH
3DFNDJHJUDILFRLQGLSSLDWWDIRUPD$:76ZLQJ
3URJUDPPD]LRQHDHYHQWLPROWRHYROXWD
)DFLOLWjGLLQWHUIDFFLDPHQWRFRQGDWDEDVH-'%&
3HUIRUPDQFHFRPSLODWRULMXVWLQWLPH
INTRODUZIONE ALLA OOP IN JAVA -- 2
,/&26758772³FODVV´,1-$9$
'HILQL]LRQHGLXQDFODVVH
FODVV&RXQWHU^
SULYDWHLQWYDO
SXEOLFYRLGUHVHW^YDO `
SXEOLFYRLGLQF^YDO`
SXEOLFYRLGGHF^YDO`
SXEOLFLQWUG^UHWXUQYDO`
`
8135,02(6(03,2+HOOR:RUOG
)LOH(VHPSLRMDYD
$SSOLFD]LRQH-DYDGDOLQHDGLFRPDQGR
FKHVWDPSDODFODVVLFDIUDVHGLEHQYHQXWR
SXEOLFFODVV(VHPSLR^
`
'DWLYDOHRSHUD]LRQLUHVHWLQFGHFUG
VRQRULXQLWLLQXQXQLFRFRVWUXWWROLQJXLVWLFR
,OFDPSRGDWLYDOqSULYDWRHSXzHVVHUHDFFHGXWRVROR
GDRSHUD]LRQLPHWRGLGHOODFODVVHUHVHWLQFGHFUG
RJQLWHQWDWLYRGLDFFHVVRGDOO¶HVWHUQRYLHQHLPSHGLWRD
OLYHOORGLFRPSLOD]LRQH
,PHWRGLUHVHWLQFHWFVRQRSXEEOLFLH
SRVVRQRTXLQGLHVVHUHLQYRFDWLGDFKLXQTXH
GDOO¶HVWHUQRYDOqPDQLSRODELOHVRORWUDPLWHTXHVWL
PHWRGL
YLHQHJDUDQWLWDODSURSULHWjGLLQFDSVXODPHQWR
127(
LQRPLGHOOHFODVVL-DYDVRQRSHUFRQYHQ]LRQHPDLXVFROL
DGLIIHUHQ]DGHO&LQ-DYDLPHWRGLYDQQRGHILQLWL
GHQWURDOODFODVVHDFXLDSSDUWHQJRQRQRQIXRULGDHVVD
INTRODUZIONE ALLA OOP IN JAVA -- 3
SXEOLFVWDWLFYRLGPDLQ6WULQJDUJV>@^
6\VWHPRXWSULQWOQ+HOOR:RUOG
`
PDLQGHILQLWRREEOLJDWRULDPHQWHGHQWURDXQDFODVVH
SXEEOLFDFRQODIRUPD
SXEOLFVWDWLFYRLGPDLQ6WULQJDUJV>@^`
$GLIIHUHQ]DGHO&QRQF¶qYDORUHGLULWRUQRPHQWUHJOL
DUJRPHQWLGDOODOLQHDGLFRPDQGRVRQRRJJHWWL6WULQJLO
SULPRQRQqLOQRPHGHOSURJUDPPDFRPHLQ&
(VLVWHXQDFRUULVSRQGHQ]DEHQSUHFLVDIUDQRPLGHOOH
FODVVLHQRPLGLILOH
LQXQILOHVRUJHQWHFLSXzHVVHUHXQ¶XQLFDFODVVH
SXEEOLFDFKHGHYHDYHUHORVWHVVRQRPHGHOILOHFDVH
VHQVLWLYH
2JQLILOHVRUJHQWHLPSRUWDDXWRPDWLFDPHQWHVSD]LRGHL
QRPLGLGHIDXOWODOLEUHULDIRQGDPHQWDOHMDYDODQJ
6\VWHPqXQDFODVVHGLVLVWHPDFKHUDSSUHVHQWDLO
VLVWHPDVRWWRVWDQWHTXDOXQTXHHVVRVLD
RXWqXQRJJHWWRVWDWLFGHOODFODVVH6\VWHPH
UDSSUHVHQWDLOGLVSRVLWLYRVWDQGDUGGLXVFLWD
VXOO
RJJHWWRRXWqSRVVLELOHLQYRFDUHLOPHWRGRSULQWOQ
INTRODUZIONE ALLA OOP IN JAVA -- 4
8135,02(6(03,2+HOOR:RUOG,,
/** File Esempio0.java
* Applicazione Java da linea di comando
* che stampa la classica frase di benvenuto
*/
public class Esempio0 {
public static void main(String args[]){
System.out.println("Hello World!");
}
8135,02(6(03,2+HOOR:RUOG,,,
/** File Esempio0.java
* Applicazione Java da linea di comando
* che stampa la classica frase di benvenuto
*/
public class Esempio0 {
public static void main(String args[]){
System.out.println("Hello World!");
}
}
}
3HUFRPSLODUH
MDYDF(VHPSLRMDYD
SURGXFH(VHPSLRFODVV
3HUHVHJXLUH
MDYD(VHPSLR
-DYDFRQVHQWHGLJHQHUDUHDXWRPDWLFDPHQWHOD
GRFXPHQWD]LRQHGHOOHFODVVLFRQWHQXWHQHOILOHGD
FRPSLODUHOLPLWDWDPHQWHDTXHOOHQRQSULYDWH
MDYDGRF(VHPSLRMDYD
,OULVXOWDWRqXQLQVLHPHGLILOH+70/
,OIRUPDWRFRPSLODWRFODVVE\WHFRGH-DYDqSRUWDELOHH
LQGLSHQGHQWHGDOODSLDWWDIRUPD
XQDFODVVHFRPSLODWDVXXQVLVWHPDIXQ]LRQHUjVXTXD
OXQTXHDOWURVLVWHPD0DF8QL[:LQGRZV/LQX[$OSKD«
SHUFXLVLDGLVSRQLELOHLO-DYD5XQWLPH(QYLURQPHQWQHOOD
VWHVVDYHUVLRQH
'LVWLQ]LRQHIUD-DYD'HYHORSPHQW.LW-'.±YHURHSURSULR
DPELHQWHGLVYLOXSSRHSURJUDPPD]LRQHH-DYD5XQWLPH
(QYLURQPHQW-5(±VRORVXSSRUWRDWHPSRGLHVHFX]LRQH
INTRODUZIONE ALLA OOP IN JAVA -- 5
INTRODUZIONE ALLA OOP IN JAVA -- 6
(6(03,26WDPSDGHJOL$UJRPHQWL
(6(03,2&UHD]LRQHH8VRGL2JJHWWL&RXQWHU
/** File Esempio1.java
* applicazione da linea di comando
* stampa gli argomenti passati al programma
*/
/** File Esempio2.java
* Prima applicazione che istanzia nuovi oggetti
*/
class Counter {
private int
public void
public void
public void
public int
}
public
class Esempio1 {
public static void main(String args[]){
if (args.length == 0)
System.out.println("Occorrono argomenti");
else
for(int i=0; i<args.length; i++)
System.out.println("arg" + (i+1) +
": " + args[i]);
}
}
6WULQJqXQDFODVVHSUHGHILQLWDOHVWULQJKH-DYDVRQR
RJJHWWLQRQSH]]LGLPHPRULDDVVHJQDWDDXQSXQWDWRUH
FRPHLQ&
/¶RSHUDWRUHqSUHGHILQLWRVXOOHVWULQJKHHVHUYHD
FRQFDWHQDUOH
DUJVqXQYHWWRUHGLVWULQJKHFRPHWXWWLLYHWWRUL-DYDq
XQRJJHWWRLOFXLFDPSRSXEEOLFROHQJWKLQGLFDLO
QXPHURGLHOHPHQWLQXPHUDWLGDDOHQJWK
val;
reset()
inc()
dec()
rd()
{
{
{
{
val = 0; }
val++; }
val--; }
return val; }
public class Esempio2 { // contiene solo il main
public static void main(String args[]){
Counter c1, c2;
c1 = new Counter(); c2 = new Counter();
c1.reset(); c2.reset();
c1.inc(); c1.inc(); c2.inc();
System.out.println("c1 vale " + c1.rd());
System.out.println("c2 vale " + c2.rd());
}
&RPSLODQGRTXHVWRILOHVLRWWHQJRQRGXHILOHFODVVXQR
SHURJQLFODVVHGHILQLWD(VHPSLRFODVVH
&RXQWHUFODVV
/DULJD&RXQWHUFLQWURGXFHXQULIHULPHQWRD
&RXQWHUFLRqXQDVRUWDGLSXQWDWRUHDGXQRJJHWWRGLTXHO
WLSRFKHSHUz121qGLUHWWDPHQWHPDQLSRODELOH
GDOO¶XWHQWHHVLXVDVHQ]DGHUHIHUHQ]LD]LRQHHVSOLFLWD
FRPHLQ&R&YHGLSRS!LQF
,O&RXQWHUYHURHSURSULRYLHQHFUHDWRGLQDPLFDPHQWH
DOO¶DWWRGHOODQHZHGqYLVLELOHILQRDOODILQHGHOEORFFRLQ
FXLqGHILQLWR/DGHDOORFD]LRQHqDXWRPDWLFDHJHVWLWDGDO
JDUEDJHFROOHFWRUGLVLVWHPDVHFRQGRSROLWLFKH
SUHGHILQLWH
INTRODUZIONE ALLA OOP IN JAVA -- 7
INTRODUZIONE ALLA OOP IN JAVA -- 8
,&267587725,
3DUWHQGRGDOO¶RVVHUYD]LRQHFKHPROWLHUURULGLSURJUDPPD]LRQH
VRQRFDXVDWLGDPDQFDWHLQL]LDOL]]D]LRQLGLYDULDELOLDLYDORULLQL]LDOL
SUHYLVWL
PROWLOLQJXDJJLDRJJHWWLGHILQLVFRQRLOFRQFHWWRGL
FRVWUXWWRUHFKHDXWRPDWL]]DO¶LQL]LDOL]]D]LRQHGHOOH
LVWDQ]H
,OFRVWUXWWRUH
QRQYLHQHPDLFKLDPDWRHVSOLFLWDPHQWHGDOO¶XWHQWHPD
VRORDXWRPDWLFDPHQWHGDOVLVWHPDDOO¶DWWRGHOODFUHD]LRQH
GLXQDQXRYDLVWDQ]D
KDXQQRPHILVVRXJXDOHDOQRPHGHOODFODVVH
QRQKDWLSRGLULWRUQRLOVXRVFRSRQRQqHIIHWWXDUHXQD
RSHUD]LRQHGLFDOFRORPDLQL]LDOL]]DUHXQRJJHWWR
SXzQRQHVVHUHXQLFRVSHVVRYLVRQRSLFRVWUXWWRUL
FRQGLYHUVHOLVWHGLDUJRPHQWL
6HQRQQHYLHQHGHILQLWRQHVVXQRYLHQHJHQHUDWRDXWRPD
WLFDPHQWHXQFRVWUXWWRUHGLGHIDXOWVHQ]DDUJRPHQWLGDO
FRPSRUWDPHQWRYXRWR
(6(03,2ULGHILQL]LRQHGHOODFODVVH&RXQWHU
class Counter {
private int val;
public Counter()
public Counter(int x)
public void reset() {
public void inc()
{
public void dec()
{
public int rd()
{
}
{ val=1; } // default
{ val=x; }
val = 0; }
val++; }
val--; }
return val; }
INTRODUZIONE ALLA OOP IN JAVA -- 9
/¶(6(03,235(&('(17(«ULVWUXWWXUDWR
/** FILE Counter.java
* Questa classe definisce il concetto di
contatore avanti/indietro.
*/
public class Counter {
private int val;
public Counter()
{
public Counter(int x)
public void reset() {
public void inc()
{
public void dec()
{
public int rd()
{
}
val=1; } // default
{ val=x; }
val = 0; }
val++; }
val--; }
return val; }
/** FILE Esempio2bis.java
* Prima applicazione che istanzia nuovi oggetti
*/
public class Esempio2bis {
public static void main(String args[]){
Counter c1, c2;
c1 = new Counter(); c2 = new Counter(5);
c1.inc(); c1.inc(); c2.inc();
System.out.println("c1 vale " + c1.rd());
System.out.println("c2 vale " + c2.rd());
}
}
/DFODVVH&RXQWHUUHVDSXEEOLFDqRUDLQXQILOHVHSDUDWR
PDLQLQ(VHPSLRELVSXzXVDUHODFODVVH&RXQWHU
VHQ]DGRYHULQFOXGHUHQXOODODSLDWWDIRUPD-DYD
VXSSRUWDLOFROOHJDPHQWRGLQDPLFR
$OSULPRXVRGL&RXQWHULOILOH&RXQWHUFODVVYHUUj
FHUFDWRHFDULFDWRGDOFODVVORDGHUGLVLVWHPDDGDWWRD
FRGLFHPRELOHHDSSOLFD]LRQLVX,QWHUQHW
INTRODUZIONE ALLA OOP IN JAVA -- 10
,/&21&(772',3$&.$*(
8Q
DSSOLFD]LRQH DG RJJHWWL q TXDVL VHPSUH FRPSRVWD GL
PROWH FODVVL H DYHUOH WXWWH LQVLHPH QHOOD VWHVVD FDUWHOOD
GLUHFWRU\QRQqSUDWLFR
3HU TXHVWR -DYD LQWURGXFH LO FRQFHWWR GL VWUXWWXUD]LRQH LQ
SDFNDJHJUXSSLGLFODVVLDSSDUWHQHQWLDOORVWHVVRSURJHWWR
3$&.$*(','()$8/7
6HXQDFODVVHQRQGLFKLDUDHVSOLFLWDPHQWHDTXDOHSDFNDJH
DSSDUWLHQHYLHQHLPSOLFLWDPHQWHDVVHJQDWDDOSDFNDJHGL
GHIDXOWFKHIDULIHULPHQWRSHUFRQYHQ]LRQHDOGLUHWWRULR
FRUUHQWH
&DUDWWHULVWLFKHSULQFLSDOL
/HFODVVLGHOSDFNDJHGLGHIDXOWVLFRPSLODQRHVLULFKLDPDQR
VHQ]DSUHPHWWHUHDOFXQQRPHGLSDFNDJH
8QSDFNDJHSXzFRPSUHQGHUHPROWHFODVVLDQFKH
GHILQLWHLQILOHVHSDUDWL
6,67(0$'(,120,',3$&.$*(
(VLVWHXQDFRUULVSRQGHQ]DELXQLYRFDIUDQRPHGHO
SDFNDJHHSRVL]LRQHQHOILOHV\VWHPGHOOHFODVVLGHO
SDFNDJH
XQSDFNDJHGLQRPHSLSSRSUHVXSSRQHFKHWXWWHOHVXH
FODVVLVLWURYLQRLQXQDFDUWHOODGLUHFWRU\GLQRPHSLSSR
package pippo;
MDYDDZWSULQW%RRN
SLSSRSOXWRSDSHUR&RXQWHU
public class Counter {
...
}
package pippo;
public class Esempio2bis {
public static void main(String args[]){
...
}
3HUFRPSLODUHGDOGLUHWWRULRSDGUHGLSLSSR
pippo/Counter.java
pippo/Esempio2bis.java
3HUHVHJXLUHGDOGLUHWWRULRSDGUHGLSLSSR
java
MDYDDZWSULQW
SLSSRSOXWRSDSHUR
&RQVHJXHQWHPHQWHOHFODVVLGHILQLWHDOO¶LQWHUQRGLWDOL
SDFNDJHDYUDQQRFRPHQRPHDVVROXWR
(6(03,2
javac
,OVLVWHPDGHLQRPLGHLSDFNDJHqVWUXWWXUDWRÊTXLQGL
SRVVLELOHDYHUHQRPL³FRPSRVWL´FRPH
pippo.Esempio2bis
INTRODUZIONE ALLA OOP IN JAVA -- 11
3$&.$*(H,03257
4XDQGRVLXVDXQDFODVVHGHILQLWDLQXQDOWURSDFNDJH
RFFRUUHLQJHQHUDOHLQGLFDUHLOQRPHDVVROXWRGHOODFODVVH
/* classe definita nel package di default */
public class Esempio2ter {
public static void main(String args[]){
pippo.Counter c1, c2;
c1 = new pippo.Counter();
c2 = new pippo.Counter(5);
c1.inc(); c1.inc(); c2.inc();
... } }
INTRODUZIONE ALLA OOP IN JAVA -- 12
/¶LVWUX]LRQHLPSRUWFRQVHQWHGLLPSRUWDUHXQQRPHLQ
PRGRGDQRQGRYHUULSHWHUHLOQRPHGHOSDFNDJH
import pippo.Counter;
public class Esempio2ter {
public static void main(String args[]){
Counter c1, c2;
c1 = new Counter(); c2 = new Counter(5);
...
}
}
127$ O¶LVWUX]LRQHLPSRUWQRQqXQDLQFOXGHQRQ
LQFOXGHQXOODHYLWDVRORGLGRYHUULVFULYHUHOXQJKL
QRPLGLFODVVL
3HULPSRUWDUHWXWWHOHFODVVLGLXQSDFNDJHLQXQVROFROSR
LPSRUWSLSSR
HYHQWXDOLDOWUHFODVVLGHILQLWHLQDOWULSDFNDJHQRQ
SRVVRQRDFFHGHUHDGDWLHPHWRGLGLTXHVWHFRPHVH
IRVVHURSULYDWL
127$ LOPDLQGHYHHVVHUHQHFHVVDULDPHQWHSXEOLFH
YDREEOLJDWRULDPHQWHGHILQLWRLQXQDFODVVHSXEOLF
$WWHQ]LRQH
$GLIIHUHQ]DGHO&RGHO&LQ-DYDQRQqSRVVLELOH
GHILQLUHFODVVLYLVLELOLVRORLQXQILOHLOILOHqVRORXQ
FRQWHQLWRUHILVLFRQRQGHOLPLWDXQDPELWRGLYLVLELOLWj
VFRSH
6HVLKDXQDQHFHVVLWjGHOJHQHUHODVROX]LRQHqGLGHILQLUH
XQDSSRVLWRSDFNDJHLQFXLLQVHULUHWDOLFODVVL
5LDVVXPHQGR
3$&.$*(H9,6,%,/,7¬
9DULHTXDOLILFKHGLYLVLELOLWjLQ-DYD
SXEOLF
SULYDWH
SDFNDJH
/DYLVLELOLWjSDFNDJH
qLOGHIDXOWSHUFODVVLHPHWRGL
WLSRGLYLVLELOLWj
DFFHVVLELOHD
SXEOLF
SDFNDJH
SULYDWH
VWHVVDFODVVH
Vu
Vu
Vu
FODVVLLQVWHVVR
SDFNDJH
Vu
Vu
QR
GLIIHUHQWLSDFNDJH
Vu
QR
QR
VLJQLILFDFKHGDWLHPHWRGLVRQRDFFHVVLELOLVRORSHUOH
DOWUHFODVVLGHOORVWHVVRSDFNDJHLQTXDOXQTXHILOH
VLDQRGHILQLWH
INTRODUZIONE ALLA OOP IN JAVA -- 13
INTRODUZIONE ALLA OOP IN JAVA -- 14
7,3,35,0,7,9,&/$66,H2**(77,
48$/&+(35(&,6$=,21(VX-DYDH&
,Q-DYD121HVLVWHDOFXQSUHSURFHVVRUH
,Q-DYDVLGLVWLQJXHIUD
WLSLSULPLWLYLERROHDQFKDUE\WHVKRUWLQW
ORQJIORDWGRXEOH
,Q-DYD121HVLVWRQRPDFURLOFRPSLODWRUHFHUFDGL
HIIHWWXDUHLQOLQHDXWRPDWLFRVHFRQGRVWUDWHJLHSUHGHILQLWH
TXDQGRRSSRUWXQRHSRVVLELOH
FODVVL
-DYD121GLVWLQJXHIUDGLFKLDUD]LRQHHGHILQL]LRQHGL
IXQ]LRQLTXLQGLQRQF¶qQHFHVVLWjGLILOHKHDGHUSURWRWLSL
HWF
1RQqSRVVLELOHGHILQLUHRJJHWWLDOORFDWLVWDWLFDPHQWHRJQL
LVWDQ]DGHYHHVVHUHDOORFDWDGLQDPLFDPHQWHFRQQHZ
LQ-DYD121FLVRQRVWUXFWXQLRQHQXPW\SHGHI
HVLVWRQRVRORFODVVLQpFDPSLGLELWQpJOLRSHUDWRUL
H!
ULIHULPHQWLDRJJHWWL
2JJHWWL-DYDVRQRPDQLSRODELOLVRORWUDPLWHULIHULPHQWL
7,3,35,0,7,9,
7LSR
ERROHDQ
FKDU
48$/&+(35(&,6$=,21(VX-DYDH&
,Q-DYDVLKDHUHGLWDULHWjVHPSOLFHGHOOHFODVVL&
SHUPHWWHO¶HUHGLWDULHWjPXOWLSODGHOOHFODVVLHG
HUHGLWDULHWjPXOWLSODVRORGHOOHLQWHUIDFFHYHGLGHWWDJOLR
QHLOXFLGL³(UHGLWDULHWjH3ROLPRUILVPRLQ-DYD´
E\WH
VKRUW
LQW
ORQJ
IORDW
GRXEOH
'HVFUL]LRQH
WUXHRIDOVH
&DUDWWHUH
81,&2'(
LQWHURFRQVHJQR
LQWHURFRQVHJQR
LQWHURFRQVHJQR
LQWHURFRQVHJQR
,(((IORDW
,(((GRXEOH
'HIDXOW
IDOVH
?X
6L]H
ELW
ELW
5DQJH
?X?X))))
ELW
ELW ELW
ELW
ELW
ELW 127(
LFDUDWWHUL81,&2'(VRQRFRQVLGHUDWLVHQ]DVHJQRHRIIURQR
DPSLRVXSSRUWRDOO¶LQWHUQD]LRQDOL]]D]LRQHHVRQR$6&,,
FRPSDWLELOLVXLSULPLYDOJRQRLQROWUHLFODVVLFL³HVFDSHDOOD
&´
?Q
?
?W
ODQXRYDQRWD]LRQH
?X
FRQVHQWHGLHVSULPHUHXQFDUDWWHUH
81,&2'(WUDPLWHFLIUHHVDGHFLPDOL
LQ-DYDQRQVRQRDPPHVVLWLSLFRPHORQJLQWVKRUWLQWHWFLQRPL
FRUUHWWLVRQRVHPSOLFHPHQWHORQJVKRUWHWF
INTRODUZIONE ALLA OOP IN JAVA -- 15
INTRODUZIONE ALLA OOP IN JAVA -- 16
5,)(5,0(17,$2**(77,
&/21$=,21(',2**(77,
,Q-DYDJOLRJJHWWLVLPDQLSRODQRHVFOXVLYDPHQWHWUDPLWH
ULIHULPHQWL
1RQqSRVVLELOHGHILQLUHRJJHWWLDOORFDWLVWDWLFDPHQWHWXWWR
GHY¶HVVHUHDOORFDWRGLQDPLFDPHQWHFRQQHZ
8QDOLQHDGLFRGLFHGHOWLSRF FIDSXQWDUHLGXH
ULIHULPHQWLDOORVWHVVRRJJHWWRQRQGXSOLFDO¶RJJHWWR
ULIHULWR
(6(03,2
3HUGXSOLFDUHXQRJJHWWRVLKDDGLVSRVL]LRQHLOPHWRGR
FORQHSUHGHILQLWRSHUWXWWHOHFODVVL
S SFORQH
(6(03,2
/**
* verifica il concetto di clonazione di oggetti
*/
import java.awt.Point;
/**
* verifica il concetto di Riferimento a oggetti
*/
import java.awt.Point;
class Esempio3 { // contiene solo il main
public static void main(String args[]){
Point p1 = new Point(100,10), p2 = p1;
System.out.println("p1: " + p1.x + ","
System.out.println("p2: " + p2.x + ","
p1.x = 400;
System.out.println("p1: " + p1.x + ","
System.out.println("p2: " + p2.x + ","
}
}
class Esempio3bis {
public static void main(String args[]){
Point p1 = new Point(100,10), p2=p1;
System.out.println("p1: " + p1.x + "," + p1.y);
System.out.println("p2: " + p2.x + "," + p2.y);
p2 = (Point) p1.clone();
p1.x = 400;
System.out.println("p1: " + p1.x + "," + p1.y);
System.out.println("p2: " + p2.x + "," + p2.y);
+ p1.y);
+ p2.y);
}
}
+ p1.y);
+ p2.y);
2JQLPRGLILFDDSVLULSHUFXRWHDQFKHVXFLzFKHq
ULIHULWRGDSGXHULIHULPHQWLFKHUHIHUHQ]LDQRORVWHVVR
RJJHWWR
,QTXHVWRPRGRSULPDQHLQDOWHUDWRDOYDORUH
PHQWUHSYLHQHPRGLILFDWRLQ
'DQRWDUHO¶RSHUD]LRQHGLFDVWSHUFRQYHUWLUHLOULVXOWDWR
GLFORQHFKHqXQRJJHWWRJHQHULFR2EMHFWLQXQ
RJJHWWRGHOODFODVVH3RLQW
3HUGXSOLFDUHGDYYHURO¶RJJHWWRRFFRUUHXVDUHXQPHWRGR
VSHFLILFRFORQHFKHqSUHGHILQLWRSHUWXWWHOHFODVVL
INTRODUZIONE ALLA OOP IN JAVA -- 17
INTRODUZIONE ALLA OOP IN JAVA -- 18
8*8$*/,$1=$',2**(77,
3RLFKpOHYDULDELOL-DYDVRQRULIHULPHQWLXQWHVWGL
XJXDJOLDQ]DGHOWLSRF FYHULILFDVHGXHULIHULPHQWL
SXQWDQRDOORVWHVVRRJJHWWR121VHGXHRJJHWWLKDQQR
ORVWHVVRYDORUH
3HUFRQWUROODUHVHGXHRJJHWWLKDQQRORVWHVVRYDORUHVLXVD
LOPHWRGRHTXDOVSUHGHILQLWRSHUWXWWHOHFODVVL-DYD
(6(03,2
/**
* verifica il concetto di uguaglianza fra oggetti
*/
import java.awt.Point;
class Esempio4 {
public static void main(String args[]){
Point p1 = new Point(100,10), p2=p1;
System.out.println("p1==p2? ” + (p1==p2));
System.out.println("p1.equals(p2)? ” +
p1.equals(p2));
p2 = (Point) p1.clone(); p1.x = 400;
System.out.println("p1==p2? ” + (p1==p2));
System.out.println("p1.equals(p2)? ” +
p1.equals(p2));
}
}
2XWSXW
675,1*+(,1-$9$
/HVWULQJKH-DYDVRQRRJJHWWLLVWDQ]HGHOODFODVVH
6WULQJXQRJJHWWR6WULQJUDSSUHVHQWDXQRVSHFLILFR
YDORUHFRQWHQXWRGHOODVWULQJDHGqQRQPRGLILFDELOH
,Q-DYDXQD6WULQJQRQqXQEXIIHU
SHULPPDJD]]LQDUHVWULQJKHPRGLILFDELOLVLXVD6WULQJ%XIIHU
6WULQJKHSRVVRQRHVVHUHFRQFDWHQDWHFRQO¶RSHUDWRUH
/DFRQFDWHQD]LRQHGLFRVWDQWLVWULQJDqIDWWDDFRPSLOH
WLPHTXLQGLQRQLQWURGXFHLQHIILFLHQ]H
q 4XDQGRVLVFULYRQRFRVWDQWLVWULQJDIUDYLUJROHWWH
HV³FLDR´YLHQHFUHDWRDXWRPDWLFDPHQWHXQRJJHWWR
6WULQJLQL]LDOL]]DWRDWDOHYDORUH
q 8QDFRVWDQWHVWULQJDQRQSXzHFFHGHUHODULJD
GRYHQGRVFULYHUHFRVWDQWLSLOXQJKHqRSSRUWXQR
VSH]]DUOHLQSDUWLSLFRUWHHFRQFDWHQDUOHFRQ
O¶RSHUDWRUH
$WWHQ]LRQH
ODVHOH]LRQHGLXQFDUDWWHUHVLIDWUDPLWHLOPHWRGRFKDU$W
QRQFRQO¶RSHUDWRUH>@FRPHLQ&R&
6WULQJV ³1HOPH]]RGHOFDPPLQ³
FKDUFK VFKDU$W
(VLVWRQRGHFLQHGLRSHUDWRULSUHGHILQLWLVX6WULQJVLYHGDOD
GRFXPHQWD]LRQHGHOOH-DYD$3,$SSOLFDWLRQ3URJUDPPLQJ
,QWHUIDFHSHUPDJJLRULGHWWDJOL
p1==p2? true
p1.equals(p2)? true
p1==p2? false
p1.equals(p2)? false
INTRODUZIONE ALLA OOP IN JAVA -- 19
INTRODUZIONE ALLA OOP IN JAVA -- 20
$55$<,1-$9$
,Q-DYDJOLDUUD\VRQRRJJHWWLQRQHVLVWHXQYHURQRPHGL
FODVVHLQTXDQWRVRQRLGHQWLILFDWLGDOO¶RSHUDWRUH>@
'HILQLUHXQDUUD\-DYDVLJQLILFDGHILQLUHXQULIHULPHQWR
O¶DUUD\YHURHSURSULRYDFUHDWRFRQQHZ
DPHQRFKHQRQVLDVSHFLILFDWRWUDPLWHFRVWDQWL
/DOXQJKH]]DGHOO¶DUUD\qLQGLFDWDGDOFDPSRSXEEOLFRH
QRQPRGLILFDELOHOHQJWKGHOO¶DUUD\VWHVVR
$55$<,1-$9$
'HILQLUHXQDUUD\-DYDVLJQLILFDGHILQLUHXQULIHULPHQWR
O¶DUUD\YHURHSURSULRYDFUHDWRFRQQHZDPHQRFKHLOVXR
FRQWHQXWRQRQVLDVSHFLILFDWRWUDPLWHFRVWDQWL
127$
&UHDUHXQDUUD\FRQQHZVLJQLILFDFUHDUH
1FHOOHGLXQWLSRSULPLWLYRVHO¶DUUD\FRQWLHQHHOHPHQWLGL
WLSRSULPLWLYR
1ULIHULPHQWLDRJJHWWLWXWWLQXOOVHO¶DUUD\qGLRJJHWWL
1HOVHFRQGRFDVRTXLQGLLVLQJROLRJJHWWLGRYUDQQRHVVHUH
FUHDWLHVSOLFLWDPHQWHFRQQHZVHRSSRUWXQR
(6(03,2
/**
*
Primo esempio d’uso di array in Java
*/
(6(03,2
/**
class
*
*/
Esempio5 {
public static void main(String args[]){
int[] v1 = {8,12,3,4};
// vettore di 4 int
int[] v2; // riferimento a un vettore di int
v2 = new int[5]; // creazione vett. di 5 int
// (crea 5 celle int, inizializzate a 0)
class
Esempio5bis {
static void main(String args[]){
public
String
Secondo esempio d’uso di array Java
//
for(int i=1; i<=v2.length; i++) v2[i-1] = i*i;
for(int i=0; i<v1.length; i++)
System.out.print(v1[i] + '\t');
System.out.println(“”);
for(int i=0; i<v2.length; i++)
System.out.print(v2[i] + '\t');
}
v1[]; // RIFERIMENTO al futuro vettore
si può anche scrivere String[] v1;
v1
= new String[2];
creazione vettore di due (rif. a) String
// NB: le due String però ancora non esistono!
//
v1[0]
= "Ciao mondo"; // una String costante
v1[1] = new String(v1[0]);
// una String creata din. uguale alla prima
}
}
}
INTRODUZIONE ALLA OOP IN JAVA -- 21
INTRODUZIONE ALLA OOP IN JAVA -- 22
7,3,35,0,7,9,H&/$66,&255,6321'(17,
6SHVVRqQHFHVVDULRWUDWWDUHLWLSLSULPLWLYLFRPHRJJHWWLDG
HVHPSLRSHUSDVVDUOLSHUULIHULPHQWRDXQDIXQ]LRQHPD
QRQVROR
³ZUDSFODVVHV´XQDSHURJQLWLSRSULPLWLYR
7LSR
ERROHDQ
FKDU
E\WH
VKRUW
LQW
ORQJ
IORDW
GRXEOH
&ODVVH
FRUULVSRQGHQWH
%RROHDQ
&KDUDFWHU
%\WH
6KRUW
,QWHJHU
/RQJ
)ORDW
'RXEOH
DSDUWHODOHWWHUDLQL]LDOHODFODVVHKDTXDVLVHPSUHOR
VWHVVRQRPHGHOWLSRSULPLWLYRHFFHWWRFKDUHLQW
OHFODVVLIRUQLVFRQRPHWRGLSHUFRQYHUWLUHGDOWLSR
SULPLWLYRDXQRJJHWWRGHOODFODVVHHYLFHYHUVD
class Esempio6 {
public static void main(String args[]){
int x = 35;
// tipo primitivo
Integer ix = new Integer(x);
// conversione int Integer per costruzione
System.out.println("ix = " + ix);
// conversione implicita Integer String
x = ix.intValue()*4;
// conversione esplicita Integer int
System.out.println("x = " + x);
// conversione implicita int String
} }
INTRODUZIONE ALLA OOP IN JAVA -- 23
0(72',',&/$66(VWDWLF
,PHWRGLGHILQLWLGHQWURDXQDFODVVHHYLVWLILQRDTXHVWR
SXQWRDSDUWHLOPDLQ«HUDQRGHVWLQDWLDHVVHUHLQYRFDWLVX
XQ¶LVWDQ]DGLTXHOODFODVVH
class Counter {
private int val;
public Counter()
{
public Counter(int x)
public void reset() {
public void inc()
{
public void dec()
{
public int rd()
{
}
val=1; }
{ val=x; }
val = 0; }
val++; }
val--; }
return val; }
public class Esempio2bis {
public static void main(String args[]){
Counter c1, c2;
c1 = new Counter(); c2 = new Counter(5);
c1.inc(); c1.inc(); c2.dec();
System.out.println("c1 vale " + c1.rd());
System.out.println("c2 vale " + c2.rd());
}
}
0DOHFODVVL-DYDSRVVRQRIXQJHUHDQFKHGDFRQWHQLWRULGL
IXQ]LRQLDQFKHSHUFKpLQ-DYDQRQqFRQVHQWLWRGLGHILQLUH
IXQ]LRQL³HVWHUQH´FRPHLQ&
,PHWRGLGLFODVVHVWDWLFQRQVRQRGHVWLQDWLDHVVHUH
LQYRFDWLVXLVWDQ]HGHOODFODVVHPDFRPHIXQ]LRQL³VWDQG
DORQH´FKHIRUQLVFRQRIXQ]LRQDOLWjXWLOLLQTXDOFKHPRGR
FRUUHODWHFRQODFODVVHFKHOLLPSOHPHQWD
127$ LOPDLQGLXQDFODVVHSXEOLFqLOFDVRSLHYLGHQWHH
IUHTXHQWHGLPHWRGRVWDWLF
INTRODUZIONE ALLA OOP IN JAVA -- 24
0(72',',&/$66(±81(6(03,2
4XHVWRHVHPSLRUDSSUHVHQWDXQFDVROLPLWHLQFXLYHQJRQR
XWLOL]]DWLVRORPHWRGLGLFODVVH
class Esempio7 {
static int[] creaIntervallo(int inf, int sup){
// restituisce un (rif. a) un array di int
int[] v = new int[sup-inf+1];
for (int i=0; i<v.length; i++) v[i]=inf++;
return v;
}
static void print(int v[]){
for(int i=0; i<v.length; i++)
System.out.println(v[i]);
}
static void increment(int v[]){
for(int i=0; i<v.length; i++) v[i]++;
}
public static void main(String args[]){
int[] v1 = creaIntervallo(3,8);
print(v1);
// Esempio7.print(v1);
increment(v1);
// Esempio7.increment(v1);
print(v1);
// Esempio7.print(v1);
}
}
1HOOHFKLDPDWHLOQRPHGHOODFODVVHSXzTXLHVVHUHRPHVVR
LQTXDQWRLPHWRGLYHQJRQRLQYRFDWLGDDOWULPHWRGLGHOOD
FODVVHODVLQWDVVLFRPSOHWDREEOLJDWRULDSHUFKLDPDWH
SURYHQLHQWLDOGLIXRULGHOODFODVVHqLQGLFDWDDODWRFRPH
FRPPHQWR
INTRODUZIONE ALLA OOP IN JAVA -- 25
9$5,$%,/,',&/$66(VWDWLF
/HYDULDELOLGLFODVVHVRQRDVVRFLDWHDXQDFODVVHHQRQDG
XQVLQJRORRJJHWWR
F¶qXQDVRODFRSLDGHOODYDULDELOHLQGLSHQGHQWHPHQWH
GDOQXPHURGLLVWDQ]HGHILQLWHGLTXHOODFODVVH
/HYDULDELOLGLFODVVHVRQRGHILQLWHFRPHVWDWLF
class Esempio7ter {
static int x = 8;
// variabile di classe
public static void main(String args[]){
x--;
// OK (visib. package)
// Sintassi completa: Esempio7ter.x--;
}
}
&RPHSHULPHWRGLGLFODVVHDQFKHSHUOHYDULDELOLGLFODVVH
LOQRPHFRPSOHWRFRPSUHQGHLOQRPHGHOODFODVVHTXLORVL
SXzRPHWWHUHLQTXDQWRO¶XVRGL[qHIIHWWXDWRORFDOPHQWHDOOD
FODVVHVWHVVD
81(6(03,2127(92/(/$&/$66(0DWK
0DWKqXQDFODVVHGLVLVWHPDGHILQLWDLQMDYDODQJFKH
FRVWLWXLVFHODOLEUHULDPDWHPDWLFDFRPSUHQGHVRORPHWRGLH
GDWLVWDWLFL
YDULDELOLGLFODVVH (H 3,
PHWRGLGLFODVVH DEVDVLQDFRVDWDQ
PLQPD[H[SORJSRZVLQ
FRVWDQVTUWHWF
INTRODUZIONE ALLA OOP IN JAVA -- 26
&267$17,
2JQLYDULDELOH-DYDSXzHVVHUHFRQVLGHUDWDXQDFRVWDQWH
VHHWLFKHWWDWDGDOODSDURODFKLDYHILQDO
*HQHUDOPHQWHYHQJRQRXWLOL]]DWHFRVWDQWLSXEEOLFKH
UHDOL]]DWHWUDPLWHYDULDELOLGLFODVVHSXEOLFUHVHFRVWDQWL
DWWUDYHUVRO¶XVRGHOPRGLILFDWRUHILQDO
class Esempio7quater {
public static final int mymax = 8;
// costante pubblica (di classe)
}
ÊSRVVLELOHGHILQLUHDQFKHFRVWDQWL³DXVRLQWHUQR´VLD
VRWWRIRUPDGLYDULDELOLGLFODVVHQRQSXEEOLFKHYLVLELOLH
XWLOL]]DELOLLQWXWWDODFODVVHVLDGLYDULDELOLORFDOLDXQ
PHWRGRYLVLELOLHXWLOL]]DELOLVRORHQWURTXHOPHWRGR
class Esempio7quater {
static final int mymax = 8;
// costante a uso interno (di classe)
void metodo(){
final float radiceDi2 = 1.4142;
}
/¶,67$1=$&255(17(WKLV
/DSDURODFKLDYHWKLVFRVWLWXLVFHXQULIHULPHQWR
DOO¶RJJHWWRFRUUHQWHHSXzVHUYLUH
SHULQGLFDUHXQFDPSRGDWLLQFDVRGLRPRQLPLDFRQXQ
SDUDPHWURRFRQXQDYDULDELOHORFDOH
LQXQFRVWUXWWRUHSHUULFKLDPDUHXQDOWURFRVWUXWWRUHGHOOD
VWHVVDFODVVH
(6(03,2ULGHILQL]LRQHGHOODFODVVH&RXQWHU
class Counter {
private int val;
public Counter()
{ this(1); }
public Counter(int val) { this.val=val; }
public void reset() { val = 0; }
public void inc()
{ val++; }
public void dec()
{ val--; }
public int rd()
{ return val; }
}
,OFRVWUXWWRUH&RXQWHULQWYDOXWLOL]]DWKLVSHUGLVWLQ
JXHUHLOSDUDPHWURYDOGDOFDPSRGDWLGLQRPHYDOFKH
YLHQHHVSUHVVRFRQODQRWD]LRQHWKLVYDO
,OFRVWUXWWRUH&RXQWHUXWLOL]]DWKLVSHUGHOHJDUHOD
FRVWUX]LRQHGHOO¶RJJHWWRDOO¶DOWURFRVWUXWWRUHGHOODVWHVVD
FODVVH
}
3LFFROHRVVHUYD]LRQLGLVLQWDVVL
ODSDURODFKLDYHILQDOGHYHSUHFHGHUHLOWLSRLQWRIORDW
QHOVHFRQGRHVHPSLRODQRWD]LRQH)SHUGHQRWDUH
XQDFRVWDQWHIORDWqLQGLVSHQVDELOHLQPDQFDQ]DGHOOD)
-DYDLQWHUSUHWHUHEEHFRPHFRVWDQWHGRXEOHH
ULILXWHUHEEHO¶DVVHJQDPHQWRDXQDYDULDELOHIORDW
INTRODUZIONE ALLA OOP IN JAVA -- 27
127$ODVLQWDVVLWKLVSHUFKLDPDUHXQDOWURFRVWUXWWRUH
SXzHVVHUHXVDWDVRORFRPHSULPDLVWUX]LRQHGLXQ
FRVWUXWWRUH
INTRODUZIONE ALLA OOP IN JAVA -- 28
2**(77,&203267,
$**,251$0(17202',),&$'(,5(48,6,7,
/RVYLOXSSRGLDSSOLFD]LRQLSRQHGLIURQWHVSHVVRD
SUREOHPLFKHULFKLHGRQRVROX]LRQLFODVVLVLPLOLD
VROX]LRQLFODVVLJLjHVLVWHQWLPDQRQLGHQWLFKH
8QRJJHWWRSXzFRQWHQHUHULIHULPHQWLDDOWULRJJHWWL
O¶RJJHWWRFRQWHQLWRUHSXzXVDUOL
PDQRQSXzDFFHGHUHDLORURGDWLSULYDWL
SXzSHUzDFFHGHUHDLGDWLSXEEOLFLHDTXHOOLFRQYLVLELOLWj
SDFNDJHVHODFODVVHFRQWHQLWRUHqGHILQLWDQHOORVWHVVR
SDFNDJH
&RPHIDUHSHUQRQULSHWHUHWXWWRLOODYRURGDFDSR"
FRSLDLQFROODGHOFRGLFHGHOODFODVVHHVLVWHQWHH
FDPELDPHQWLRSSRUWXQLDSSRUWDWLDPDQR
SUROLIHUD]LRQHGLILOHSURFHGLPHQWRFRPSOPDQXDOH
,QIDVHGLLVWDQ]LD]LRQH
SULPDVLFRVWUXLVFHO¶RJJHWWRFRQWHQLWRUH
SRLVLFRVWUXLVFRQRFRQQHZJOLRJJHWWLLQWHUQL
FUHDUHXQDQXRYDFODVVHFKHFRQWHQJDDOVXRLQWHUQRXQ
RJJHWWRGHOODFODVVHSUHHVLVWHQWH
LFDPSLGDWLSULYDWLQRQVRQRGLUHWWDPHQWHPDQLSRODELOL
ULVFULYHUHDQFKHLPHWRGLFKHULPDQJRQRXJXDOL
(6(03,2
class Counter {
int val;
public Counter()
{ val=1; }
public Counter(int c) { val=c; }
public void inc()
{ val++; }
public int rd()
{ return val; }
}
public class Esempio {
Counter c;
(6(03,2GD&RXQWHUEDVHD&RXQWHUFRQGHFUHPHQWR
class Counter2 {
Counter c;
public Counter2()
{c = new Counter(); }
public Counter2(int v) {c = new Counter(v);}
public void inc()
{ c.inc(); }
public int rd()
{ return c.rd(); }
public void dec()
{ c.val--; }
}
// oggetto contenitore
// oggetto contenuto
public Esempio() { //costruttore di Esempio
c = new Counter(3);
}
LOFDPSRGDWLFYDOqDFFHVVLELOHSHUFKpKDYLVLOLELWj
SDFNDJHHODFODVVH&RXQWHUqGHILQLWDQHOORVWHVVR
SDFNDJHGL&RXQWHU
public static void main(String args){
Esempio e = new Esempio();
}
qFRPXQTXHQHFHVVDULRULVFULYHUHLPHWRGLVRORSHUDGDW
WDUOLDOODQXRYDFODVVHPDGLIDWWRULVFULYHQGROLXJXDOL
VHQ]DDJJLXQJHUHQXRYHIXQ]LRQDOLWj
}
2FFRUUHSRWHUULXVDUHOHFODVVLHVLVWHQWLLQPRGRSL
IOHVVLELOH
EREDITARIETÀ E POLIMORFISMO IN JAVA
1
EREDITARIETÀ E POLIMORFISMO IN JAVA
2
(5(',7$5,(7¬
(5(',7$5,(7¬FRPH5(/$=,21()5$&/$66,
6LYXROHULXVDUHWXWWRFLzFKHSXzHVVHUHULXVDWR
QRQqXWLOHQpRSSRUWXQRPRGLILFDUHFRGLFHJLj
IXQ]LRQDQWHHFRUUHWWRLOFXLVYLOXSSRqFRVWDWRLQWHUPLQL
GLWHPSRHULVRUVH
2FFRUUHGLVSRUUHDOLYHOORGLOLQJXDJJLRGLPHFFDQLVPL
SHUSURJHWWDUHDOOHGLIIHUHQ]HSURFHGHQGRLQPRGR
LQFUHPHQWDOH
)LQRUDO¶XQLFDUHOD]LRQHLQWURGRWWDHUDO¶LVWDQ]LD]LRQH
RJQLRJJHWWRqLVWDQ]DGLXQDFHUWDFODVVH
6LDJJLXQJH(5(',7$5,(7¬
8QDFODVVH%SXz(5(',7$5('$XQDFODVVH$
SUHHVLVWHQWH
2ELHWWLYRq121HVVHUHREEOLJDWLDULSDUWLUHGD]HUR
TXDQGRVHUYHXQDQXRYDFODVVHPDSRWHUODGHILQLUHD
SDUWLUHGDXQDJLjHVLVWHQWH
FODVVHEDVHRVXSHUFODVVHq
ODFODVVHGDFXLVLHUHGLWD$
FODVVHGHULYDWDRVRWWRFODVVHq
ODFODVVHFKHHUHGLWD%
%LVRJQHUjVSHFLILFDUHVRODPHQWH
FRVDODQXRYDFODVVHKDLQSLULVSHWWRDOODSUHFHGHQWH
VLDLQWHUPLQLGLGDWLVLDLQWHUPLQLGLRSHUD]LRQL
A
(6(03,2GDXQ&RXQWHUEDVHDO&RXQWHUFRQGHFUHPHQWR
class Counter2 extends Counter {
public void dec()
{ c.val--; }
}
eredita_da
ODFODVVH&RXQWHUHUHGLWDWXWWLLPHWRGLHLFDPSLGDWLGL
&RXQWHUHSXzXVDUOLFRPHIRVVHURGHILQLWLORFDOPHQWHVHPSUH
FKHODYLVLELOLWjORSHUPHWWDFDPSLSULYDWHQRQYLVLELOL
B
LQSLDJJLXQJHGDWLHPHWRGLVXRLVSHFLILFLLQTXHVWR
HVHPSLRQHVVXQGDWRVRORXQPHWRGRGHF
4XLQGLXQDLVWDQ]DGL&RXQWHUFRQWLHQHDOVXRLQWHUQRXQD
LVWDQ]DGL&RXQWHUSLLFDPSLVSHFLILFLGL&RXQWHUVHQH
HVLVWRQR
EREDITARIETÀ E POLIMORFISMO IN JAVA
3
EREDITARIETÀ E POLIMORFISMO IN JAVA
4
0(0%5,3527(77,
/$&/$66('(5,9$7$38Ñ
DJJLXQJHUHQXRYLFDPSLGDWLHQXRYLPHWRGLDTXHOOL
HUHGLWDWLGDOODFODVVHEDVH
ULGHILQLUHDOFXQLGHLPHWRGLHUHGLWDWLGDOODFODVVHEDVH
RYHUULGLQJ
5LFRQVLGHULDPRLOSUREOHPDSUHFHGHQWHGLGHILQLUH&RXQWHU
GRWDWRGLGHFUHPHQWRDSDUWLUHGD&RXQWHU
3HUUHDOL]]DUHO
RSHUD]LRQHGLGHFUHPHQWRqQHFHVVDULR
RGLVSRUUHGHOO¶DFFHVVRGLUHWWRDOFDPSRYDO
RVIUXWWDUHVHHVLVWHXQPHWRGRSXEEOLFRRGLSDFNDJH
FKHFRQVHQWDGLLQL]LDOL]]DUHLOFDPSRYDOFRQXQYDORUHD
SLDFHUH
/$&/$66('(5,9$7$12138Ñ
HOLPLQDUHFDPSLGDWLRPHWRGL
9,6,%,/,7¬
1HOODFODVVHEDVH
FLzFKHqSULYDWRqYLVLELOHVRORDLPHWRGLGHOODFODVVH
VWHVVD
FLzFKHqGLSDFNDJHqYLVLELOHVRORDLPHWRGLGHOOHFODVVL
GHOORVWHVVRSDFNDJH
FLzFKHqSXEEOLFRqYLVLELOHDWXWWL
1HOQRVWURFDVRQRQFLVRQRVWDWLSUREOHPLSHUFKpYDOQRQ
HUDSULYDWRDYHYDYLVLELOLWjSDFNDJHH&RXQWHUqQHOOR
VWHVVRSDFNDJHGL&RXQWHUTXHOORGLGHIDXOW
3HUFLzODFODVVHGHULYDWD
QRQSXzYHGHUHODSDUWHSULYDWDGHOODFODVVHEDVH
DSSXQWRSHUFKpSULYDWD
3HUVIUXWWDUHGDYYHURO¶HUHGLWDULHWjRFFRUUHSRWHUVXSHUDUH
ODULJLGLWjGHLWUHOLYHOOLGLYLVLELOLWjSULYDWHSXEOLFSDFNDJH
q
q
SXzYHGHUHODSDUWHGLSDFNDJHGHOODFODVVHEDVH
SXUFKpODQXRYDFODVVHVLDGHILQLWDQHOORVWHVVRSDFNDJH
YLVLELOLWjVSHFLILFDSHUOHFODVVLGHULYDWH
YHGHRYYLDPHQWHODSDUWHSXEEOLFDGHOODFODVVHEDVH
LQTXDQWRYLVLELOHDWXWWL
SURWHFWHG
Ê68)),&,(17("
8QFDPSRGDWLRXQPHWRGRSURWHFWHG
qYLVLELOHDOOHFODVVLGHULYDWHLQGLSHQGHQWHPHQWHGDO
SDFNDJHLQFXLHVVHVRQRGHILQLWH
5LFRQVLGHULDPRLOSUREOHPDGLGHILQLUH&RXQWHUGRWDWRGL
GHFUHPHQWRDSDUWLUHGD&RXQWHUFKHQHqSULYR
EREDITARIETÀ E POLIMORFISMO IN JAVA
(VHYDOIRVVHVWDWRSULYDWR"
(VH121IRVVHVWDWRSRVVLELOHFROORFDUH&RXQWHUQHOOR
VWHVVRSDFNDJHGL&RXQWHU"
SHULOUHVWRVLFRPSRUWDFRPHODYLVLELOLWjSDFNDJH
5
EREDITARIETÀ E POLIMORFISMO IN JAVA
6
5(*2/(',9,6,%,/,7¬
&26$6,(5(',7$"
/DFODVVHGHULYDWDHUHGLWDGDOODFODVVHJHQLWRUH
WXWWLLFDPSLGDWLDQFKHTXHOOLSULYDWHDFXLODFODVVH
GHULYDWDQRQSRWUjDFFHGHUHGLUHWWDPHQWH
WXWWLLPHWRGLDQFKHTXHOOLSULYDWHFKHODFODVVHGHULYDWD
QRQSRWUjXVDUHGLUHWWDPHQWH
WLSRGLYLVLELOLWj
DFFHVVLELOHD
SXEOLF
SURWHFWHG
VWHVVD
FODVVH
Vu
Vu
Vu
Vu
FODVVLLQ
VWHVVR
SDFNDJH
Vu
Vu
Vu
QR
VRWWRFODVVL
LQTXDOXQTXH
SDFNDJH
Vu
Vu
QR
QR
GLIIHUHQWL
SDFNDJH
Vu
QR
QR
QR
SDFNDJH SULYDWH
WUDQQHLFRVWUXWWRUL
3(5&+e"
3HUFKpLFRVWUXWWRULQRQVYROJRQRIXQ]LRQLPD
FRVWUXLVFRQRXQ¶LVWDQ]DGHOODFODVVH
ÍVRQRVSHFLILFLGLTXHOODSDUWLFRODUHFODVVH
$GHVHPSLRFRVWUXLUHXQ&RXQWHUQRQqODVWHVVDFRVDFKH
FRVWUXLUHXQ&RXQWHUXQDVRWWRFODVVHKDJHQHUDOPHQWHXQ
QXPHURVXSHULRUHGLFDPSLGDWL
/DTXDOLILFDSURWHFWHG
&LzQRQVLJQLILFDFKHODFODVVHGHULYDWDQRQDEELDXQ
FRVWUXWWRUHLQTXDQWRFRPHYHGUHPRQHYLHQHJHQHUDWR
XQRGLGHIDXOW
UHQGHYLVLELOHXQDWWULEXWRDWXWWHOHVRWWRFODVVLGLTXHOOD
FODVVHSUHVHQWLHIXWXUH
SHUFLzFRVWLWXLVFHXQSHUPHVVRGLDFFHVVR
³LQGLVFULPLQDWR´YDOLGRSHURJQLSRVVLELOHVRWWRFODVVH
FKHSRVVDLQIXWXURHVVHUHGHILQLWDVHQ]DSRVVLELOLWjGL
GLVWLQ]LRQH
2FFRUUHGXQTXHYDOXWDUHPROWRDWWHQWDPHQWHTXDQGRVLD
RSSRUWXQRXWLOL]]DUHODFODXVRODSURWHFWHG
EREDITARIETÀ E POLIMORFISMO IN JAVA
7
EREDITARIETÀ E POLIMORFISMO IN JAVA
8
&203$7,%,/,7¬)5$&/$66((62772&/$66(
&267587725,
/¶HUHGLWDULHWjQRQqVROWDQWRXQDPRGDOLWjSHULOULXWLOL]]RGL
FRGLFHPDIRU]DDSURJHWWDUHHLPSOHPHQWDUHDSSOLFD]LRQL
LQWHUPLQLGLXQDJHUDUFKLDGLFODVVLILFD]LRQHGHOOHHQWLWj
QHFHVVDULH
5LSUHQGHQGRODGHILQL]LRQHGL&RXQWHU
class Counter2 extends Counter {
public void dec()
{ c.val--; }
}
&RXQWHUFRQWLHQHODVWHVVDLQWHUIDFFLDGL&RXQWHU
LFRVWUXWWRULQRQIDQQRVWUHWWDPHQWHSDUWHGHOO¶LQWHUIDFFLD
VLSXzRVVHUYDUHFKHqVWDWRXWLOL]]DWRXQRJJHWWR&RXQWHU
FVHQ]DDYHUQHGHILQLWRLOFRVWUXWWRUH
RJQL&RXQWHUqDQFKHXQ&RXQWHURYYHUR
RJQLRJJHWWRGLFODVVH&RXQWHUqLPSOLFLWDPHQWH
DQFKHGLFODVVH&RXQWHU
PDQRQYLFHYHUVDSHUFKp&RXQWHUqSLULFFRGL
&RXQWHUVDIDUHFRVHFKHXQ&RXQWHUQRQVDIDUHH
SXzDYHUHGHLFDPSLGDWLLQHVLVWHQWLLQ&RXQWHU
-DYDQRQREEOLJDDGHILQLUHDOPHQRXQFRVWUXWWRUHSHU
RJQLFODVVHDQFKHVHFLzqIRUWHPHQWHUDFFRPDQGDWR
LQDVVHQ]DGLFRVWUXWWRULGHILQLWLHVSOLFLWDPHQWH-DYD
GHILQLVFHDXWRPDWLFDPHQWHXQFRVWUXWWRUHGLGHIDXOW
LOFRVWUXWWRUHGLGHIDXOWVLOLPLWDDULFKLDPDUHLO
FRVWUXWWRUHGLGHIDXOWGHOODVXSHUFODVVH
&RQVHJXHQ]D&21)250,7¬
,OFRGLFHSUHFHGHQWHHTXLYDOHFLRqD
XQ¶LVWDQ]DGL&RXQWHUSXzVRVWLWXLUHXQRJJHWWR&RXQWHU
LQPDQLHUDWUDVSDUHQWHULVSHWWRDJOLRJJHWWLFKHOR
XWLOL]]DQR
class Counter2 extends Counter {
public void dec()
{ c.val--; }
// il costruttore di default generato da Java
public Counter2() { super(); }
}
PDQRQLOFRQWUDULR
(6(03,2
/¶LQYRFD]LRQHVXSHUULFKLDPDLQYRFDLOFRVWUXWWRUHGL
GHIDXOWGHOODFODVVHEDVHTXDORUDQRQHVLVWDYLHQHVROOHYDWD
XQ¶HFFH]LRQH
class Esempio1 {
Counter c1 = new Counter(3);
Counter2 c2 = new Counter2();
c2.dec();
// OK: dec() esiste in Counter2
// c1.dec();
// NO: dec() non c’è in Counter
c1=c2;
// OK: ogni Counter2 è Counter
// c2=c1;
// NO: c1 è un semplice Counter
}
EREDITARIETÀ E POLIMORFISMO IN JAVA
9
EREDITARIETÀ E POLIMORFISMO IN JAVA
10
6XSHUHWKLV
(5(',7$5,(7¬H&26758=,21(',2**(77,
,QEUHYH
3HUFRVWUXLUHXQRJJHWWRGLXQDFODVVHGHULYDWDqVHPSUH
QHFHVVDULRFKLDPDUHXQFRVWUXWWRUHGHOODFODVVHEDVH
LQTXDQWR
WKLVqXQULIHULPHQWRDOO¶LVWDQ]DFRUUHQWH
VXSHUqXQULIHULPHQWRDOODFODVVHEDVH
VRORLOFRVWUXWWRUHGHOODFODVVHEDVHSXzVDSHUHFRPH
LQL]LDOL]]DUHLFDPSLGDWLHUHGLWDWLGDWDOHFODVVHLQPRGR
FRUUHWWR
qLOVRORPRGRSHUJDUDQWLUHO¶LQL]LDOL]]D]LRQHGLFDPSLGDWL
SULYDWLDFXLODVRWWRFODVVHQRQSXzDFFHGHUH
GLUHWWDPHQWH
VLHYLWDXQ
LQXWLOHGXSOLFD]LRQHGLFRGLFHQHOODVRWWRFODVVH
0DTXDOHFRVWUXWWRUHGHOODFODVVHEDVHYLHQHFKLDPDWR"
LOFRVWUXWWRUHGLGHIDXOWGHILQLWRGD-DYDFKLDPDLO
FRVWUXWWRUHGLGHIDXOWGHOODFODVVHEDVH
QRWD]LRQHXWLOHQHOFDVRLQFXLODVRWWRFODVVHGHILQLVFDXQ
FDPSRGDWLRPRQLPRFRQXQRGHOODFODVVHEDVH
VXSHUIULFKLDPDLOPHWRGRIGHOODFODVVHEDVH
QRWD]LRQHXWLOHQHOFDVRLQFXLODVRWWRFODVVHGHILQLVFDXQ
PHWRGRRPRQLPRGLXQRGHOODFODVVHEDVHRYHUULGLQJ
SHULFRVWUXWWRULGHILQLWLGDOO¶XWHQWHRFFRUUHVSHFLILFDUH
HVSOLFLWDPHQWHTXDOHFRVWUXWWRUHGHOODFODVVHEDVHYDGD
FKLDPDWRPHGLDQWHODQRWD]LRQHVXSHU«FKHGHYH
HVVHUHODSULPDLVWUX]LRQHGHOFRUSRGHOFRVWUXWWRUH
6HPDQFDXQDFKLDPDWDHVSOLFLWDLOFRPSLODWRUH-DYD
LQVHULVFHDXWRPDWLFDPHQWHXQDFKLDPDWDDOFRVWUXWWRUHGL
GHIDXOWGHOODFODVVHEDVHVXSHUDPHQRFKHQRQFLVLD
JLjXQDFKLDPDWDDXQDOWURFRVWUXWWRUHGHOODVWHVVDFODVVH
PHGLDQWHODQRWD]LRQHWKLV
(6(03,2&RXQWHUGHILQLVFHXQFDPSRYDO
class DualCounter extends Counter {
double val;
// val indica ora il campo val di DualCounter
// mentre super.val indica il val di Counter
public void inc() { super.inc(); val++; }
// inc() indica il metodo inc() di DualCounter
// super.inc() chiama l’inc() di Counter
}
$GHVHPSLRO¶HVSUHVVLRQHVXSHU[LQYRFDLOFRVWUXWWRUH
GHOODFODVVHEDVHFRQXQDUJRPHQWRHFFH]LRQHVHXQ
FRVWUXWWRUHVLIIDWWRQRQHVLVWH
EREDITARIETÀ E POLIMORFISMO IN JAVA
6RQRHVSUHVVLRQLOHFLWH
WKLVYDOLQGLFDLOFDPSRYDOGHOODFODVVHGLLVWDQ]D
FRUUHQWH
WKLVIULFKLDPDLOPHWRGRIGHOODFODVVHGHOO¶LVWDQ]D
FRUUHQWH
WKLVULFKLDPDXQDOWURFRVWUXWWRUHGHOODVWHVVD
FODVVH
VXSHUULFKLDPDXQFRVWUXWWRUHGHOODFODVVHEDVH
VXSHUYDOLQGLFDLOFDPSRYDOGHOODFODVVHEDVH
11
EREDITARIETÀ E POLIMORFISMO IN JAVA
12
&267587725,12138%%/,&,
(6(03,25,$66817,923(5621((678'(17,
/**
,QDVVHQ]DGLFRVWUXWWRULGHILQLWLGDOO¶XWHQWH-DYDGHILQLVFH
VHPSUHXQFRVWUXWWRUHGLGHIDXOWSHURJQLFODVVHWDOH
FRVWUXWWRUHqSXEEOLFRLQPRGRGDFRQVHQWLUHDOODFODVVH
GLHVVHUHQRUPDOPHQWHLVWDQ]LDWD
la classe Persona
*/
class
,QDOFXQHFLUFRVWDQ]HWXWWDYLDVLSXzGHVLGHUDUHGLLPSHGLUH
FKHXQDFODVVHSRVVDHVVHUHLVWDQ]LDWDGDFKLXQTXH,Q
SDUWLFRODUHSXzHVVHUHQHFHVVDULR
LPSHGLUHTXDOXQTXHLVWDQ]LD]LRQH
FRQVHQWLUHVRORLVWDQ]LD]LRQLGDSDUWHGLVRWWRFODVVL
Persona {
String nome;
int anni;
Persona() { nome = "sconosciuto"; anni = 0; }
Persona(String n) { nome = n; anni = 0; }
Persona(String n, int a) { nome=n; anni=a; }
void print(){
System.out.print("Il mio nome e’ " + nome);
System.out.println(" e ho " + anni + " anni");
} }
/**
1HOSULPRFDVRO¶XWHQWHGHYHGHILQLUHXQFRVWUXWWRUH
SULYDWRQHOVHFRQGRXQFRVWUXWWRUHSURWHWWR
la classe Studente che eredita da Persona
*/
class
,QTXHVWRPRGRVLSUHYLHQHODJHQHUD]LRQHGHOFRVWUXWWRUH
SXEEOLFRDXWRPDWLFRGDSDUWHGL-DYD
Studente extends Persona {
int matr;
Studente() { super(); matr = 9999; }
Studente(String n) { super(n); matr = 8888; }
Studente(String n, int a) { super(n,a); matr=7;}
Studente(String n, int a, int m) {
super(n,a); matr=m; }
void print(){ super.print();
System.out.println("Matricola = " + matr); }
}
&/$66,),1$/,ILQDO
public class Esempio2 {
public static void main(String args[]){
Studente studente;
studente = new Studente();
studente.print();
&RPHVLqJLjYLVWRXQDYDULDELOHGLFKLDUDWDILQDOGLYHQWD
XQDFRVWDQWHRVVLDQRQqSLPRGLILFDELOH
$OORVWHVVRPRGRXQDFODVVHGLFKLDUDWDILQDOGLYHQWDXQD
FODVVHILQDOHRYYHURGDFXLQRQqSRVVLELOHGHULYDUH
VRWWRFODVVL
studente = new Studente("Tom", 30);
studente.print();
studente = new Studente("Laura", 20, 1234);
studente.print();
} }
EREDITARIETÀ E POLIMORFISMO IN JAVA
13
EREDITARIETÀ E POLIMORFISMO IN JAVA
14
(5(',7$5,(7¬(&203$7,%,/,7¬',7,32
32/,025),602
6HODFODVVH%qVRWWRFODVVHGHOODFODVVH$RJQLRJJHWWR
GLFODVVH%qDQFKHGLFODVVH$QRQYLFHYHUVD
ODFODVVH%qXQVRWWRWLSRGHOODFODVVH$
5LFRUGLDPRFKHXQDVH]LRQHGLFRGLFHVLGLFH
32/,025)$VHqFDSDFHGLRSHUDUHVXRJJHWWLGLWLSR
GLYHUVRVSHFLDOL]]DQGRLOVXRFRPSRUWDPHQWRLQEDVH
DOWLSRGHOO¶RJJHWWRVXFXLRSHUD
&LzLPSOLFDXQDFRPSDWLELOLWjFRQIRUPLWjGDVRWWRWLSRD
WLSRQRQYLFHYHUVDGDFXLVHJXHODSRVVLELOLWjGLXVDUHXQ
RJJHWWRGHOODFODVVHGHULYDWDDOSRVWRGLXQRGHOODFODVVH
EDVHQRQYLFHYHUVD
'LSHQGHVHSUHYDOHLOWLSRIRUPDOHGHOULIHULPHQWR
3HUVRQDQHOO¶HVHPSLRSUHFHGHQWHRLOWLSRHIIHWWLYR
GHOO¶LVWDQ]DFRUUHQWH6WXGHQWHQHOO¶HVHPSLRSUHFHGHQWH
(6(03,2
class Esempio3 {
Persona p = new Persona(“John”);
Studente s = new Studente(“Tom”);
p.print();
// stampa solo il nome
s.print();
// stampa nome e matricola
p=s;
p.print();
// COSA STAMPA ???
}
,Q-DYDSUHYDOHLOWLSRHIIHWWLYRGHOO¶LVWDQ]DFRUUHQWH
/(*$0(',1$0,&2/$7(%,1',1*
/¶DVVHJQDPHQWRS V
(6(03,2
qSRVVLELOHSHUFKpRJQL6WXGHQWHqDQFKHXQD3HUVRQD
HQRQFRPSRUWDSHUGLWHGLLQIRUPD]LRQHSHUFKpVLWUDWWD
GLXQDVVHJQDPHQWRIUDULIHULPHQWLQRQIUDYDULDELOL
3UREOHPD
SqGHILQLWRFRPHULIHULPHQWRDXQDJHQHULFD3HUVRQD
PDIDULIHULPHQWRLQUHDOWjDXQR6WXGHQWH
public class Esempio2 {
public static void main(String args[]){
Persona p = new Studente(“Anna”);
p.print(); // STAMPA NOME E MATRICOLA !!
}
}
6HEEHQHSVLDXQULIHULPHQWRD3HUVRQDSRLFKpO¶LVWDQ]D
FRUUHQWHqXQR6WXGHQWHYLHQHULFKLDPDWRLOPHWRGR
SULQWGHOODFODVVH6WXGHQWH
&RPHYLHQHLQWHUSUHWDWRRUDS"&RPHVHPSOLFH3HUVRQDR
FRPH6WXGHQWH"
EREDITARIETÀ E POLIMORFISMO IN JAVA
,Q-DYDODSRVVLELOLWjGLXVDUHXQRJJHWWRGHOODFODVVH%DO
SRVWRGLXQRGLFODVVH$LQWURGXFHODSRVVLELOLWjWHRULFDGL
DYHUHSROLPRUILVPR(LQSUDWLFD"
15
EREDITARIETÀ E POLIMORFISMO IN JAVA
16
,17(5)$&&(,1-$9$
2FFRUUHUHEEHURGXHJHUDUFKLHGLIIHUHQ]LDWH
½XQDSHUODSDUWHLPSOHPHQWDWLYDULXWLOL]]RGLFRGLFH
½XQDSHUO¶LQWHUIDFFLDHVWHUQDFDSDFHGLPDQWHQHUHOD
FRUUHWWH]]DFRQFHWWXDOH
8QDLQWHUIDFFLD-DYDFRVWLWXLVFHXQDSXUDVSHFLILFDGL
LQWHUD]LRQH
½FRQWLHQHVRORGLFKLDUD]LRQLGLPHWRGLHG
HYHQWXDOPHQWHFRVWDQWL
½121FRQWLHQHYDULDELOLQpGHILQL]LRQLGLPHWRGL
5HDO
&RPSOH[
&ODVV
LQKHULWDQFH
8QDFODVVH-DYDSXzLPSOHPHQWDUHXQDRSLLQWHUIDFFH
/DFODVVH'(9(GHILQLUHWXWWLLPHWRGLGHOOHLQWHUIDFFH
LPSOHPHQWDWH
&RPSOH[
,QWHUIDFH
LQKHULWDQFH
5HDO
(6(03,2
SXEOLFLQWHUIDFH,FRPSOH[^
SXEOLF,FRPSOH[VXP,FRPSOH[]
`
SXEOLFFODVV&RPSOH[LPSOHPHQWV,FRPSOH[^
SXEOLF&RPSOH[VXP&RPSOH[]^«`
`
*(5$5&+,(',,17(5)$&&(
/HLQWHUIDFFHSRVVRQRGDUHOXRJRDJHUDUFKLHGL
HUHGLWDULHWjLQPDQLHUDDQDORJDDOOHFODVVL
0DDFKHFRVDVHUYRQROHLQWHUIDFFH"
*HUDUFKLDVHSDUDWDGDTXHOODGHOOHFODVVL
6OHJDWDGDDVSHWWLLPSOHPHQWDWLYL
(VSULPHUHOD]LRQLFRQFHWWXDOL
*XLGDODSURJHWWD]LRQHHODPRGHOOL]]D]LRQH
(VHPSLRGHOODUDSSUHVHQWD]LRQHGHLQXPHULUHDOL
'XHSRVVLELOLWj
FODVVH&RPSOH[FRPH
VRWWRFODVVHGL5HDO
FODVVH5HDOFRPH
VRWWRFODVVHGL&RPSOH[
$SSURFFLRSUDJPDWLFR
ULXWLOL]]RGHOODFODVVH5HDO
PDFRQFHWWXDOPHQWH
VFRUUHWWR
$SSURFFLRFRQFHWWXDOPHQWH
FRUUHWWRPDFKHREEOLJDD
ULGHILQLUH5HDO
EREDITARIETÀ E POLIMORFISMO IN JAVA
17
/¶HUHGLWDULHWjGHOOHLQWHUIDFFHqSHUz08/7,3/$
EREDITARIETÀ E POLIMORFISMO IN JAVA
18
(5(',7$5,(7¬08/7,3/$'(//(,17(5)$&&(
3HUFKpLQ-DYDF¶qHUHGLWDULHWjVHPSOLFHSHUOH
FODVVLXQDFODVVHSXzHUHGLWDUHGDXQDVROD
VXSHUFODVVHPDHUHGLWDULHWjPXOWLSODSHUOH
LQWHUIDFFH"
/HLQWHUIDFFHLQGXFRQRXQPRGRGLIIHUHQWHGLFRQFHSLUHOD
SURJHWWD]LRQHGLXQ¶DSSOLFD]LRQH
3ULPDVLGHILQLVFRQROHLQWHUIDFFHFKHVHUYRQRHVL
VWDELOLVFRQROHUHOD]LRQLIUDLQWHUIDFFH
/DJHUDUFKLDGLLQWHUIDFFHULIOHWWHVFHOWHGL
SURJHWWRSXOL]LDFRQFHWWXDOH
/¶HUHGLWDULHWjPXOWLSODIUDFODVVLFRPSOLFKHUHEEH
QRWHYROPHQWHLOFRPSLWRGHOODPDFFKLQDYLUWXDOHDWHPSRGL
HVHFX]LRQH
3RLVLSURJHWWDQROHFODVVLFKHLPSOHPHQWDQROH
LQWHUIDFFHGHILQLWH
/DJHUDUFKLDGHOOHFODVVLSXzULIOHWWHUHOHVFHOWH
LPSOHPHQWDWLYHFRQVLGHUDWHSLHIILFDFL
ODFODVVH&XQLVFHVLDLGDWLGL$FKHGL%
FKHVLIDFRQOHRPRQLPLH"
FRPHVLGLVWLQJXRQR"
/DFODVVH&XQLVFHLPHWRGLGHOOH
FODVVL$H%
GHILQL]LRQLGRSSLH"
VHODFRVDVLULSHWHULFRUVLYDPHQWH
QHOODJHUDUFKLD"
,17(5)$&&((352*(77$=,21(
%
$
&/$66,$675$77(,1-$9$
&
(OHFODVVLDVWUDWWH"3HUFKpXQ¶DOWUDDVWUD]LRQHROWUHDOOH
LQWHUIDFFH"
$OFRQWUDULROHLQWHUIDFFHFRQWHQJRQRVRORGLFKLDUD]LRQL
GLPHWRGL
121FRQWHQJRQRLPSOHPHQWD]LRQLQHVVXQSUREOHPDGL
FROOLVLRQLIUDPHWRGLRPRQLPL
121FRQWHQJRQRYDULDELOLQHVVXQSUREOHPDGLFROOLVLRQH
IUDGDWLRPRQLPL
8QDFODVVHDVWUDWWDLQ-DYDIDWWRUL]]DGLFKLDUDQGROH
RSHUD]LRQLFRPXQLDWXWWHOHVXHVRWWRFODVVLPD121
qREEOLJDWDDGHILQLUOHWXWWHWUDPLWHODVSHFLILFD
GHOO¶LPSOHPHQWD]LRQH
1RQYLHQHFUHDWDSHUGHILQLUHLVWDQ]HPDSHUGHULYDUQH
DOWUHFODVVLDVWUDWWHRQRFKHGRYUDQQRLPSOHPHQWDUHL
PHWRGLVRORGLFKLDUDWLGDOODFODVVHDVWUDWWD
(VHPSLR
EREDITARIETÀ E POLIMORFISMO IN JAVA
19
EREDITARIETÀ E POLIMORFISMO IN JAVA
20
SXEOLFDEVWUDFWFODVV$QLPDOH^
SXEOLFDEVWUDFW6WULQJYHUVR
SXEOLFDEVWUDFW6WULQJVLBPXRYH
SXEOLFDEVWUDFW6WULQJYLYH
«
`
SXEOLFDEVWUDFWFODVV$QLPDOH7HUUHVWUH
H[WHQGV$QLPDOH^
SXEOLF6WULQJYLYH ^
HUDDEVWUDFW
UHWXUQ³VXOODWHUUDIHUPD´
`
«
`
'LYHUVDPHQWHGDOOHLQWHUIDFFHOHFODVVLDVWUDWWHVRQRYHUH
HSURSULHFODVVL
HUHGLWDULHWjVHPSOLFH
SRVVRQRGHILQLUHDOFXQLPHWRGLHYDULDELOLFKH
YHQJRQRHUHGLWDWLGDOOHVRWWRFODVVLDVWUDWWHRPHQR
127$
RJQLFODVVHFKHGLFKLDULDOPHQRXQPHWRGRFRPH
DEVWUDFWGHYHHVVHUHTXDOLILFDWDFRPHFODVVHDVWUDWWD
DOWULPHQWLHUURUHLQFRPSLOD]LRQH
EREDITARIETÀ E POLIMORFISMO IN JAVA
21
EREDITARIETÀ E POLIMORFISMO IN JAVA
22
WU\^
RSHUD]LRQHFULWLFDFKHSXzVROOHYDUHHFFH]
`
(&&(=,21,,1-$9$
6SHVVRLSURJUDPPLFRQWHQJRQRLVWUX]LRQL³FULWLFKH´FKH
SRVVRQRFRQGXUUHDHUURULDWHPSRGLHVHFX]LRQH
FDWFK([FHSWLRQH^
JHVWLRQHGHOO¶HFFH]LRQH `
7LSLFDPHQWHLQTXHLFDVLLOSURJUDPPDWRUHLQVHULVFH
FRQWUROOLLI«WKHQSHULQWHUFHWWDUHOHVLWXD]LRQL
FULWLFKHHFHUFDUHGLJHVWLUOHLQPRGRDSSURSULDWR
6HO¶RSHUD]LRQHSXzVROOHYDUHGLYHUVLWLSLGLHFFH]LRQH
FRUULVSRQGHQWLDGLYHUVLWLSLGLHUURUHSRVVRQRHVVHUH
SUHYLVWLSLEORFFKLFDWFKGLVHJXLWRDOORVWHVVREORFFRWU\
7XWWDYLDTXHVWRPRGRPDQXDOHGLSURFHGHUHqVSHVVR
LQVRGGLVIDFHQWH
(6(03,2
8QDWLSLFDRSHUD]LRQH³FULWLFD´qODOHWWXUDGDLQSXW
,Q-DYDLOGLVSRVLWLYRGLLQSXWVWDQGDUGqODYDULDELOH
VWDWLF6\VWHPLQGLFODVVH,QSXW6WUHDPXQDFODVVH
DVWUDWWDGLFXL6\VWHPLQqXQDLVWDQ]D³DQRPDOD´
SUHGHILQLWD
QRQqIDFLOHSUHYHGHUHWXWWHOHVLWXD]LRQLFKH
SRWUHEEHURSURGXUUHO¶HUURUH
ODJHVWLRQHGHOO¶HUURUHYLHQHVSHVVRVFDPELDWDFRQOD
VWDPSDDYLGHRGLTXDOFKHPHVVDJJLR
-DYDDGRWWDDQFKHLQTXHVWRDPELWRXQDSSURFFLR
LQQRYDWLYRLQWURGXFHQGRLOFRQFHWWRGLHFFH]LRQH
DQ]LFKpWHQWDUHGLSUHYHGHUHLFDVLFKHSRVVRQRSRUWDUHD
HUURUHVLSURYDDHVHJXLUHO¶RSHUD]LRQHLQXQEORFFR
³FRQWUROODWR´
VHVLSURGXFHXQHUURUHO¶RSHUD]LRQHVROOHYD
XQ¶HFFH]LRQH
O¶HFFH]LRQHYLHQHFDWWXUDWDGDOEORFFRHQWURFXL
O¶RSHUD]LRQHHUDHVHJXLWDHSXzHVVHUHJHVWLWDGDXQD
URXWLQHDSSRVLWD
ECCEZIONI IN JAVA -- 1
3RLFKp,QSXW6WUHDPIRUQLVFHVRORXQPHWRGRUHDGFKHOHJJH
VLQJROLE\WHVLXVDLQFDSVXODUH6\VWHPLQLQXQRJJHWWRGRWDWRGL
PDJJLRULIXQ]LRQDOLWjFRPHDGHVHPSLRXQ%XIIHUHG5HDGHUFKH
IRUQLVFHDQFKHXQPHWRGRUHDG/LQH
import java.io.*;
class EsempioIn {
public static void main(String args[]){
int a = 0, b = 0;
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
try { System.out.print("Primo valore: ");
a = Integer.parseInt(in.readLine());
System.out.print("Secondo valore:");
b = Integer.parseInt(in.readLine());}
catch (IOException e) {
System.out.println("Errore in input");
}
System.out.println("La somma vale " + (a+b));
} }
ECCEZIONI IN JAVA -- 2
4XLUHDG/LQHVROOHYDXQD,2([FHSWLRQLQFDVRGL
HUURUHLQIDVHGLLQSXWPHQWUH,QWHJHUSDUVH,QWVROOHYD
XQD1XPEHU)RUPDW([FHSWLRQQRQFDWWXUDWDVHODVWULQJD
UHVWLWXLWDGDUHDG/LQHQRQFRUULVSRQGHDOODVLQWDVVLGLXQ
QXPHURLQWHUR
8QDHFFH]LRQHQRQFDWWXUDWDVLSURSDJDYHUVRO¶HVWHUQR
GLEORFFRLQEORFFRVHUDJJLXQJHLOPDLQSURYRFDOD
WHUPLQD]LRQHGHOO¶DSSOLFD]LRQH
3RLFKpXQ¶HFFH]LRQHqXQRJJHWWRSXzFRQWHQHUHGDWLR
GHILQLUHPHWRGL
WXWWHOHHFFH]LRQLGHILQLVFRQRXQPHWRGRJHW0HVVDJH
FKHUHVWLWXLVFHLOPHVVDJJLRG¶HUURUHDVVRFLDWR
DOFXQHHFFH]LRQLGHILQLVFRQRGHLFDPSLFRPH
E\WHV7UDQVIHUUHGLQ,QWHUUXSWHG,2([FHSWLRQFKH
IRUQLVFRQRXOWHULRULLQIRUPD]LRQLXWLOLSHUPHJOLRJHVWLUH
O¶HYHQWRDQRPDOR
5,/$1&,$5((&&(=,21,
&26¶Ê81¶(&&(=,21(
8QDHFFH]LRQHqXQRJJHWWRLVWDQ]DGL
MDYDODQJ7KURZDEOHRGLXQDTXDOFKHVXDVRWWRFODVVH
,QSDUWLFRODUHOHGXHVRWWRFODVVLSLFRPXQLVRQR
MDYDODQJ([FHSWLRQ
MDYDODQJ(UURU
,OWHUPLQHHFFH]LRQHqJHQHUDOPHQWHXVDWRLQHQWUDPELLFDVL
8Q(UURULQGLFDSUREOHPLUHODWLYLDOFDULFDPHQWRGHOOD
FODVVLRDOIXQ]LRQDPHQWRGHOODPDFFKLQDYLUWXDOH-DYD
HVQRWHQRXJKPHPRU\HYDFRQVLGHUDWR
LUUHFXSHUDELOHSHUFLzQRQGDFDWWXUDUH
-DYD ULFKLHGH FKH XQ PHWRGR HQWUR FXL VL SXz JHQHUDUH
XQ¶HFFH]LRQH R JHVWLVFD O¶HFFH]LRQH FRQ XQ FRVWUXWWR
WU\FDWFK RSSXUH GLFKLDUL GL ULODQFLDUOD DOO¶HVWHUQR GHO
PHWRGRVWHVVRFRQODFODXVRODWKURZV
SXEOLFLQWUHDG,QWHJHU%XIIHUHG5HDGHULQ
WKURZV,2([FHSWLRQ1XPEHU)RUPDW([FHSWLRQ^
UHWXUQ,QWHJHUSDUVH,QWLQUHDG/LQH
`
8QD([FHSWLRQLQYHFHLQGLFDGLVROLWRVLWXD]LRQL
UHFXSHUDELOLHVILQHILOHLQGLFHGLXQDUUD\ROWUHLOLPLWL
HUURULGLLQSXW
ECCEZIONI IN JAVA -- 3
ECCEZIONI IN JAVA -- 4
'(),1,5((*(1(5$5(1829((&&(=,21,
(VVHQGRXQ¶HFFH]LRQHQXOODSLFKHXQQRUPDOHRJJHWWR
-DYDLVWDQ]DGLXQDFODVVHRSSRUWXQDqSRVVLELOH
GHILQLUHQXRYLWLSLGLHFFH]LRQHQXRYHFODVVL
JHQHUDUHHFFH]LRQLGDOO¶LQWHUQRGLSURSULPHWRGL
qVXIILFLHQWHGHILQLUHXQDQXRYDFODVVHFKHHVWHQGDOD
FODVVH([FHSWLRQRXQDGHOOHVXHVRWWRFODVVL
FODVV1XPEHU7RR%LJ([FHSWLRQ
H[WHQGV,OOHJDO$UJXPHQW([FHSWLRQ^
SXEOLF1XPEHU7RR%LJ([FHSWLRQ^VXSHU`
SXEOLF1XPEHU7RR%LJ([FHSWLRQ6WULQJV^VXSHUV`
`
6ROLWDPHQWHQRQVLGHILQLVFRQRSDUWLFRODULFDPSLGDWLLQ
TXDQWRO¶LQIRUPD]LRQHIRQGDPHQWDOHLOWLSRGHOO¶HFFH]LRQH
qJLjYHLFRODWDGDOODFODVVHVWHVVDHGDOPHVVDJJLRV
qVXIILFLHQWHFUHDUHO¶RJJHWWRHFFH]LRQHHSRL³ODQFLDUOR´
FRQO¶LVWUX]LRQHWKURZ
SXEOLFLQWUHDG,QWHJHU%XIIHUHG5HDGHULQ
WKURZV,2([FHSWLRQ1XPEHU)RUPDW([FHSWLRQ
1XPEHU7RR%LJ([FHSWLRQ^
LQW[ ,QWHJHUSDUVH,QWLQUHDG/LQH
LI[! WKURZQHZ1XPEHU7RR%LJ([FHSWLRQ
UHWXUQ[ `
127$
QRQFRQIRQGHUHWKURZFKHqXQ¶LVWUX]LRQHFKHODQFLDXQ¶HFFH
]LRQHFRQWKURZVXVDWDQHOODGLFKLDUD]LRQHGLXQDFODVVH
ODFUHD]LRQHGHOO¶RJJHWWR1XPEHU7RR%LJ([FHSWLRQSXz
DYYHQLUHHVSHVVRDYYLHQHHQWURO¶LVWUX]LRQHWKURZVWHVVD
ECCEZIONI IN JAVA -- 5
ECCEZIONI IN JAVA -- 6