• Non ci sono risultati.

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 : In tr odu z ion e e C on ce tt o d i C lasse

N/A
N/A
Protected

Academic year: 2021

Condividi "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 : In tr odu z ion e e C on ce tt o d i C lasse"

Copied!
18
0
0

Testo completo

(1)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI1

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 : In tr odu z ion e e C on ce tt o d i C lasse

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

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI2

IL C O NC E T T O D I C L A SSE

U n a c la ss e d es cr iv e le p rop rie tà d i un in si em e d i “ogg etti ” a v en ti: • la m ed es im a st ru tt u ra in te rna • lo st ess o p ro to co ll o d i a cce ss o ( in si em e d i op er az ion i) • lo st ess o co m po rt a m en to

R iun is ce le p ro p ri et à d i:co m po n en te so ftw a re → può ess er e do ta to d i suo i p rop ri da ti e op er a zi on iti p i d i da to a st ra tt o (A D T ) → f ung e d a “ st am po ” p er cr ea re nuov e is tan ze d i ogg etti • m od u lo e ce n tr o d i se rv iz i → r iun is ce d ati e re la ti v e op er az ion i (s er v iz i) → f o rn is ce m ecca n is mi d i p ro tez ion e

I L IN G UA GG I AD OGG E TT I

F o rn is cono co m e a st raz ion e b as e la po ss ib ilit à d i d ef in ir e c la ss i, d i m ett er e in re laz ion e le c la ss i t ra mit e e re d it ar ie tà , d i i st an zi ar e ogg etti a p ar ti re d all a c la ss e.

• L ingu agg i ad O gg etti "pu ri" : l a c la ss e e g li ogg etti sono le un ic h e, o qu as i, as tr az ion i d el li ngu agg io (S m allt al k , Ja v a)

• L ingu agg i ad O gg etti "non pu ri" : agg iungono l'a st raz ion e d i cl ass e e ogg ett o ai co st ru tti t ra d iz ion ali d ell a p rog ra mm az ion e (C ++ , O b jec t P as ca l, OO C O B O L )

(2)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI3

IL L IN G UA GG IO J A V A • È un li ngu agg io a ogg etti pu ro : t ra nn e i ti p i p rimiti v i d i b as e (

int

,

float

, … ), tu tt o il re st o in un a a pp li caz ion e sono ogg ett o app ar te n en ti a c la ss e • È fo rte m en te is p ir at o al C ++ , m a rip rog ett at o se n za il re qu is it o d ell a p ie na co m pa ti b ilit à co l C (a c u i p er ò ass o mi g li a… ) • U n p rog ra mm a è un in si em e d i cl a ss i: non es is tono fun zi on i d ef in it e (c o m e in C ) a li v ell o es te rno : a n ch e il

main

è d ef in it o d en tr o a un a cl a ss e!

J AVA : L IN G UA GG IO O ARC H ITETT URA ?

A d iff er en za d el C ++ , Ja v a v ie n e fo rn it o con un a no te vo le g er ar ch ia d i cl ass i st and ar d g ià p ron te

E ' un' ar ch it ett u ra g ià p ron ta p er l'u so ! • ind ip end en te d a ll a p ia tt a fo rm a • P ac k ag e g ra fic o (ind ip end en te d all a p ia tt af o rm a!) : A W T • P rog ra mm az ion e a e v en ti (m o lt o evo lu ta !) • S uppo rto d i re te : U R L , conn ess ion i v ia S o ck et , … • S uppo rto p er il m u lti -th rea d ing • C on ce tt o d i A PP LET = p icc o la (? ) app li caz ion e d a e se gu ir si d en tr o un b ro w se r I n te rn et • S uppo rto p er si cu rezza • M od ell o d i si cu rezza "s andbox " p er le a pp le t sca rica te v ia re te • C ifr at u ra , cr itt og ra fia , ch ia v i pubb li ch e/ p riv at e… • C onn ess ion e e in te rf acc ia m en to con d at ab as e

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI4

J A V A : S T O R IA

• N as ce n el 1994 d a un p rog ett o (f allit o !) p er la n et w o rk te le v is io n ; • S i d iff ond e sop ra tt u tt o g raz ie a ll e a pp le t, p icc o le (o rig in ar ia m en te ) app li caz ion i es egu it e d en tr o ad un b ro w se r e sca rica te d in ami ca m en te d al WWW se rv er • S i aff er m a n eg li u ltimi ann i co m e li ngu agg io g en er al e p er la p rog ra mm az ion e

