Sunteți pe pagina 1din 40

Structuri de Date n JAVA (II)

Programarea orientat obiect n Java Clas. Variabile membre. Crearea obiectelor i!uri !rimitive. Constructori. "etode Controlul e#ecu$iei Vectori. Probleme la utili%area obiectelor Pac&ete. 'eglementarea accesului Variabile. 'e(erin$e Variabile membre statice. "etode statice Domeniu de e#isten$

Programarea *rientat *biect

*biectele au stare o !ersoan este un obiect caracteri%at de nume+ v,rst+ C-P Programatorii c&eam metodele obiectelor !entru a reali%a calcule .i a modi(ica aceast stare !rogramator/ ce v,rst ai0 obiect/ am )) !rogramator/ a%i e %iua ta1 obiect/ atunci mi incremente% v,rsta cu 1
)

3n !rogram JAVA
package hello; import java.util.System; class HelloWorld { String myString; void shout () { myString = new String (Hello world); System.out.println (myString); } public static void main (String ! args) { HelloWorld myHelloWorld = new HelloWorld (); myHello"orld.shout (); }

Clas
5ablon !entru generarea obiectelor Java e un limba6 orientat obiect+ deci orice este o clas

class HelloWorld 7

88 numele clasei

... 9de(ini$ii de metode .i variabile membre: ... ;


4

Variabil membr
Descrie starea obiectului

class =uman 7 int age> ; 9ti!ul clasei: 9numele variabilei:>


<

Crearea obiectelor
Human bob @ new Human ()> Crearea obiectelor se (ace cu o!eratorul AnewB *biectul @ instan$ a clasei bob este o re(erin$ la obiect (adres) Se asigneaz obiectul construit variabilei bob

9ti!: 9nume variabil: @ 9obiect nou:>


?

))

De ce nu a trebuit s scriem 00

bob.age @ neD int ()))>

i!uri !rimitive

-u orice este un obiect

3nele lucruri sunt !rea sim!le .i !rea (recvent utili%ate ca s le considerm obiecte/ boolean+ s&ort+ bFte+ int+ long+ double+ (loat+ c&ar

Clase Dra!!er
i!urile !rimitive nu sunt clase derivate din clasa *b6ect Pentru a le trata similar cu obiectele le asociem clase Clasa asociat unui ti! !rimitiv se nume.te clas wrapper

Wrapper class Byte Short Integer Long Float Double Character Boolean

Constructor public Byte(byte value) public Short(short value) public Integer(int value) public Long(long value) public Float(float value) public Double(double value) public Character(char value) public Boolean (boolean value)

Accesor method public byte byteValue () public short shortValue() public int intValue () public long longValue () public float floatValue () public double doubleValue () public char charValue () public boolean booleanValue ()

Iolosirea claselor Dra!!er


int i @ 4)> int 6> Integer e#am!le @ new Integer (i)> 6 @ e#am!le.intValue ()> Integer a @ )> Integer b @ 1)> Integer c @ a J b> int r @ a.intValue () J b.intValue ()> Integer d @ new Integer (r)> 1H

88 e#am!le co!ia%a valoarea 4) 88 6 este acum 4)

88 este o absurditate> 88 KJK nu se !oate (olosi 88 varianta corect

Variabila membr myString


package hello; import java.util.System; class HelloWorld { String myString; void shout () { myString = new String (Hello world); System.out.println (myString); } public static void main (String ! args) { HelloWorld myHelloWorld = new HelloWorld (); myHello"orld.shout (); }

11

"etode

Procesea% starea obiectului

9ti! returnat: 9numele metodei: ( 9!arametri: ) 7 9cor!ul metodei: ; mF=elloLorld.s&out ()> 88 se (olose.te K.K !entru a accesa metoda
1)

Constructori
Constructorii sunt metode s!eciale nu au ti! returnat se (olosesc !entru a ini$iali%a variabilele membre !rimesc !arametri+ au cor! al metodei+ dar nu au return

12

Cor!ul metodei
String firstname (String (ullname) 7 int s!ace @ (ullname.inde#*( (A A)> String Dord @ (ullname.substring (H+ s!ace)> return Dord> ; oric,$i !arametri declar variabile locale returnea% un singur lucru (void @ nu ntorc nimic)

14

Di(eren$a ntre declara$ie .i de(ini$ie


88 declarare variabil c ca re(erin$ de ti! clas Cutie Cutie c> 88 variabila c are valoarea null ... c @ new Cutie ()> 88 deMabia aici sMa creat obiectul oate variabilele declarate au im!licit valoarea H 'e(erin$ele se ini$iali%ea% tot cu H (null) Dac (olosim o re(erin$ neMcreeat nc se va arunca o e#ce!$ie NullPointerException

1<

Cutie a; Cutie b; a = new Cutie (); a.deschide ();

Cutie a

null

Cutie b

null null

Cutie a

Cutie b

b = a;

Cutie a

Cutie b

b.deschide ();

Cutie a

Cutie b

1?

Controlul e#ecu$iei
if (bob.age 9 )1) 7 88 nu e(ectuea% ; else if (bob.&asCard ()) 7 88 ( altceva ; else 7 88 n rest ; if (!redicat) 7 ... ; else if (!redicat)) 7 ... ; else if (!redicat2) 7 ... ; else if (!redicat-) 7 ... ; else 7 ... ;

1C

Predicate
Predicatele se evaluea% (ie la true (ie la false (boolean) 9+ :+ @@+ 9@+ :@+ 1

bo#.isNm!tF () bo#.numberOooPs () @@ H 1(bo#.numberOooP () : 1) bo#.numberOooPs () 1@ "AQR-3"ON'RO**SS


1E

Oucla (or
for (int i @ H > i 9 2 > i JJ) 7 SFstem.out.!rintln (i)> ; 88 ti!re.te H 1 )

for (9ini$iali%are: > 9!redicat: > 9incrementare: ) 7 se e#ecut de (iecare dat o singur dat *!rirea se (ace n momentul c,nd !redicatul devine (alse.
1G

Oucla D&ile
int i @ H> while (i 9 2) 7 SFstem.out.!rintln (i)> i @ i J 1> ; while (9!redicat:) 7 ... ;
)H

Combinarea !redicatelor
TT este 5I logic UU este SA3 logic

a. bob.age :@ )1 TT bob.&asCard () b. 1someone.name.eVuals(AOobB) c. (1true UU (alse) TT true


)1

Vectori
Vectorii sunt tot obiecte+ dar s!eciale+ !recum ti!urile !rimitive

String WX !ets @ new String W)X> !etsWHX @ new String (AIlu((FB)> !etsW1X @ AS!otB> 88 .irul e#ist de6a StringWX !ets @ new String WX 7AIlu((FB+ AS!otB;> SFstem.out.!rintln (!ets.lengt&)> 88 a(i.ea% )
))

C,te ti!uri avem 0

Primitive int a @ 2 J <> *biecte Integer a @ neD Integer (2)> Integer sum @ a.add (<)> Vectori

)2

*biectele !ot cau%a !robleme1


!etsW2X :: !rogramul se o!re.te+ se arunc e#ce!$ia ArraF*ut*(Oounds

StringWX str> str.lengt& :: o!rire+ arunc -ullPointerN#ce!tion

Integer a @ neD Integer (2)> a.add (<)> a @ a.add (<)>

88 a !rime.te 2 88 a rm,ne 2 88 a !rime.te E

)4

PacPages (!ac&ete)

!ac&et Y asamblea% m!reun mai multe clase ((i.iere .6ava) numele !ac&etului Y domeniu Internet ce !re(i#ea% numele ales+ de e#em!lu/ edu.colorado.simulations 8&ome8user8classes ro unitbv vega (i.iere .6ava (i.iere .class

package ro.unitbv.vega;

export CLASSPATH=$CLASSPATH: ho!e user c"asses

)<

Declararea .i (olosirea !ac&etelor


## $isierul% &utie.java ## de'lararea pa'hetului package ro.unit(v.vega; public class &utie { ## ... } ## a'east) 'las) se vede *n a+ara ## pa'hetului

## $isierul% ,est&utie.java ## de'laratie de import pentru toate 'lasele pa'hetului import ro.unit(v.vega.-; ## sau pentru o singura 'lasa% ## import ro.unit(v.vega.'utie;

)?

Pac&ete .i reglementarea accesului

!ac&etul 6ava.lang este im!ortat im!licit (de e#em!lu+ aici se a(l declarat obiectul SFstem) ti!uri de acces acces !ublic (clas .i !ac&et) acces !rivate (doar n clas) acces !acPage (!ac&et) Y nu se s!eci(ic nimic nainte de cuv,ntul c&eie class> clasa nu mai este vi%ibil n e#terior+ ci numai claselor din interiorul !ac&etului acces !rotected ((olosit !entru e#tinderea obiectelor Y mo.tenire)

)C

Variabile .i alocarea lor


!ublic class Assignment'evieD 7 !ublic static void main (StringWX args) 7 Integer num> num @ neD Integer (2)> Integer # @ num> Integer F @ neD Integer (2)> Integer %> ; ;
)E

Java &ea!
=ea!Mul este o %on de date unde se stoc&ea% re(erin$ele .i obiectele n tim!ul rulrii num #
Integer/ 2

F
Integer/ 2

null

)G

'e(erin$e null
'e(erin$ele neini$iali%ate sunt H (null+ adic re(erire s!re adresa H) Se (olose.te o!eratorul K@K !entru a asigna un obiect unei re(erin$e null nu este un obiect (nu are metode .i nici variabile membre) 3nele metode !ot modi(ica obiectul 3n singur obiect !oate avea mai multe re(erin$e+ aten$ie la e(ectele colaterale %.intValue () generea% o eroare (mai e#act+ -ullPointerN#ce!tion)

2H

i!uri re(erin$

Cunoscute sub denumirea de *b6ects * instan$ a unui obiect se creea% (olosind new Cuv,ntul c&eie new/ 1.Aloc s!a$iu de memorie !entru obiect ).C&eam constructorul s!eci(icat du! new 2.Zntoarce o re(erin$ la noul obiect creat

21

Static vs. neMstatic


Variabilele membre .i metodele !ot (i declarate AstaticB

"embrii statici a!ar$in de clas

* variabil membru static este comun !entru toate instan$ele clasei (toate obiectele de acel ti!)

"embrii neMstatici a!ar$in instan$elor clasei


2)

Variabile membre neMstatice


!ublic class Oean 7 !ublic int beanCounter @ H> !ublic Oean () 7 beanCounter JJ> ; !ublic static void main (StringWX args) 7 neD Oean ()> neD Oean ()> Oean bean @ neD Oean ()> SFstem.out.!rintln (bean.beanCounter)> // afieaz 1 ; ;
22

Variabile membre statice


!ublic class Oean 7 !ublic static int beanCounter @ H> !ublic Oean () 7 beanCounter JJ> ; !ublic static void main (StringWX args) 7 neD Oean ()> neD Oean ()> neD Oean ()> SFstem.out.!rintln (Bean.beanCounter)> // afieaz 3 ; ;
24

"etode neMstatice
!ublic class Oean 7 !rivate boolean !lanted @ (alse> !ublic void !lantOean () 7 !lanted @ true> ; !ublic static void main (StringWX args) 7 Oean bean @ neD Oean ()> bean.!lantOean ()> // invocat la instan ; ;
2<

"etode statice
!ublic class Oean 7 !rivate boolean !lanted @ (alse> !ublic static void !lantOean (Bean bean) 7 bean.!lanted @ true> ; !ublic static void main (StringWX args) 7 Oean bean @ neD Oean ()> Bean.!lantOean (bean)> // invocat la clas // bean.plantBean (bean !" e permis #ar nerecoman#at$ ; ;
2?

'e(erin$e

oate obiectele trimise ca !arametri ctre o metod sunt trimise ca re(erin$e1

'e(erin$ele au un domeniu de e#isten$ (sco!e) Domeniul se de(ine.te cu acoladele 7 .i ; 'e(erin$ele e#ist de la declararea lor .i !,n la terminarea domeniului (acolad nc&is) Variabilele membre !ot (i re(erite n toat clasa Parametrii !ot (i re(eri$i n toat metoda

2C

N#em!lu de domenii
!ublic class Sco!eN#am!le 7 !rivate int globalIield> !ublic int met&od (int !arameter) 7 int localVar1> i( (globalIield : H) 7 int #> ; int localVar)> ; ;
2E

3n alt e#em!lu de domenii


!ublic class Sco!eN#am!le 7 !rivate int globalIield> !ublic int met&od (int !arameter) 7 int globalIield> // posibil% #ar se pier#e vizibilitatea$ int localVar> i( (this.globalIield : H) 7 // accesarea variabilei membre int #> ; int localVar> // #eclaraie ilegal& acelai #omeni'$ ; ;
2G

Preci%ia (loating !oint


SFstem.out.!rintln (1.HH M .4))> 88 H.?1HHHHHHHHHHHHHHHH1 SFstem.out.!rintln (1.HH Y G [ .1H)> 88 H.HGGGGGGGGGGGGGGGGG< OigDecimal De ti! *b6ect int sau long Se $ine cont de %ecimale+ de e#em!lu o sum de o stocm la nivel de bani (nu direct lei) Constante Double Double.P*SI IVNRI-II-I \ Double.-N]A IVNRI-II-I \ Double.-a- (m!r$ire cu H)

4H

S-ar putea să vă placă și