• Non ci sono risultati.

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

N/A
N/A
Protected

Academic year: 2021

Condividi "F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a"

Copied!
12
0
0

Testo completo

(1)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 1 U n iv e rs it à d e g li S tud i d i M od e n a e R e gg io E m ili a

F ac o lt à d i I ng e gn e ri a

C O R S O D I

F O NDA M E N T I D I I N F O R M A T ICA II L ingu a gg io Java : C lass i A s tr a tt e e In te rf acce

Ing . F ra n c o Z a m bon e lli

Lu c id i rea li zz a ti i n c o ll a bo ra z ion e c on Ing . E n ri c o D e n ti - U n iv . B o logn a

A nno A cca d e m ic o 1999 /2000

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA C L A SS I A S T R A TT E

L ’e re d it ar ie tà po rta a rif le tt er e su l ra ppo rto fr a p rog ett o st ru tt u ra . In p ar ti co la re , • un a cl a ss e pu ò li m it a rs i a d ef in ir e l’ in te rf a cc ia e le p rop ri et ba se d i un a cl a ss e d i en tit à ..... la sc ia nd o “ in b ia n co” a lc un e o p er a zi o n i...... ch e v err a nn o p o i i m p le m en ta te d a ll e c la ss i d er iva te .

U n a c la ss e c on qu es te ca ra tt er is ti ch e: • fa tt o ri zz a , d ic h ia ra n do le , o p er a zi o n i co m un i a tu tt e le su so tt o cl a ss i, e d ef in is ce d a ti co m un i...... m a n o n d ef in is ce (im p le m en ta ) le o p er a zi o n i

Q u ind i... • d i un a cl a ss e si ff a tt a è im po ss ib il e d ef in ir e is ta n ze , p er ch es is tono m et od i l as ci ati i n b ia n co ” (a c u i qu es te is ta n ze non sa p re bb er o co m e ris pond er e) ↓↓

È un a C L A SS E A S T RA TT A

U n a cl a ss e a st ra tt a : • non v ie n e c rea ta p er d er iva rn e is ta n ze ... • m a p er d er iva rn e a lt re c la ss i, ch e d ett ag li er anno (s p ec if ica ndo le ) le op er az ion i qu i so lo d ic h ia ra te

(2)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 3 ESE M P IO : IL R E G N O AN IM A L E

T u tti abb ia m o un ’id ea d i co sa si a un an im al e: i n p ar ti co la re • ogn i an im al e h a un qua lc h e ve rs o • ogn i an im al e si m uov e in qua lc h e m odo • ogn i an im al e v iv e in un qua lc h e a m b ie n te (a ria , ac qu a, te rr af er m a... )

... m a p rop rio p er qu es to , n o n es is te il g en er ic o a n im a le !

O g n i a n im a le re a le : • h a uno sp ec if ic o ve rs o • si m uov e in uno sp ec if ic o m odo • v iv e in uno sp ec if ic o a m b ie n te

A d es em p io : • il l eon e rugg is ce , si m uov e a van zando a qua tt ro za m p e, e v iv e su ll a te rr a fe rm a • la ra n a g ra ci da , si m uov e sa lt ando , e v iv e n eg li st agn i • l’ uo m o pa rl a , si m uov e ca mm inando , e v iv e su ll a te rr a

A ll o ra , p er ch é in tr od u rr e un a ta le c la ss e “a n im a li ”? • appun to p er fa tt o ri zz a re a sp etti co m un i • ch e indu cono un a cl a ss if ic a zi o n e d eg li ogg ett i d el m o nd o

In eff etti , non es is tono n ea n ch e i p es ci , i m a mm if er i, g li u cce lli ... ... m a d is po rr e d i qu es te c a te go ri e c on ce tt ua li è c o m unqu e u til e!

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 4 SPE C IF ICA D I C L A SS I A S T R A TT E

C o m e sp ec if ic a re un a cl a ss e c o m e “a st ra tt a” ?

In Ja v a, b as ta e ti ch ett ar e la c la ss e c o m e abstract

E S E M P IO

public abstract class Animale { public abstract String verso(); public abstract String si_muove(); public abstract String vive(); }

Il con ce tt o co sì es p re ss o è c h e • ogn i an im a le re a le può fa re un ve rs o , può m uo ve rs i, e può d ir e in ch e a m b ie n te v ive • m a n o n si p u ò , in g en er a le , p rec is a re co m e.