M o lt o o rie n ta to al “N et w o rk C o m pu tin g ”: • In te raz ion e c on ogg etti re m o ti (R M I) • In te raz ion e c on B as i d i D ati d is tr ibu it e (J D BC ) • In te raz ion e c on si st emi C O RB A • F o rte in te rc onn ess ion e c on WWW (A pp le t, C G I, Ja v aS cr ip t) .

F u tu ro p ro m ett en te (s i rit o rn a a ll e o rig in i d el p rog ett o ) p er si st em i em b edd ed : • Ja v a C ar d • Ja v a R ing s • Ja v a O p er ati ng S y st em s p er P DA

P o rt a b ili o tt enu ta a tt ra v er so un a v ia in te rm ed ia tr a in te rp re taz ion e e c o m p il az ion e • I p rog ra mmi (le c la ss i) Ja v a sono co m p il at e in un li ngu agg io m acc h in a a st ra tt o (J a va b yt ec od e)

(3)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI5

IL C O S T RU T T O class IN J A V A

D ef in iz io n e d i un a cl a ss e:

classCounter {privateint val;public void reset() { val = 0; }public void inc() { val++; }public void dec() { val--; }public int getValue() { return val; }}

S i po tr anno po i i st an zi ar e ogg etti d ell e c la ss e C oun te r

Counter c1, c2;

E ch ie d er e lo ro se rv iz i:

c1.inc();

if (c2.getValue() == 3) {……};

D a ti ( val ) e op er a zi o n i ( reset , inc , dec , rd ) so n o ri un iti i n un un ic o co st ru tt o li n g u is ti coIl ca m p o d a ti

val

è p ri va to , e può ess er e acce du to so lo da ll e op er a zi on i (m et od i) d ell a cl a ss e ( reset , inc , dec , rd ): ogn i t en ta ti vo d i acce so d all ’e st er no v err à ind iv idu at o e re sp in to d al co m p il at o re !

c2.val = 3; /* ERRORE */

I m et o d i

reset()

,

getValue()

, et c. s o n o pubb li ci , e po ss ono qu ind i ess er e invo ca ti da ch iunqu e → d all ’e st er no ,

val

è m an ipo la b il e so lo tr amit e qu es ti m et od i → s i g ar an ti sce l’ in cap su la m en to . → m odo d i i nvo caz ion e

oggetto

.

metodo

In g en er e: t u tti i d a ti d evono av er e v is ib ili p ri va ta e i m et o d i (m a non n ece ss ar ia m en te tu tti ) d evono av er e v is ib ili pubb li ca .

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI6

P rog ra mm i i n J A V A

• A p ar te un p icc o lo in si em e d i ti p i p rimiti v i p re d ef in iti , un p rog ra mm a Ja v a è d ef in it o d a un in si em e d i cl ass i e, du ra n te l’ es ec u zi on e, d ag li ogg etti ch e d a ta li cl ass i v err anno is ta n zi ati • L e c la ss i sono en tit á st a tic h e, ch e sono d ef in it e p rim a d ell a es ec u zi on e. N on es is te nu ll a c h e non si a d ef in it o all ’in te rno d i qu al ch e c la ss e; • G li ogg etti sono en tit á d in a m ic h e ch e a ss u m ono es is te n za a p ar ti re d all e c la ss i du ra n te l’ es ec u zi on e. • C i d ev e e ss er e un a so la c la ss e fun zi on e pubb li ca d i no m e m ai n , all ’in te rno d i un a c la ss e c on la se gu en te in te rf acc ia :

public static void main(String args[])

• S i d ic h ia ra la li st a d eg li ar go m en ti an ch e se non ce n e sono • Il m ai n d ev e n ece ss a ri a m en te ess er e d ef in it o d en tr o a un a cl ass e pubb li ca e h a obb li ga to ri a m en te la fo rm a

public static void main(String args[]){...}

• A d iff er en za d el C , non c’ è v al o re d i rit o rno , m en tr e g li ar go m en ti d all a li n ea d i co m ando sono ogg etti

String

(il p rim o non è il no m e d el p rog ra mm a c o m e in C )

C O NV E N Z IO N I: • I no mi d ell e c la ss i sono p er conv en zi on e m ai u sc o li • I no mi d i m et od i, v ar ia b ili e ogg etti p er conv en zi on e sono mi nu sc o li

NO T A : U n a fun zi on e se n za p ar am et ri v ie n e d ef in it a se n za la p ar o la vo id n ell a li st a d ei p ar am et ri. E se m p io :

