,//,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