NO TE • un a c la ss e a v en te a n ch e so lo un m et odo abstract è a st ra tt a, e d ev e e ss er e d ic h ia ra ta abstract e ss a st ess a (a lt rim en ti si h a err o re ) • un a c la ss e a st ra tt a può p er ò an ch e non av er e m et od i d ic h ia ra ti

abstract ( m a re st a c o m unqu e a st ra tt a, e qu ind i è im po ss ib il e is ta n zi ar la ) • un a so tt o cl ass e d i un a c la ss e a st ra tt a è a n ch ’e ss a a st ra tt a, se non rid ef in is ce tu tti i m et od i ch e e ra no as tr atti n ell a c la ss e b as e.

(3)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 5 ESE M P IO : T A SS O N O M IA AN IM A L E

L ’a ss un to all a b as e d i qu es to es em p io è c h e ogn i an im al e “c on cr et o ” si a ca ra tt er izza to (c o m p iu ta m en te , alm eno ai fin i d ell ’e se m p io st ess o ) d all e du e se gu en ti p rop rie tà : • l’ am b ie n te in cu i v iv e; • il m odo in cu i si m uov e.

IP O T IZZ IA M O C H E :

- og n i a n im a le sa pp ia ri sp o nd ere a un m ess agg io , chi_sei() , ch e re stit u is ce un a b re v e d es cr iz ion e d ell ’a n im al e st ess o ;

- tu tt i g li a n im a li si a n o ra pp re se n ta b ili n ell o st ess o m o d o (n el se n so ch e e si st e a lm eno un d eno mi n at o re c o m un e a ll e lo ro ra pp re se n taz ion i)

- og n i a n im a le sa pp ia ri sp o nd ere a l m ess agg io mostra() , la c u i d ef in iz ion e è ind ip end en te d all o sp ec if ic o an im al e a c u i si app li ca , p er ch é b as at a sug li alt ri m et od i.

P o ic h é ogn i a n im al e: • vi ve in un ce rto am b ie n te (m a qua le a m b ie n te d ip end e d all o sp ec if ic o an im al e c on si d er at o ) • si m uo ve in un ce rto m odo (m a co m e es att am en te v ar ia d a ca so a ca so )

i du e m et od i vive() e si_muove() h anno tu tt e le ca ra tt er is ti ch e d ei m et od i as tr atti è oppo rtuno ch e v eng ano d ic h ia ra ti n ell a c la ss e- b as e animale (p er ch é ti p ic i d i ogn i po ss ib il e a n im al e rea le )

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA C O S T RU T T O R I E C L A SS I A S T R A TT E

L a cl a ss e- ba se a tr a tt a d eve a ve re un co st ru tt o re ? E ss endo as tr att a, fo rs e non se rv e.... o inv ece sì ?

R IF LE SS ION E

- le c la ss i d er iv at e c h e ra pp re se n ta no an im ali con cr eti av ra nn o se n z’ a lt ro un co st ru tt o re , ch e p er p ri m a co sa invo ch er à un co st ru tt o re d ell a c la ss e- b as e

- se e si st e a n ch e so lo un ca m p o d a ti p ri va to n ell a cl a ss e- b a se , p er in iz ia li zz a rl o se rv ir à un co st ru tt o re d ell a cl a ss e ba se , v is to ch e le c la ss i d er iv at e non n e h anno v is ib ilit à d ir ett a

N at u ra lm en te , ta le c o st ru tt o re n o n sa m a i u sa to d ire tt a m en te (p er ch é non es is te ra nno m ai i st an ze d i “g en er ic i” a n im ali ), m a sa rà c h ia m at o d ai co st ru tt o ri d ell e c la ss i d er iv at e → può ess er e public o an ch e so lo protected

public abstract class Animale { private String nome; protected String verso; public Animale(String s) { nome=s; } public abstract String si_muove(); public abstract String vive(); public abstract String chi_sei(); public void mostra() { System.out.println(nome + ", " + chi_sei() + ", " + verso + ", si muove " + si_muove() + " e vive " + vive() ); } }

P er p ro ce d er e n ell a c o st ru zi on e d ell a ta ss ono mi a, o cc o rr e o ra d ec id er e i cr it er i con cu i op er a re la cl a ss ifi ca zi on e.

(4)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 7 CR IT E R I D I C L A SS IF ICA Z IO N E