public void inc() { val++; }

(4)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI7

H e ll o W o rl d (I)

/** File Esempio0.java* Applicazione Java da linea di comando* che stampa la classica frase di benvenuto@author Enrico Denti@version 1.0, 5/4/98*/

public class Esempio0 {

public static void main(String args[]){System.out.println("Hello World!");}}

E si st e un a co rr is p o nd en za b en p rec is a fr a no m i d ell e c la ss i e no m i d i fil e: • in un fil e so rg en te c i può ess er e un ’un ica c la ss e pubb li ca , c h e d ev e a v er e lo st ess o n o m e d el fil e (ca se -s en siti v e!)

O gn i fil e so rg en te im po rta a u to m ati ca m en te la li b re ria fond am en - ta le

java.lang

: •

System

è un a c la ss e d i si st em a, ch e ra pp re se n ta "il si st em a so tt o st an te ", qu al unqu e e ss o si a •

out

è un ogg ett o (s ta ti c) d ell a c la ss e

System

, e ra pp re se n ta il d is po siti vo st and ar d d i u sc it a • su ll 'ogg ett o

out

è po ss ib il e invo ca re il m et odo

println()

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI8

H e ll o W o rl d (II )

/** File Esempio0.java

* Applicazione Java da linea di comando* che stampa la classica frase di benvenuto@author Enrico Denti@version 1.0, 5/4/98

*/// questo e’ commento su una sola linea stile C++/* questo e’ il commento stile C normale */public class Esempio0 {public static void main(String args[]){System.out.println("Hello World!");}}

• P er co m p il ar e:

javac Esempio0.java

(p rodu ce

Esempio0.class

) • P er es egu ir e:

java Esempio0

• Il fo rm at o co m p il at o .c la ss (b yt ec od e J a va ) è po rt ab il e e in d ip en d en te da ll a p ia tt a fo rm a • un a c la ss e c o m p il at a su un si st em a fun zi on er à su qua lun qu e a lt ro si st em a (M ac , U n ix , W indo w s… ) p er cu i si a d is pon ib il e il Ja va R un ti m e E n vi ron m en t (n ell a st ess a v er si on e) • il fo rm at o co m p il at o d i Ja v a (b y tec o d e) v ie n e in te rp re ta to da ll a Ja va V ir tua l M a ch in e tr amit e l'i n te rp re te Ja v a • S un re nd e d i pubb li co do mi n io il co m p il at o re c h e si l an ci a java c e la m acc h in a c h e si l an ci a c on il co m ando java . N O N F O R N IS C E A M B IE N T I D I S V IL U PP O G RAF IC I I N T E G RA T I (B IS OG N A C O M PRAR L I!)

H e ll o W o rl d (III )

(5)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI9 /** File Esempio0.java* Applicazione Java da linea di comando* che stampa la classica frase di benvenuto@author Enrico Denti@version 1.0, 5/4/98 *//* i commenti che iniziano con /** servono pergenerare i file di documentazione */public class Esempio0 {public static void main(String args[]){System.out.println("Hello World!");}}

Ja v a c on se n te d i g en er ar e a u to m ati ca m en te la do cu m en taz ion e d el le c la ss i con te nu te n el fil e (limit at am en te a qu ell e non p riv at e) :

javadoc Esempio0.java

Il ri su lt a to è un in si em e d i fil e H T M L ( il fo rm at o es att o d ip end e d all a v er si on e)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI10

G L I AR GO M E N T I

/** File Esempio1.java* applicazione da linea di comando* stampa gli argomenti passati al programma@author Enrico Denti@version 1.0, 9/11/97*/

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]); }}

String

è un a c la ss e p re d ef in it a: l e st ringh e Ja v a sono ogg etti , non p ezz i d i m em o ria a ss egn at a a un pun ta to re c o m e in C • L ’op er at o re

+

è p re d ef in it o su ll e st ringh e, e se rv e a con ca te n ar le • ar g s è un v ett o re (d i st ringh e) : co m e tu tti i v ett o ri Ja v a, è un ogg ett o , il cu i ca m po (pubb li co )

length

i nd ica il nu m er o d i el em en ti (nu m er ati d a 0 a

length

-1 )

________________________________________

UNA R IF LE SS IO N E

F ino ra , g li un ic i co m pon en ti d el no st ro si st em a sono cl ass i, ci o è ogg etti d ef in iti st ati ca m en te , la c u i es is te n za è no ta a p rio ri. I si st emi rea li ric h ie dono p er ò un a m agg io re d in ami cit à.