• in li n ea d i p rin ci p io , si po ss ono p en sa re so tt o cl ass i d i an im ali ca ra tt er izza ti d a un ce rto co lo re d ell a p ell e, d al m et odo d i rip rodu zi on e, o d a qu al unqu e a lt ro cr it er io • m a qu es te sce lt e non sono , o ra , le p iù na tu ra li • in fa tti , ti p ic a m en te i cr it er i d i cl a ss if ic a zi o n e si ba sa n o su ll e ca ra tt er is ti ch e c o rr is po n d en ti a i m et od i a st ra tti , p erc h é so n o es a tt a m en te le p ro p ri et à ri te nu te ril eva n ti fin d a ll a p rog ett a zi o n e d ell a cl a ss e- b a se

D u e cr it er i n a tu ra li : • l’ am b ie n te in cu i l ’a n im al e v iv e • il m odo d i m uov er si

S ce g li endo , p er fa re una p ri m a ri pa rti zi on e, il cr it er io d ell ’a m - b ie n te d i v it a, un a po ss ib il e sce lt a può ess er e d is ti ngu er e fr a

an im a li te rr es tr i e an im a li a cq u a ti ci .

Q u es te du e nuov e so tt o cl ass i sono an co ra c la ss i as tr att e: • in fa tti , nu ll a è a n co ra st at o d ett o su l m ov im en to



im po ss ib il e d ef in ir e il m et odo si_muove() . AN IM A L E

AN IM A L E _ TE RR E S T R E AN IM A L E _ A C Q U A T IC O

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 8 LE P R IM E DU E S O TT O C L A SS I (a st ra tt e)

public abstract class AnimaleTerrestre extends Animale { public AnimaleTerrestre(String s) { super(s); } public String vive() { return "sulla terraferma"; } public String chi_sei() { return "un animale terrestre"; } }

public abstract class AnimaleAcquatico extends Animale { public AnimaleAcquatico(String s) { super(s); } public String vive() { return "nell'acqua"; } public String chi_sei() { return "un animale acquatico"; } }

U n ’u lt er io re c la ss if ic a zi o n e (m eno sc on ta ta d ell a p rece d en te ) può po rta re a in tr odu rr e la c la ss e (a n co ra a st ra tt a) d eg li an im a li m a ri n i, co m e sp ec ia li zzaz ion e d eg li an im ali ac qu ati ci .

In qu es to ca so il cr it er io u sa to non ha nu ll a a ch e fa re c on le ca ra tt er is ti ch e in iz ia lm en te ev id en zi a te (a m b ie n te d i v it a, m ov im en to e, in mi su ra mi no re , v er so ), m a ris p ecc h ia se m p li ce m en te un a sudd iv is ion e c h e e si st e n ell a rea lt à. AN IM A L E

AN IM A L E _ TE RR E S T R E AN IM A L E _ A C Q U A T IC O

AN IM A L E _ M A R INO

(5)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 9 L a d ic h ia raz ion e d ell a nuov a c la ss e h a l’ as p ett o se gu en te :

public abstract class AnimaleMarino extends AnimaleAcquatico { public AnimaleMarino(String s) { super(s); } public String vive() { return "in mare"; } public String chi_sei() { return "un animale marino"; } }

L A T A SS O N O M IA C O M P LET A

L a ta ss ono mi a c o m p le ta m ett e in g io co an ch e l’ alt ro cr it er io “n at u ra le” , qu ell o re la ti vo al m ov im en to : su qu es ta b as e, g li an im ali t err es tr i v engono sudd iv is i i n qu ad rup ed i, b ip ed i e u cce lli . O gnun a d i qu es te ca te go rie d à la su a d ef in iz ion e p er il m et odo

si_muove() , p er ci ò qu es te c la ss i rapp re se n tano cl a ss i d i an im a li re a li ( non p iù as tr att e) , d i cu i si po ss ono cr ea re is ta n ze . AN IM A L E

AN IM A L E _ TE RR E S T R E AN IM A L E _ A C Q U A T IC O

AN IM A L E _ M A R INO Q U AD R U P E D E B IP E D E U CC E LL O

U O M O C AVA LL O

C O R VO P ING U INO P E S C E (d i m a re )

T ONNO

T w ee ty b ir d

C ro w tu n E quu s

H o m o

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA LE C L A SS I C O NCR ETE

public class PesceDiMare extends AnimaleMarino { public PesceDiMare(String s) { super(s); verso="non fa versi"; } public String si_muove() { return "nuotando"; } public String chi_sei() { return "un pesce (di mare)"; } }

public class Uccello extends AnimaleTerrestre { public Uccello(String s) { super(s); verso="cinguetta"; } public String si_muove() { return "volando"; } public String chi_sei() { return "un uccello";} public String vive() { return "in un nido su un albero"; } }

public class Bipede extends AnimaleTerrestre { public Bipede(String s) { super(s); } public String si_muove() { return "avanzando su 2 zampe"; } public String chi_sei() { return "u n animale con due zampe"; } }

public class Quadrupede extends AnimaleTerrestre { public Quadrupede(String s) { super(s); } public String si_muove() { return "avanzando su 4 zampe"; } public String chi_sei() { return "un animale con quattro zampe "; } }

(6)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 11 U LTE R IO R I C L A SS I P S P E C IF IC H E • l’ uo m o si m uov e sì “a v an za ndo su du e za m p e” , m a p iù es att a- m en te “ca mmi n a su du e g am b e” → r id ef in is ce si_muove() • il p ingu ino , pu r ess endo un u cce ll o (e in g en er al e g li u cce lli vo la no ), non sa vo la re → r id ef in is ce si_muove()

public class Cavallo extends Quadrupede { public Cavallo(String s) { super(s); verso="nitrisce"; } public String chi_sei() { return "un cavallo"; } }

public class Uomo extends Bipede { public Uomo(String s) { super(s); verso="parla"; } public String si_muove() { return "camminando su 2 gambe"; } public String chi_sei() { return "un homo sapiens"; } public String vive() { return "in condominio"; } }

public class Corvo extends Uccello { public Corvo(String s) { super(s); ve rso="gracchia"; } public String chi_sei() { return "un corvo"; } }

public class Pinguino extends Uccello { public Pinguino(String s) { super(s); verso = "non fa versi"; } public String chi_sei() { return "un pinguino";} public String si_muove() { return "ma non sa volare"; } }

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 12 U LTE R IO R I C L A SS I P S P E C IF IC H E (s eg u e)

public class Tonno extends PesceDiMare { public Tonno(String s) { super(s); } public String chi_sei() { return "un tonno"; } }

L E S E M P IO C O M P LE SS IV O

U n po ss ib il e m ai n , ch e c o st ru is ce un “m ondo d i an im ali ”:

public class MondoAnimale {

public static void main(String args[]) {

Cavallo c = new Cavallo("Furia del West"); Uomo h = new Uomo("Johnny"); Corvo w = new Corvo("Il corvo dell'uva"); Tonno t = new Tonno("Palmera");

// AnimaleMarino p = new AnimaleMarino("x"); // ERRATO: classe astratta!

Uccello u = new Uccello("Gabbiano"); Pinguino p = new Pinguino("Tweety");

c.mostra(); h.mostra(); w.mostra(); t.mostra(); u.mostra(); p.mostra(); } }

O u tpu t d el p rog ra mm a:

Furia del West, un cavallo, nitrisce, si muove avanzando su 4 zampe e vive sulla terraferma.

Johnny, un homo sapiens, parla, si muove camminando su 2 gambe e vive in un condominio.

Il corvo dell'uva, un corvo, gracchia, si muove volando e vive in un nido su un albero. ...

(7)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 13 ARRAY D I AN IM A L I

G raz ie a ll a c o m p ati b ilit à fr a ti p i, è p o ss ib il e p en sa re a st ru tt u re - d a ti (in p a rt ic o la re , a rr ay ) d i g en er ic i a n im a li , in cu i p er ò po tr anno tr ov ar e po st o sp ec ifi ci an im a li (c on cr eti ) : un u cce ll o , un ca v all o , un tonno , et c.

E S E M P IO

public class Zoo {

public static void main(String args[]) { Animale fauna[] = new Animale[6];

fauna[0] = new Cavallo("Furia del West"); fauna[1] = new Uomo("Johnny"); fauna[2] = new Corvo("Il corvo dell'uva"); fauna[3] = new Tonno("Palmera"); fauna[4] = new Uccello("Gabbiano"); fauna[5] = new Pinguino("Tweety");

for(int i=0; i<6; i++) fauna[i].mostra(); } }

D a n o ta re il ru o lo fo n da m en ta le d el po lim o rf is m o !

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA E R E D IT AR IE T À E C L A SS IF ICA Z IO N E

R ip re nd ia m o l’ es em p io d eg li an im ali , e c on si d er ia m o un cl ass if icaz ion e sec ondo du e c rit er i: • am b ie n te in cu i v ivono (ac qu ati ci o te rr es tr i) • ca te go ria z oo log ica (m ammi fe ri, re ttili ,... )