(6)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI11

C rea z ion e e u s o d i ogg e tt i C oun te r

/** File Esempio2.java * Prima applicazione che istanzia nuovi oggetti @author Enrico Denti @version 1.0, 5/4/98 */

classCounter {privateint val;public void reset() { val = 0; }public void inc() { val++; }public void dec() { val--; }public int rd() { 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());}

•Compilando questo file, si ottengono due file.class, uno per ogni classe definita(Esempio2.class e Counter.class)

• L a fr as e

Counter c1;

in tr odu ce un ri fe rim en to a

Counter

, ci o è un a so rta d i pun ta to re c h e p er ò non è d ir ett am en te m an ipo - la b il e d all ’u te n te e si u sa se n za do ve rl o d er ef er en zi a re e sp li ci - ta m en te c o m e in C o C ++ (v ed i

*p

o

p->inc()

) • Il

Counter

v er o e p rop rio v ie n e c rea to d in ami ca m en te a ll ’a tt o d ell a

new

, ed è v is ib il e fi no a ll a fi n e d el b lo cc o in cu i è d ef i- n it o . L a d ea ll o caz ion e è a u to m ati ca e g es tit a d al ga rb ag e co ll ec to r d i Ja v a sec ondo le su e po liti ch e. • u so d ell e is ta n ze m ed ia n te uno stil e a “ inv io d i m ess agg i”

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI12

I C O S T RU T T O R I

M o lti err o ri n el so ftw ar e sono ca u sa ti d a m an ca te in iz ia li zzaz ion i d i v ar ia b ili ai v al o ri i n iz ia li p re v is ti . P er ovv ia re a c iò , m o lti li ngu agg i a ogg etti d ef in is cono il con ce tt o d i m et o d o co st ru tt o re , ch e a u to m a tizz a l’ in iz ia li zz a zi o n e d ell e is ta n ze .

Il co st ru tt o re :n o n v ie n e m a i ch ia m a to es p li ci ta m en te d a ll ’u te n te , m a so lo au to m ati ca m en te d al si st em a a ll ’a tt o d ell a c reaz ion e d i un a nuov a is ta n za . S i po ss ono qu ind i p ass ar e p ar am et ri qu ando d i cr ea un nuovo ogg ett o , co rr is pond en ti ai p ar am et ri d el m et odo co st ru tt o re • h a un n o m e fiss o (ugu al e a l no m e d ell c c la ss e) • n o n h a tip o d i ri to rn o (il suo sc opo non è ca lc o la re qu al co sa , m a in iz ia li zza re un ogg ett o ) • pu ò n o n ess ere un ic o . S p ess o v i sono p iù co st ru tt o ri, con d iv er se li st e d i ar go m en ti: il si st em a ric ono sce a u to m ati ca m en te qu al e invo ca re su ll a b as e d ei p ar am et ri p ass ati all 'a tt o d ell a cr eaz ion e.

S e non n e v ie n e d ef in it o n ess uno , si g en er a a u to m ati ca m en te un co st ru tt o re d i d ef au lt (s en za a rgo m en ti ), ch e non fa nu ll a.

E S E M P IO (r id ef in iz ion e d ell a c la ss e

counter

)

classCounter {private int val;public Counter() { val=1; } // defaultpublic Counter(int x) { val=x; }public void reset() { val = 0; }public void inc() { val++; }public void dec() { val--; }public int rd() { return val; }}

(7)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI13

L ’E S E M P IO P R E C E D E N TE ri st ru tt u ra to

/** FILE Counter.java * Questa classe definisce il concetto dicontatore avanti/indietro. @author Enrico Denti @version 1.0, 8/3/99 */public class Counter {private int val;public Counter() { val=1; } // defaultpublic Counter(int x) { val=x; }public void reset() { val = 0; }public void inc() { val++; }public void dec() { val--; }public int rd() { return val; }}

/** FILE Esempio2bis.java * Prima applicazione che istanzia nuovi oggetti @author Enrico Denti @version 1.0, 8/3/99 */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());}}

• L a c la ss e

Counter

, re sa pubb li ca , è o ra in un fil e se p ar at o n ell o st ess o d ir ett o rio • Il m ai n può u sa re la c la ss e

Counter

s en za d ov er in cl ud ere nu ll a : Ja v a suppo rta il co ll ega m en to d in a mi co ! A l p rim o u so d i