In fo rm a tab ell a re , il t u tt o po tr ebb e p re se n ta rs i co sì:

an im ali ac qu ati ci an im ali t err es tr i m ammi fe ri re ttili

S uppon ia m o d i vo le r r ipo rta re qu es ta c la ss if icaz ion e in un ta ss ono m ia , m ed ia n te er ed it a ri et à .

T al e a pp ro cc io ric h ie d e d i sce g li er e innan zit u tt o un cr it er io , d u sa re p er la c reaz ion e d ell e du e so tt o cl ass i “d i p rim o li v ell o ”.

S uppon endo d i op ta re p er l’ am b ie n te in cu i v ivono co m so tt o cl ass i d i p rim o li v ell o , e a pp li ca ndo po i l ’a lt ro cr it er io all so tt o cl ass i co sì o tt enu te , si h a la se gu en te ta ss ono mi a:

A N IM A L E

A N IM A L E TE RR E S T R E A N IM A L E A C QU A T IC O

R E TT IL I A C QU A T IC I M A MM IF E R I A C QU A T IC I R E TT IL I T E RR E S T R I M A MM IF E R I T E RR E S T R I

(8)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 15 E R E D IT AR IE T À E C L A SS IF ICA Z IO N E (II )

R is p ett o all a ra pp re se n taz ion e ta b ell ar e, qua lc o sa è anda to p ers o : n o n es is to n o p i co n ce tti d i m a mmi fe ri e re ttili , ch e si sono d is p ers i n ell e so tt o cl a ss i.

P er r ec up er ar e il con ce tt o d i “m ammi fe ro ”, si può so lo o ss er v ar e ch e e si st ono “a n im ali ac qu ati ci m ammi fe ri” e “a n im ali t err es tr i m ammi fe ri” , ognuno con le su e p rop rie ca ra tt er is ti ch e, m a non es is te la ca te go ria d ei “m ammi fe ri” con le p ec u li a rit à ch e la con tr add is ti nguono . A bb ia m o qu ind i p er so la po ss ib ilit à d i d eno ta re le ca ra tt er is ti ch e co m un i a tu tti (e so li ) i m ammi fe ri.

In alt er n ati v a a v re mm o po tu to ado tt ar e m ammi fe ri e re ttili co m e cl ass if icaz ion e d i p rim o li v ell o :

Il qu es to ca so , al con tr ar io , av re mm o p er so la ra pp re se n taz ion e pu ra d i "a n im al e ac qu ati co " e "a n im al e te rr es tr e" . A N IM A L E

M A MM IF E R I R E TT IL I

R E TT IL I T E RR E S T R I R E TT IL I A C QU A T IC I M A MM IF E R I T E RR E S T R I M A MM IF E R I A C QU A T IC I

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 16 E R E D IT AR IE T À E C L A SS IF ICA Z IO N E (II I)

A tt ra v er so il m ecca n is m o d i er ed it ar ie tà , è c o m e se , n ell a ra pp re se n taz ion e ta b ell ar e p rece d en te , fo ss e po ss ib il e se lez ion ar e in te re c o lonn e, acce d endo po i tr a m it e e ss e all e si ngo le ce ll e, m a non in te re ri gh e.

Q u es to è a cc a du to p erc h é si è st ab ilit a un a g er a rc h ia fr a i d u e cr it er i d i cl a ss if ic a zi o n e, ch e in pa rt en za er a n o o rt ogo n a li (s u ll o st ess o p ia n o ), e la rag io n e d i ci ò st a n el m ecc a n is m o d i ere d it a ri et à si n go la u tili zz a to p er im p le m en ta re la ta ss o n o m ia .

QU IND I: l’ er ed it a ri et à si ngo la è uno st ru m en to m o lt o po te n te , m a ch e non appa re ada tt o a m od ell a re tu tt e le sit ua zi on i.

S ar ebb e u til e po te r d er iv ar e le so tt o cl ass i (m ammi fe ri t err es tr i, re ttili ac qu ati ci , et c) a pa rti re da p cl a ss i- ba se , co rr is pond en ti ci as cun a a ll ’a pp li caz ion e d i un cr it er io d i cl ass if icaz ion e.

In qu es to m odo , i du e c rit er i sa re bb er o su ll o st ess o p ia no e re st re bb er o o rtogon ali .

(9)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 17 E R E D IT AR IE T À M U L T IP L A

Q u ando è po ss ib il e d er iv ar e un a c la ss e face ndo le e re d it ar e le p rop rie tà d i p iù cl ass i b as e si p ar la d i er ed it a ri et à m u lti p la .

L ’e re d it ar ie tà m u lti p la è un m ecca n is m o m o lt o po te n te , m a m o lt o d is cu ss o , p er ch é in tr odu ce a m b igu it à non b an ali d a ris o lv er e. P o ic h é la so tt o cl ass e è so tt o ti po d i t u tt e le su e c la ss i b as e n e un is ce in sé i da ti e i co m po rt a m en ti (m et od i) , M A C O S A S U CCE D E S E : • n ell e c la ss i b as e v i sono ca m p i d ati o m et od i o m on imi ? P er es em p io , con rif er im en to all a c la ss e m a mm if er i t err es tr i, co sa su cce d e se c 'e ' un m et odo p ri n t() si a in m a mm if er i ch e in an im a li t err es tr i? Q u al e d ei du e v ie n e e re d it at o ? E n tr am b i? U no S o lo ? D a qu al e c la ss e b as e? • un a c la ss e e re d it a, d ir ett am en te o ind ir ett am en te , p iù vo lt e d a un a st ess a c la ss e b as e? I ca m p i d ati d i qu es t’ u lti m a sono re p li ca ti o no ? I m et od i si con si d er ano am b igu i o no ? P er es em p io , m a mm if er i t err es tr i er ed it a ind ir ett am en te DU E VO LTE d all a c la ss e an im a le . C o sa su cce d e a ll a v ar ib il e no m e?

P er qu es ti m o ti v i Java n o n supp o rt a l’ ere d it a ri et à m u lt ip la (d is pon ib il e, inv ece - con tu tti i p rob le mi d el ca so - in C ++ ).

Java in tr o du ce in v ece un d iv er so co n ce tt o p se m p li ce d a g es tire : l’ in te rf a cc ia . A N IM A L E

A N IM A L I A C QU A T IC I A N IM A L I T E RR E S T R I R E TT IL I M A MM IF E R I M A MM IF E R I A C QU A T IC I R E TT IL I T E RR E S T R I R E TT IL I A C QU A T IC I M A MM IF E R I T E RR E S T R I

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA IN T E R F ACC E

U n a in te rf acc ia ( interface ) è a n al og a a un a c la ss e, m a, d iff er en za d i qu es ta , co stit u is ce una pu ra sp ec ifi ca d co m po rt a m en ti . C o m e ta le : • si limit a a d ic h ia ra re i m et od i, se n za im p le m en ta rli (tu tti i m et od i d i un ’in te rf acc ia sono im p li cit am en te abstract ) • in p iù , può so lo d ef in ir e c o st an ti (c io è v ar ia b ili static

final ), m a non va ri ab ili .

E S E M P IO

public interface AnimaleTerrestre { public deambula();

} L e in te rf acce po ss ono ess er e e st es e p er er ed it ar ie tà , es att am en te co m e le c la ss i:

public interface Primate extends Mammifero { public void manipola();

} A d iff er en za d ell e c la ss i, p er ò , le in ter fa cce p o ss o n o ess ere st ru tt u ra te a n ch e in g er a rc h ie d i ere d it a ri et à m u lti p la .

public interface SuperPippo extends Mammifero, SuperEroe { ...

} Il m o ti vo è c h e le in te rf acce , non fo rn endo im p le m en ta zi on i, ev ta no all a ra d ice i p rob le mi d ell ’e re d it ar ie tà m u lti p la “c la ss ica” fr cl ass i, con se n te ndo un a e re d it ar ie tà m u lti p la “c on tr o ll at a” .

(10)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 19 U S O D E LL E IN T E R F ACC E

U n a in te rf acc ia v ie n e u sa ta d a (un a o p iù ) cl ass i, ch e d ic h ia ra n o d i im p le m en ta re l’ in te rf a cc ia . E se m p io : public class MammiferoTerrestre implements AnimaleTerrestre { public void deambule() {DEFINIZIONE METODO!}

} U n a c la ss e può ovv ia m en te im p le m en ta re un a (o p iù ) in te rf acce e con te m po ra n am en te e re d it ar e d a un a c la ss e:

public class MammiferoTerrestre extends Mammifero implements AnimaleTerrestre { public void deambule() {DEFINIZIONE!}

} È an ch e po ss ib il e d ef in ir e st ru tt u re d ati (e s. arr ay ) d i un ti po in te rf acc ia , es att am en te c o m e si fa re bb e c on un a c la ss e a st ra tt a: ovv ia m en te , le is ta n ze iv i m em o rizza te sa ra nno d i un a c la ss e (c on cr et a) ch e im p le m en ti l ’in te rf acc ia :