Counter

, il fil e

Counter.class

v err à ce rca to e ca rica to → a d att o a cod ice m ob il e e app li ca zi on i su In te rn et NON E S IS T E IL C ON CE TT O D I L IN K ING S T A T IC O !!!!

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI14

L ’I S T AN Z A C O RR E N T E : T H IS

L a p ar o la c h ia v e

this

c o stit u is ce un rif er im en to all ’is ta n za co rr en te , e può se rv ir e: • p er ind ica re un ca m po d ati i n ca so d i o m on imi a c on un p ar am et ro o con un a v ar ia b il e lo ca le • in un co st ru tt o re , p er r ic h ia m ar e un alt ro co st ru tt o re d ell a st ess a cl ass e.

E S E M P IO (r id ef in iz ion e d ell a c la ss e

Counter

)

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; }}

• Il co st ru tt o re

Counter(int val)

u tili zza

this

p er d is ti n gu e- re il p ar am et ro

val

d al ca m po d ati d i no m e

val

( ch e v ie n e es p re ss o con la no taz ion e

this.val

) • Il co st ru tt o re

Counter()

u tili zza

this(1)

p er d el eg ar e la co st ru zi on e d ell ’ogg ett o all ’a lt ro co st ru tt o re d ell a st ess a c la ss e • N B : l a si n ta ss i

this()

p er ch ia m ar e un alt ro co st ru tt o re puó ess er e u sa ta so lo co m e p ri m a is tr u zi on e d i un co st ru tt o re .

(8)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI15

OGG E TT I C O M P O S T I

D a qu an to d ett o fino ra dov re bb e ris u lt ar e c h ia ro ch e un ogg ett o pu ò co n te n ere (r if er im en ti a ) a lt ri ogg ett i • l’ ogg ett o "c on te n it o re " può u sa rli ... • .. m a n o n p u ò a cce d er e ai l o ro da ti p ri va ti • può p er ò acce d er e a i d ati pubb li ci e a i suo i m et od i

In fa se d i co st ru zi o n e:p ri m a s i co st ru is ce l’ ogg ett o con te n it o re • po i si co st ru is cono , con

new

, g li ogg etti i n te rn i

E S E M P IO

class Counter {int val;public Counter() { val=1; }public void inc() { val++; }public int rd() { return val; }}

public class DoppioCounter {// oggetto contenitore

Counter c; // oggetto contenuto

public DoppioCounter() {c = new Counter();}

public void inc(){c.inc(); c.inc();}

public int rd() {return c.rd();} }

}

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI16

T IP I P R IM IT IV I, C L A SS I, OGG E TT I

In Ja v a si d is ti ngu e fr a • tip i p ri m it iv i: boo lea n , ch ar , by te , sho rt, in t, long , flo at , doub le • C la ss iri fer im en ti a ogg ett i.

T IP I P R IM IT IV I

TipoDescrizioneDefaultSizeRangeBooleantrue o falseFalse1 bit-Charcarattere UNICODE\u000016 bit\u0000 - \uFFFFByteintero con segno08 bit-128 - 127Shortintero con segno016 bit-32768 - 32767Intintero con segno032 bit -2 31 - 2 31-1Longintero con segno064 bit -2 63 - 2 63-1FloatIEEE-754 float0.032 bit-10 -45 - 10 38

DoubleIEEE-754 double0.064 bit-10 -324 - 10 308

• i ca ra tt er i UN IC OD E sono con si d er ati se n za se gno , e o ffr ono am p io suppo rto all ’in te rn az io n ali zzaz ion e, e sono A S C II co m p ati b ili (s u i p rimi 256 ); v al gono ino lt re i cl ass ic i “e sca p e a ll a C ”:

'\n'

,

'\''

,

'\t'

• la nuov a no taz ion e

'\u0040'

c on se n te d i es p rim er e un ca ra t- te re UN IC OD E tr amit e 4 ci fr e e sa d ec im ali • in Ja v a non sono a mm ess i ti p i co m e

long int

,

short int

, et c: i no mi co rr etti sono se m p li ce m en te

long

,

short

, et c.

I ti p i p rimiti v i si m an ipo la no co m e va lo ri , con la st ess a se m an ti ca d el C e d i alt ri li ngu agg i. Q u ind i, qu ando si p ass ano all e fun zi on i v engono p ass ati p er cop ia .

(9)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI17