public class Esempio {

public static void main( String args[] ) {

AnimaleTerrestre a[] = new AnimaleTerrestre[20];

a[1] = new MammiferoTerrestre(); } }

In v ar ie sit u az ion i, Ja v a d ef in is ce d ell e in te rf a cce v uo te : t ali sono , ad es em p io , Serializable e Cloneable . Il l o ro sc opo è fa re da m a rc a to ri , obb li g ando le c la ss i ch e vog li ono sfr u tt ar e ce rte fun zi on alit à a ind ica rlo in m odo es p li cit o , d ic h ia ra ndo d i im p le m en ta re ta li i n te rf acce .

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 20 IN T E R F ACC E E M E T O D O L OG IA

L e in te rf acce in tr odu cono un d ive rs o m odo d i co n ce p ir e il p rog ett o .

P ri m a s i d ef in is co n o le in ter fa cce c h e o cc o rr o n o e si st a b ili sce in ch e re la zi o n e d evo n o ess ere fr a lo ro

P o i s i d ef in is co n o le c la ss i ch e le im p le m en ta n o

V a n tagg i: • la g er ar ch ia d ell e in te rf acce , ch e rif le tt e il p rog ett o , è se p ar at a d a qu ell a d ell e c la ss i, ch e rif le tt e sce lt e im p le m en ta ti v e • è po ss ib il e sce g li er e a ogn i li v ell o d i p rog ett o ci ò ch e è p iù app rop ria to

A d es em p io , l’ in te rf acc ia B può es te nd er e l’ in te rf acc ia A , m a qu es to non im p li ca c h e la c la ss e Y , ch e im p le m en ta B , d ebb a es te nd er e la c la ss e X ch e im p le m en ta A …

A n zi , le du e c la ss i po tr ebb er o ess er e in re laz ion e oppo st a, o an ch e non av er e a lc un a re laz ion e fr a lo ro !

(11)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 21 ESE M P IO : IL R E G N O AN IM A L E

D u e c la ss if icaz ion i o rtogon ali , un a d i cl ass i e un a d i i n te rf acce .

G er a rc h ia d i cl a ss i:

A N IM A L E

M A MM IF E R I R E TT IL I

G er a rc h ia d i In te rf a cce :

A N IM A L E D IQU A L C H E L UOGO

A N IM A L E T E RR E S T R E A N IM A L E A C QU A T IC O

S is te m a F in a le :

A N IM A L E

M A MM IF E R I R E TT IL I

R E TT IL I T E RR E S T R I R E TT IL I A C QU A T IC I M A MM IF E R I T E RR E S T R I M A MM IF E R I A C QU A T IC I A N IM A L E D IQU A L C H E L UOGO

A N IM A L E T E RR E S T R E A N IM A L E A C QU A T IC O

E x te nd s

S i po te v a p en sa re d i i nv er ti re i ruo li d ell e g er ar ch ie d i i n te rf acce e d i cl ass e, m a è ce rta m en te p iù n at u ra le p en sa re a m ammi fe ri e re ttili co m e c la ss i (c on m et od i e p rop rie tà c h e sp ec if ica no le ca ra tt er is ti ch e p ec u li ar i d i m ammi fe ri e re ttili ), e qu ind i p en sa re a l po st o dov e v ivono g li an im ali i n te rmi n i d i i n te rf acce (c on m et od i ch e sp ec if ica no co m e g li an im ali si m uovono… )

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA ESE M P IO : NU M E R I C O M P L ESS I

In un li ngu agg io a ogg etti ch e o ffr a so lo cl ass i (C ++ ): • se si d is pon e g ià d i un a c la ss e c h e ra pp re se n ta i nu m er i rea li v ie n e spon ta n eo d ef in ir e la c la ss e d ei co m p le ss i co m so tt o cl ass e d ei rea li , in qu an to , op er a ti va m en te , si t ra tt a d agg iung er e un ca m po -d ati (la p ar te imm ag in ar ia ) • m a un ta le m odo d i p ro ce d er e d ar ebb e p er ò ri su lt a ti a ss u rd p er ch é po rte re bb e a un m od ell o d el m ondo in cu i i co m p le ss sono un so tt o ti po d ei rea li , il ch e è c on tr add ett o da ll a re a lt à . • o cc o rr e dunqu e in ve rti re il rappo rt o fr a le c la ss i, d ef in endo rea li co m e so tt o cl ass e d ei co m p le ss i • tu tt av ia , qu es to co m po rta in effi ci en za , in qu an to ogn i rea le h an ch e un a p ar te imm ag in ar ia (c h e dov rà v al er e se m p re 0 ).

In un li ngu agg io a ogg etti con in te rf acce , inv ece : • il rappo rt o fr a le in te rf a cce può ess er e qu ell o sugg er it o d ell rea lt à d a m od ell ar e (qu i: rea li ch e d er iv ano d a c o m p le ss i) • m a il rappo rt o fr a le c la ss i ch e le im p le m en tano può ess er d ive rs o , in p ar ti co la re , is p ir at o a c rit er i d i eff ic ie n za (qu i: l cl ass e d ei co m p le ss i può av er e du e ca m p i d ati , qu ell a d ei rea uno so lo )

(12)

F ran co Z a m bon elli , E n ri co D en ti - C L A SS I A S T RA TT E , IN T ERFA CC E IN JAVA 23 N O T A F INA L E : M E T O D O L OG IE D I ANA L IS I E P R OG E T T O

L a p rog ra mm a zi o n e ad ogg etti h a un fo rt e im pa tt o su l p ro ce ss o d i p rod u zi o n e d el so ftw a re p er ch è

IN V IT A F O R T E M E N T E A D A N A L IZZ ARE E P R OG E TT ARE UN S IS T E M A S O F T W ARE P R IM A D I REA L IZZ AR L O

F a se d i A n a li si : • id en ti fica re c h e c o sa il si st em a d ev e fa re e in ch e a m b ie n te app li ca ti vo si co ll o ca • id en ti fica re c h e ogg etti il s is te m a d ev e m od ell ar e, in te nd endo si a ogg etti co m e a st raz ion i d i ogg et rea li , si a ogg etti con ce p iti co m e pu re e n tit à so ftw ar e • id en ti fica re le p rop rie tà e i se rv iz i ch e d evono ess er e se rv iti d ag li ogg etti

F a se d i P rog ett o : • d ef in ir e le c la ss i d el si st em a • an ali zza re le ca ra tt er is ti ch e d eg li ogg etti i d en ti fica ti n ell a fa se d i an ali si , es tr arr e le p rop rie tà c o m un i • d ef in ir e le g er ar ch ie d i er ed it ar ie tà , po ss ib ilm en te u sa ndo cl ass i as tr att e, e sfr u tt ando le in te rf acce p er es tr arr e p rop rie tà c o m un i ch e e sc ono d all a c la ss if icaz ion e d ell a g er ar ch ia d i er ed it ar ie tà • ev en tu alm en te ri- u sa re c la ss i e g ra rc h ie p rece d en te m en te d ef in it e o d is pon ib ili i n li b re rie

F a se d i R ea li zz a zi o n e: • sc riv er e le c la ss i d el si st em a e i m et od i

Riferimenti

Documenti correlati

Il Consiglio Superiore della Magistratura con delibera 17 luglio 1991 ha segnalato ai presidenti delle Corti d'Appello ed ai presidenti dei Tribunali l'opportunità di nominare ai

contenute agli artt.4, 5 e 9, sui tempi della fase istruttoria e della decisione, rendono effettivo, nei procedimenti di riconoscimento di infermità o lesione dipendente da causa

CONTENUTI: L’estraneità della materia al comune bagaglio professionale del magistrato impone una trattazione istituzionale e al contempo semplice di principi contabili di

&#34;Come questo Consiglio ha affermato nella risoluzione del 1 dicembre 1994, adottata con il consenso di quasi tutti i suoi componenti e sotto la Presidenza e con il contributo

L’identificazione della circoscrizione dell’ufficio unico del giudice di primo grado con il circondario del tribunale sembra essere, sulla base delle considerazioni sino ad ora

processi in corso e sulla organizzazione giudiziaria, con particolare riferimento alla fase di transizione organizzativa prevista dalla normativa di riforma sul Giudice unico e

«Con nota del 12 giugno 1998 il Ministro di Grazia e Giustizia trasmetteva al Consiglio Superiore della Magistratura la propria circolare, di pari data, emanata per rafforzare

Va notato, piuttosto, che, per il ruolo sovraordinato che la Costituzione assegna al Consiglio nel quadro dell’amministrazione della giurisdizione, quest’ultimo deve esser posto