R IF E R IM E N T I A OGG E TT I In Ja v a, a d iff er en za d ei ti p i p rimiti v i g li ogg etti si m an ipo la no es cl u si va m en te tr a m it e rif er im en ti . N on è po ss ib il e d ef in ir e is ta n ze d i ogg etti (v ar ia b ili ) all o ca te st ati ca m en te , tu tt o d ev ’e ss er e all o ca to d in ami ca m en te c on

new

.

A tu tti g li eff etti i rif er im en ti sono co m e pun ta to ri, ind ir izz i d i m em o ria , m a sono d er ef er en zi a ti au to m a ti ca m en te ( non co m e in C , *p ), e non re ndono v is ib il e n é m an ipo la b il e l’ ind ir izz o .

U n a fr a se d el tip o c2 = c1 fa pun ta re i du e r if er im en ti a ll o st ess o ogg ett o , n o n d u p li ca l’ ogg ett o st ess o !

E S E M P IO

/**

* verifica il concetto di Riferimento a oggetti@author Enrico Denti@version 1.0, 5/4/98*/class Point {public int p1; public int p2; …}

class Esempio3 { // contiene solo il mainpublic 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);

p1.x = 400;

System.out.println("p1: " + p1.x + "," + p1.y); System.out.println("p2: " + p2.x + "," + p2.y);}}

• O gn i m od if ica a

p1

s i rit rov a a n ch e in

p2

, a te stim on ia n za c h e i du e sono so lo rif er im en ti ch e re fe re n zi ano lo st ess o ogg ett o .

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI18

R IF E R IM E N T I A OGG E TT I e P A SS A GG IO P ARA M E T R I

I p ar am et ri p ass ati n ell e invo caz ion i d i m et od i sono p ass ati p er cop ia . N on es is te il p ass agg io d i p ar am et ri p er r if er im en to . QU IND I: ch ia m ando un m et odo a c u i p ass ia m o un rif er im en to ad ogg etti , sti am o p ass ando in v er it à la c op ia d i un rif er im en to .

E S E M P IO

// funzione di una qualche classe…void swap (Point p1, Point p2){ Point pTemp;

pTemp = p1; p1 = p2; p2 = pTemp;}

• Q u es ta fun zi on e non fa a ss o lu ta m en te n el ch ia m an te , p er ch é abb ia m o se m p li ce m en te fa tt o lo sc a m b io su ll e c op ie d ei rif er im en ti , m a i rif er im en ti o rig in ali rim angono inv ar ia ti .

E S E M P IO 2

// funzione di una qualche classe…void swap_correct (Point p1, Point p2){ Point pTemp; pTemp.x = p1.x; pTemp.y = p1.y p1.x = p2.x; p1.y = p2.y p2.x = pTemp.x; p2.y = pTemp.y;}

• Q u i abb ia m o m od if ica to i v al o ri d eg li ogg etti rif er iti , ch e sono g li st ess i d el ch ia m an te , an ch e se i rif er im en ti sono un a c op ia . Il ch ia m an te V E D E le m od if ic h e.

(10)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI19

C L O NA Z IO N E D I OGG E TT I

P er dup li ca re un ogg ett o o cc o rr e d ef in ir e un m et odo sp ec if ic o

clone()

, ch e p rovv ed e a dup li ca re l'ogg ett o

p2 = p1.clone();

E S E M P IO

class Point {…}

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 = p1.clone();

p1.x = 400;

System.out.println("p1: " + p1.x + "," + p1.y); System.out.println("p2: " + p2.x + "," + p2.y);} }

Il m et odo cl on e() sa rà qu al co sa d el g en er e:

Point public clone(){Point p2 = new Point();p2.x = x;p2.y = y;return p2;}

• In qu es to m odo ,

p2

r im an e in alt er at o al v al o re (100 ,10 ), m en tr e

p1

v ie n e m od if ica to in (400 ,10 ). • In v er it á il m et odo

clone

() è p re d ef in it o p er tu tti g li ogg etti , m a è m o lt o co m p li ca to d a u sa re e d è tr oppo fac il e u sa rlo in m odo sc o rr ett o . M eg li o rid ef in ir lo co m p le ta m en te !!

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI20

U G UA G L IAN Z A D I OGG E TT I

P o ic h é le v ar ia b ili Ja v a sono rif er im en ti , un te st d i u g u ag li a n za d el tip o c1 == c2 v er if ic a se du e r if er im en ti pun ta n o a ll o st ess o ogg ett o , n o n se d u e ogg etti h a nn o lo st ess o va lo re !

P er con tr o ll ar e se du e ogg etti h anno lo st ess o v al o re d i u sa il m et odo

equals()

, pu re p re d ef in it o p er tu tt e le c la ss i:

E S E M P IO

/**

* verifica il concetto di uguaglianza fra oggetti@author Enrico Denti*/class 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 = p1.clone(); p1.x = 400;

System.out.println("p1==p2? ” + (p1==p2)); System.out.println("p1.equals(p2)? ” +p1.equals(p2));} }

R is po st a:

p1==p2? truep1.equals(p2)? truep1==p2? Falsep1.equals(p2)? false

(11)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI21

T IP I P R IM IT IV I e C L A SS I

S p ess o è n ece ss ar io tr att ar e i ti p i p rimiti v i co m e ogg etti (a d es em - p io , p er p ass ar li p er r if er im en to a un a fun zi on e, m a non so lo ).

A qu es to se rvono le “ w ra p cl a ss es ”, un a p er ogn i ti po p rimiti vo , ch e in p ra ti ca “ in ca p su la no ”un ti po p rimiti vo :

TipoClasse corrispondentebooleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble

• a p ar te l’ in iz ia le , la c la ss e h a qu as i se m p re lo st ess o no m e d el ti po p rimiti vo , tr ann e

char

/

Character

e

int

/

Integer

• le c la ss i fo rn is cono m et od i p er conv er ti re d al ti po p rimiti vo a un ogg ett o d ell a c la ss e, e v ice v er sa

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 }}

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI22

S T R IN G H E IN J A V A In Ja v a, le st ri ngh e sono ogg etti , is ta n ze d ell a c la ss e

String

: un a

String

r app re se n ta uno sp ec if ic o v al o re , ed è qu ind i un ogg ett o non m od ifi cab il e.

In Java un a

String

n o n è un bu ff er m o d if ic a b il e!!

P er imm ag azz in ar e st ringh e m od if ica b ili si u sa

StringBuffer

.

L e st ringh e po ss ono ess er e c on ca te n at e c on l’ o p er a to re +

L a c on ca te n az ion e d i co st an ti st ring a è fa tt a a co m p il e- ti m e, qu ind i non in tr odu ce in eff ic ie n ze .

• Q u ando si sc rivono co st an ti st ring a fr a v ir go le tt e (e s.

“ciao”

), v ie n e c rea to au to m ati ca m en te un ogg ett o

String

i n iz ia li zza to a ta le v al o re . • U n a c o st an te st ring a non può ecce d er e la rig a: dov endo sc riv er e co st an ti p iù lungh e, è oppo rtuno sp ezza rle in p ar ti p iù co rte e con ca te n ar le c on l’ op er at o re + .

A tt en zi o n e: la se lez ion e d i un ca ra tt er e si fa tr amit e il m et odo

charAt()

, non con l’ op er at o re [] co m e in C o C ++ !

String s = “Nel mezzo del cammin “;char ch = s.charAt(3);

E si st ono d ec in e d i op er at o ri p re d ef in iti su

String

: si v ed a la do cu m en taz ion e p er m agg io ri d ett ag li .

(12)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI23

S T R IN G H E IN J A V A : L A L IBR E R IA

E cc o al cun e d ell e op er az ion i d is pon ib ili p er g li ogg etti d i ti po st ring a.

__________________________________________char charAt(int index)

R it o rn a il ca ra tt er e a qu ell a sp ec if ica lo caz ion e _____________________________________________

boolean endsWith(String suffix)

R it o rn a v er o se la st ring a te rmi n a c on qu el su ff iss o _____________________________________________

boolean beginsWith(String prefix)

R it o rn a v er o se la st ring a c o mi n ci a c on qu el p re fiss o ___________________________________________

boolean equals (Object other)

R it o rn a v er o se la st ring a e ' ugu al e a o th er _____________________________________________

String substring (int beginindex)String substring (int beginindex, int endindex)

R it o rn a la so tt o st ring a c o m p re sa tr a in ca ra tt er e d i i nd ice b eg in ind ex e a ) la fin e b ) il ca ra tt er e d i i nd ice e nd ind ex _____________________________________________

int lenght()

R it o rn a la lungh ezza d ell a st ring a _____________________________________________

String toLowerCase()String toUpperCase()

T o rn a un a st ring a tu tt a in mi nu sc o lo /m ai u sc o lo

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI24

ARR A Y IN J A V A In Ja v a, g li a rr a y sono ogg etti : non es is te un v er o no m e d i cl ass e, in qu an to sono id en ti fica ti d all ’op er at o re

[]

.

D ef in ire un a rr ay Java si g n if ic a d ef in ire un ri fe rim en to : l’ arr ay v er o e p rop rio v a c rea to con

new

(a m eno ch e non si a sp ec if ica to tr amit e un a c o st an te )

L a lungh ezza d ell ’a rr ay è ind ica ta d al ca m po (pubb li co e non m od if ica b il e)

length

d ell ’a rr ay st ess o .

E S E M P IO

/*** Primo esempio d’uso di array in Java@author Enrico Denti@version 1.0, 5/4/98 */

class Esempio5 {public static void main(String args[]){

int[] v1 = {8,12,3,4}; // vettore di 4 intint[] v2; // riferimento a un vettore di int

v2 = new int[5]; // creazione vett. di 5 int// (crea 5 celle int, inizializzate a 0)

for(int i=1; i<=v2.length; i++) v2[i-1] = i*i;

for(inti=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');}}

(13)

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI25

ARR A Y IN J A V A (II )

A tt en zi o n e: C re a re un a rr ay (c o n

new

) si g n if ic a cre a re • N ce ll e d i un ti po p rimiti vo , se l’ arr ay è d i ti p i p rimiti v i • N ri fe rim en ti a ogg ett i (t u tt i

null

) se l’ a rr ay è d i ogg ett i

N el sec ondo ca so , qu ind i, i si ngo li ogg etti do vr anno ess er e c re a ti es p li cit a m en te c on

new

s e d el ca so .

E S E M P IO

/*** Secondo esempio d’uso di array Java@author Enrico Denti@version 1.0, 5/4/98 */

class Esempio5bis {public static void main(String args[]){

String 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}}

Franco Zambonelli Enrico Denti - INTRODUZIONE ALLA OOP IN JAVA: LE CLASSI26

M E T O D I D I C L A SSE

F ino ra , i m et od i d ef in iti d en tr o a un a c la ss e (a p ar te il

main

… ) er ano d es ti n ati a e ss er e invo ca ti su un ’is ta n za d i qu ell a c la ss e:

class Counter {private int val;public Counter() { val=1; }public Counter(int x) { val=x; }public void reset() { val = 0; }public void inc() { val++; }public void dec() { val--; }public int rd() { 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()); }}

U n a a pp li caz ion e Ja v a, p er ò , con si st e d i is tan ze e cl a ss i.

D at o ch e Ja v a non con se n te d i d ef in ir e fun zi on i “e st er n e” c o m e in C , le c la ss i Ja v a fungono an ch e d a con te n it o ri d i fun zi on i.

T ali m et od i non sono d es ti na ti a ess er e in vo ca ti su is tan ze d ell a cl ass e, m a co m e se m p li ci f un zi on i st and -a lon e” , ch e fo rn is cono fun zi on alit à u tili (e in qu al ch e m odo co rr el at e c on la c la ss e)

T a li m et o d i si d ic o n o m et od i d i cl a ss e (

static

) Il

main

è il ca so p iù ec la ta n te d i m et odo

static

.

Riferimenti

Documenti correlati

Concessione al Cliente (Debitore Ceduto) di una ulteriore dilazione di pagamento, a titolo oneroso, rispetto ai termini di pagamento pre- visti in fattura, e/o

Ordinamento generale e servizi di biblioteca, il libro manoscritto antico-medievale- moderno, Biblioteca Digitale, principi e metodi di conservazione e restauro del libro,

d) dai soggetti di cui all'articolo 46. Gli incarichi di progettazione, coordinamento della sicurezza in fase di progettazione, direzione dei lavori, direzione dell'esecuzione,

Affidamento diretto incarico per indagine Geologica, modellazione geotecnica e caratterizzazione sismica per la costruzione di un campo polivalente da realizzare a

La selezione dei candidati (anche di un solo candidato qualora vi sia una sola domanda pervenuta) sarà effettuata da una Commissione composta da tre membri. Le funzioni di

Il seminario rientra nel progetto “Sbocchi Oc- cupazionali”, pensato dal- la Difesa, a sostegno della ricollocazione professiona- le prevista a favore dei militari

Sulla base dei dati disponibili, i criteri di classificazione non sono soddisfatti... Gravi danni

65T del 10/07/2019 ad oggetto: “Servizio di progettazione, direzione lavori, coordinamento della sicurezza lavori di riqualificazione e adeguamento caldaie dell’edificio comunale