241
1 Mục lục GIỚI THIỆU .............................................................................5 Chương 1. MỞ ĐẦU ............................................................7 1.1. KHÁI NIỆM CƠ BẢN ................................................ 12 1.2. ĐỐI TƯỢNG VÀ LỚP................................................ 13 1.3. CÁC NGUYÊN TẮC TRỤ CỘT ................................ 15 Chương 2. NGÔN NGỮ LẬP TRÌNH JAVA ................... 20 2.1. ĐẶC TÍNH CỦA JAVA.............................................. 20 2.1.1. Máy ảo Java – Java Virtual Machine ............... 21 2.1.2. Các nền tảng Java ............................................. 23 2.1.3. Môi trường lập trình Java ................................ 23 2.1.4. Cấu trúc mã nguồn Java .................................. 24 2.1.5. Chương trình Java đầu tiên ............................. 25 2.2. BIẾN ............................................................................. 27 2.3. CÁC PHÉP TOÁN CƠ BẢN...................................... 28 2.3.1. Phép gán ............................................................ 28 2.3.2. Các phép toán số học........................................ 28 2.3.3. Các phép toán khác .......................................... 29 2.3.4. Độ ưu tiên của các phép toán .......................... 30 2.4. CÁC CẤU TRÚC ĐIỀU KHIỂN ................................ 30 2.4.1. Các cấu trúc rẽ nhánh....................................... 31 2.4.2. Các cấu trúc lặp ................................................ 37 2.4.3. Biểu thức điều kiện trong các cấu trúc điều khiển 43 Chương 3. LỚP VÀ ĐỐI TƯỢNG .................................... 48 3.1. TẠO VÀ SỬ DỤNG ĐỐI TƯỢNG............................ 49 3.2. TƯƠNG TÁC GIỮA CÁC ĐỐI TƯỢNG ................. 51 Chương 4. BIẾN VÀ CÁC KIỂU DỮ LIỆU ...................... 57 4.1. BIẾN VÀ CÁC KIỂU DỮ LIỆU CƠ BẢN ................. 58 4.2. THAM CHIẾU ĐỐI TƯỢNG VÀ ĐỐI TƯỢNG...... 59 4.3. PHÉP GÁN.................................................................. 62 4.4. CÁC PHÉP SO SÁNH ................................................ 63

Java Dhcong Nghe

Embed Size (px)

Citation preview

  • 1

    Mc lc

    GII THIU .............................................................................5

    Chng 1. M U ............................................................7 1.1. KHI NIM C BN ................................................ 12

    1.2. I TNG V LP................................................ 13

    1.3. CC NGUYN TC TR CT ................................ 15

    Chng 2. NGN NG LP TRNH JAVA ................... 20 2.1. C TNH CA JAVA .............................................. 20

    2.1.1. My o Java Java Virtual Machine ............... 21

    2.1.2. Cc nn tng Java ............................................. 23

    2.1.3. Mi trng lp trnh Java ................................ 23

    2.1.4. Cu trc m ngun Java .................................. 24

    2.1.5. Chng trnh Java u tin ............................. 25

    2.2. BIN ............................................................................. 27

    2.3. CC PHP TON C BN...................................... 28

    2.3.1. Php gn ............................................................ 28

    2.3.2. Cc php ton s hc........................................ 28

    2.3.3. Cc php ton khc .......................................... 29

    2.3.4. u tin ca cc php ton .......................... 30

    2.4. CC CU TRC IU KHIN ................................ 30

    2.4.1. Cc cu trc r nhnh....................................... 31

    2.4.2. Cc cu trc lp ................................................ 37

    2.4.3. Biu thc iu kin trong cc cu trc iu khin 43

    Chng 3. LP V I TNG .................................... 48 3.1. TO V S DNG I TNG ............................ 49

    3.2. TNG TC GIA CC I TNG ................. 51

    Chng 4. BIN V CC KIU D LIU ...................... 57 4.1. BIN V CC KIU D LIU C BN ................. 58

    4.2. THAM CHIU I TNG V I TNG ...... 59

    4.3. PHP GN .................................................................. 62

    4.4. CC PHP SO SNH ................................................ 63

  • 2

    4.5. MNG ......................................................................... 64

    Chng 5. HNH VI CA I TNG ....................... 70 5.1. PHNG THC V TRNG THI I TNG70

    5.2. TRUYN THAM S V GI TR TR V .............. 71

    5.3. C CH TRUYN BNG GI TR .......................... 73

    5.4. NG GI V CC PHNG THC TRUY NHP 75

    5.5. KHAI BO V KHI TO BIN THC TH........ 79

    5.6. BIN THC TH V BIN A PHNG ........... 80

    Chng 6. S DNG TH VIN JAVA ......................... 85 6.1. ArrayList ..................................................................... 85

    6.2. S DNG JAVA API ................................................. 87

    6.3. MT S LP THNG DNG TRONG API ........... 88

    6.3.1. Math ................................................................... 88

    6.3.2. Cc lp bc ngoi kiu d liu c bn ............ 89

    6.3.3. Cc lp biu din xu k t .............................. 90

    6.4. TR CHI BN TU ................................................ 91

    Chng 7. THA K V A HNH ............................. 103 7.1. QUAN H THA K .............................................. 103

    7.2. THIT K CY THA K ...................................... 104

    7.3. CI PHNG THC NO C GI? ... 107

    7.4. CC QUAN H IS-A V HAS-A ........................... 108

    7.5. KHI NO NN DNG QUAN H THA K?.... 110

    7.6. LI CH CA QUAN H THA K ..................... 110

    7.7. A HNH .................................................................. 111

    7.8. GI PHIN BN PHNG THC CA LP CHA114

    7.9. CC QUY TC CHO VIC CI ....................... 115

    7.10. CHNG PHNG THC .................................... 116

    7.11. CC MC TRUY NHP ....................................... 117

    Chng 8. LP TRU TNG V INTERFACE ........ 124 8.1. MT S LP KHNG NN TO THC TH .... 124

    8.2. LP TRU TNG V LP C TH ................. 126

  • 3

    8.3. PHNG THC TRU TNG .......................... 127

    8.4. V D V A HNH ................................................ 127

    8.5. LP Object ................................................................ 131

    8.6. I KIU KHI I TNG MT HNH VI CA MNH 132

    8.7. A THA K V VN HNH THOI.............. 135

    8.8. INTERFACE .............................................................. 137

    Chng 9. VNG I CA I TNG ................... 143 9.1. B NH STACK V B NH HEAP ................... 143

    9.2. KHI TO I TNG ........................................ 145

    9.3. HM KHI TO V VN THA K ............ 149

    9.3.1. Gi hm khi to ca lp cha ........................ 150

    9.3.2. Truyn i s cho hm khi to lp cha ...... 152

    9.4. HM KHI TO CHNG NHAU ........................ 153

    9.5. TO BN SAO CA I TNG ....................... 154

    9.6. CUC I CA I TNG............................... 159

    Chng 10. THNH VIN LP V THNH VIN THC TH 164 10.1. BIN CA LP ...................................................... 164

    10.2. PHNG THC CA LP ................................. 165

    10.3. GII HN CA PHNG THC LP ............. 167

    10.4. KHI TO BIN LP ........................................... 169

    10.5. MU THIT K SINGLETON .............................. 170

    10.6. THNH VIN BT BIN final .......................... 171

    Chng 11. NGOI L ................................................... 174 11.1. NGOI L L G? .................................................. 175

    11.1.1. Tnh hung s c .......................................... 175

    11.1.2. X l ngoi l ................................................ 177

    11.1.3. Ngoi l l i tng .................................... 178

    11.2. KHI try/catch ........................................................ 179

    11.2.1. Bt nhiu ngoi l ......................................... 179

    11.2.2. Hot ng ca khi try/catch ...................... 180

    11.2.3. Khi finally nhng vic d th no cng phi lm 182

  • 4

    11.2.4. Th t cho cc khi catch ............................ 183

    11.3. NM NGOI L ..................................................... 184

    11.4. N NGOI L ........................................................ 185

    11.5. NGOI L C KIM TRA V KHNG C KIM TRA 189

    11.6. NH NGHA KIU NGOI L MI ................. 190

    11.7. NGOI L V CC PHNG THC CI . 191

    Chng 12. CHUI HA I TNG V VO RA FILE 196 12.1. QUY TRNH GHI I TNG............................ 197

    12.2. CHUI HA I TNG ................................... 199

    12.3. KHI PHC I TNG .................................... 202

    12.4. GHI CHUI K T RA TP VN BN ............... 205

    12.4.1. Lp File .......................................................... 206

    12.4.2. B nh m ................................................... 207

    12.5. C TP VN BN .............................................. 207

    12.6. CC DNG VO/RA TRONG Java API ............. 209

    Chng 13. LP TRNH TNG QUT V CC LP COLLECTION 215 13.1. LP TNG QUT ................................................. 217

    13.2. PHNG THC TNG QUT ........................... 219

    13.3. CC CU TRC D LIU TNG QUT TRONG JAVA API 220

    13.4. ITERATOR V VNG LP FOR EACH ............. 222

    13.5. SO SNH NI DUNG I TNG ................... 224

    13.5.1. So snh bng ................................................. 224

    13.5.2. So snh ln hn/nh hn ............................. 226

    13.6. K T I DIN TRONG KHAI BO THAM S KIU 228

    Ph lc A. DCH CHNG TRNH BNG JDK .......... 233

    Ph lc B. PACKAGE T CHC GI CA JAVA .... 236

    Ph lc C. BNG THUT NG ANH-VIT ................. 239

    Ti liu tham kho ............................................................... 241

  • 5

    Gii thiu

    Phn mm ngy cng ln v phc tp v i hi c cp nht lin tc p ng nhng yu cu mi ca ngi dng. Phng php lp trnh th tc truyn thng dn tr nn khng p ng c nhng i hi ca ngnh cng nghip phn mm. Lp trnh hng i tng ra i trong bi cnh nh vy h tr s dng li v pht trin cc phn mm qui m ln.

    Gio trnh ny cung cp cho sinh vin cc kin thc t c bn cho n mt s k thut nng cao v phng php lp trnh hng i tng. Gio trnh dng cho sinh vin ngnh Cng ngh thng tin c kin thc cn bn v lp trnh. Gio trnh s dng ngn ng lp trnh Java minh ha v ng thi cng gii thiu mt s kin thc cn bn ca ngn ng ny.

    Cc ni dung chnh v phng php lp trnh hng i tng c trnh by trong gio trnh bao gm lp v i tng, ng gi/che giu thng tin, k tha v a hnh, x l ngoi l v lp trnh tng qut. Ngoi ra, gio trnh cng trnh by cc kin thc v Java bao gm cc c trng c bn ca ngn ng, cc th vin c bn v cch thc t chc vo/ra d liu.

    Thay v cch trnh by theo tnh hn lm v mt ch rng, thun tin cho ging dy, gio trnh chn cch trnh by theo cc bi hc c th c sp xp theo trnh t kin thc t c s n chuyn su. Mi ch c th c ging dy vi thi lng 2~3 gi l thuyt v gi thc hnh tng ng. Ch-ng 2 v Ch-ng 6, vi ni dung l cc kin thc c bn v ngn ng lp trnh Java, tuy cn thit nhng khng phi ni dung trng tm ca mn hc Lp trnh hng i tng. Cc chng ny, do , nn sinh vin t hc. Chng 9 v Chng 10 khng nht thit phi c dy thnh nhng ch c lp m c th c tch ri rc cc ni dung kin thc v gii thiu km theo cc khi nim hng i tng c lin quan, hoc yu cu sinh vin t c khi cn n cc kin thc ny trong qu trnh thc hnh.

    Tuy cun gio trnh ny khng trnh by su v lp trnh Java, nhng kin thc v lp trnh Java li l cn thit i vi sinh vin, ngay c vi mc ch thc hnh mn hc. Do , ngoi mc ch thc hnh cc ni dung lin quan n lp trnh hng i tng, cc bi tp thc hnh ca mn hc ny nn c thm ng vai tr nh hng v gi gip sinh vin t hc cc ch thun ty Java m gio vin cho l cn thit, chng hn nh hc v vo ra d liu n gin ngay t tun u tin ca mn hc. Cc nh hng ny c th c th hin nhng bi tp thc hnh vi nhng on chng trnh mu, hoc yu cu tm hiu ti liu API v mt s lp tin ch. Mt s bi tp cui chng l v d ca dng bi tp ny.

  • 6

    Cc thut ng hng i tng nguyn gc ting Anh c chuyn sang ting Vit theo nhng cch khc nhau ty cc tc gi. Sinh vin cn bit thut ng nguyn gc ting Anh cng nh cc cch dch khc nhau tin cho vic s dng ti liu ting Anh cng nh lin h kin thc gia cc ti liu ting Vit. V l do , gio trnh ny cung cp bng thut ng Anh-Vit vi cc cch dch khc nhau ti Ph lc C, bn cnh Ph lc A v cng c lp trnh JDK v Ph lc B v t chc gi ca ngn ng Java.

    Cc tc gi chn thnh cm n PGS. TS. Nguyn nh Ha, TS. Trng Anh Hong, TS. Cao Tun Dng, TS. ng c Hnh, cng nh cc ng nghip v sinh vin ti Khoa Cng ngh thng tin, Trng i hc Cng ngh c bn tho gio trnh v c cc gp qu bu v ni dung chuyn mn cng nh cch thc trnh by. Tuy vy, gio trnh vn cn nhiu khim khuyt, cc tc gi mong tip tc nhn c gp hon thin trong tng lai.

  • 7

    Chng 1. m u

    Lp trnh l cng on quan trng ch cht v khng th thiu to ra sn phm phn mm. Phn mm cng tr nn a dng v ngnh cng nghip phn mm cng pht trin th ngi ta cng thy r tm quan trng ca phng php lp trnh. Phng php lp trnh tt khng ch m bo to ra phn mm tt m cn h tr thit k phn mm c tnh m v h tr kh nng s dng li cc m un. Nh chng ta c th d dng bo tr, nng cp phn mm cng nh gim chi ph pht trin phn mm.

    Trong nhng thp k 1970, 1980, phng php pht trin phn mm ch yu l lp trnh c cu trc (structured programming). Cch tip cn cu trc i vi vic thit k chng trnh da trn chin lc chia tr: gii mt bi ton ln, chng ta tm cch chia n thnh vi bi ton nh hn v gii ring tng bi; gii mi bi, hy coi n nh mt bi ton mi v c th tip tc chia n thnh cc bi ton nh hn; cui cng, ta s i n nhng bi ton c th gii ngay c m khng cn phi chia tip. Cch tip cn ny c gi l lp trnh t trn xung (top-down programming).

    Lp trnh t trn xung l mt phng php tt v c p dng thnh cng cho pht trin rt nhiu phn mm. Tuy nhin, cng vi s a dng v phc tp ca phn mm, phng php ny bc l nhng hn ch. Trc ht, n hu nh ch p ng vic to ra cc lnh hay l cc quy trnh gii quyt mt bi ton. Dn dn, ngi ta nhn ra rng thit k cc cu trc d liu cho mt chng trnh c tm quan trng khng km vic thit k cc hm/th tc v cc cu trc iu khin. Lp trnh t trn xung khng quan tm n d liu m chng trnh cn x l.

    Th hai, vi lp trnh t trn xung, chng ta kh c th ti s dng cc phn ca chng trnh ny cho cc chng trnh khc. Bng vic xut pht t mt bi ton c th v chia n thnh cc mnh sao cho thun, cch tip cn ny c xu hng to ra mt thit k c th cho chnh bi ton . Chng ta kh c kh nng ly mt on m ln t mt chng trnh c lp vo mt d n mi m khng phi sa i ln. Vic xy dng cc chng trnh cht lng cao l kh khn v tn km, do nhng nh pht trin phn mm lun lun mun ti s dng cc sn phm c.

    Th ba, mi trng hot ng trong thc t ca cc ng dng lun thay i. Dn n vic yu cu phn mm cng phi lin tc thay i theo p ng nhu cu ca ngi dng nu khng mun phn mm b o thi. Do , mt thit k linh hot mm do l ci m cc nh pht trin phn mm mong mun. Phng php tip cn t di ln (bottom-up) h tr tt hn cho tnh linh hot mm do .

    Trong thc t, thit k v lp trnh t trn xung thng c kt hp vi thit k v lp trnh t di ln. Trong tip cn t di ln, t cc vn m ta bit

  • 8

    cch gii v c th c sn cc thnh phn ti s dng c chng ta xy dng dn theo hng ln trn, hng n mt gii php cho bi ton tng.

    Cc thnh phn ti s dng c nn c tnh m-un ha cao nht c th. Mi m-un l mt thnh phn ca mt h thng ln hn, n tng tc vi phn cn li ca h thng theo mt cch n gin v c quy c cht ch. tng y l mt m-un c th c "lp vo" mt h thng. Chi tit v nhng g xy ra bn trong m-un khng cn c xt n i vi h thng ni chung, min l m-un hon thnh tt vai tr c giao. y gi l che giu thng tin (information hiding), mt trong nhng nguyn l quan trng nht ca cng ngh phn mm.

    Mt dng thng thy ca cc m-un phn mm l n cha mt s d liu km theo mt s hm/th tc x l d liu . V d, mt m-un s a ch c th cha mt danh sch cc tn v a ch, km theo l cc hm/th tc thm mt mc tn mi, in nhn a chVi cch ny, d liu c bo v v n ch c x l theo cc cch c bit trc v c nh ngha cht ch. Ngoi ra, n cng to thun li cho cc chng trnh s dng m-un ny, v cc chng trnh khng phi quan tm n chi tit biu din d liu bn trong m-un. Thng tin v biu din d liu c che giu.

    Cc m-un h tr dng che giu thng tin ny bt u tr nn ph bin trong cc ngn ng lp trnh u thp k 1980. T , mt hnh thc tin tin hn ca chnh tng lan rng trong ngnh cng ngh phn mm. Cch tip cn c gi l lp trnh hng i tng (object-oriented programming), thng c gi tt l OOP.

    Cu chuyn tng tng sau y1 minh ha phn no s khc bit gia lp trnh th tc v lp trnh hng i tng trong thc t ca ngnh cng ngh phn mm. C hai lp trnh vin nhn c cng mt c t h thng v c yu cu xy dng h thng , thi xem ai l ngi hon thnh sm nht. Du l ngi chuyn dng phng php lp trnh th tc, cn Tut quen dng lp trnh hng i tng. C Du v Tut u cho rng y l nhim v n gin.

    c t nh sau:

    1 Ngun: Head First Java, 2nd Edition.

  • 9

    Du tnh ton, "Chng trnh ny phi lm nhng g? Ta cn n nhng th tc no?" Anh t tr li, "xoay v chi nhc." V anh bt tay vo vit cc th tc . Chng trnh khng phi l mt lot cc th tc th n l ci g?

    Trong khi , Tut ngh, "Trong chng trnh ny c nhng th g...u l nhng nhn t chnh?" u tin, anh ta ngh n nhng Hnh v. Ngoi ra, anh cn ngh n nhng i tng khc nh ngi dng, m thanh, v s kin click chut. Nhng anh c sn th vin m cho my i tng , nn anh tp trung vo vic xy dng cc Hnh v.

    Du qu tho vi cng vic kiu ny ri, anh ra bt tay vo vit cc th tc quan trng v nhanh chng hon thnh hai th tc xoay (rotate) v chi nhc (playSound):

    rotate(shapeNum) {

    // cho hnh xoay 360o } playSound(shapeNum) {

    // dng shapeNum tra xem cn chi file AIF no // v chi file }

    Cn Tut ngi vit ba lp, mi lp dnh cho mt hnh.

    Du va ngh rng mnh thng cuc th sp ni "V mt k thut th Du

    xong trc, nhng ta phi b sung mt cht xu na vo chng trnh." Hai ngi qu quen vi chuyn c t thay i chuyn thng ngy trong ngnh.

    c t c b sung ni dung sau:

    i vi Du, th tc rotate vn n, m dng mt bng tra cu khp gi tr

    shapeNum vi mt hnh ha c th. Nhng playSound th phi sa.

    Rt cc khng phi sa nghim trng, nhng Du vn thy khng thoi mi khi phi ng vo sa phn m c test xong t trc. Anh bit, d qun l d n c ni g i chng na, c t thay i sut.

  • 10

    Cn Tut th thn nhin va nhm nhi c ph va vit mt lp mi. iu anh thch nht v OOP l anh khng phi sa g phn m c test v bn giao. Anh ngh v nhng ch li ca OOP v lm bm "Tnh linh hot, kh nng m rng,...".

    Du cng va kp hon thnh ch mt lt trc Tut. Nhng n ci ca anh

    vt tt khi nhn thy b mt ca sp v nghe thy ging sp v tht vng "khng c ri, amoeba thc ra khng xoay kiu ny..."

    Th ra c hai lp trnh vin u vit on xoay hnh theo cch: (1) xc nh hnh ch nht bao hnh; (2) xc nh tm ca hnh ch nht v xoay hnh quanh im . Nhng hnh trng bin hnh th li cn xoay quanh mt im mt u mt, nh kiu kim ng h.

    "Mnh to ri." Du ngn ngm. "Tuy l, m, c th thm mt lnh if/else na

    vo th tc rotate, ri hard-code tm xoay cho amoeba. Lm vy chc l s khng lm hng on no khc." Nhng mt ging ni trong u Du th tho, "Nhm to! Cu c chc l c t s khng thay i ln na khng y?"

    Cui cng Du chn cch b sung tham s v tm xoay vo cho th tc rotate. Rt nhiu on m b nh hng. Phi test li, dch li c ng m. C nhng on trc chy tt th nay khng chy c na.

    rotate(shapeNum, xPt, yPt) {

  • 11

    //nu hnh khng phi amoeba, // tnh tm xoay // da trn mt hnh ch nht // ri xoay hnh //nu khng // dng xPt v yPt lm offset tm xoay // ri xoay hnh }

    Cn Tut, khng chn ch cht no, anh sa lun phng thc rotate, nhng ch sa lp Amoeba m thi. Tut khng h ng n cc on m dch, chy v test ti cc phn khc trong chng trnh. cho Amoeba mt tm xoay, anh thm mt thuc tnh m tt c cc hnh trng bin hnh s c. Anh nhanh chng sa, test, v bn giao m cho sp.

    "Khng nhanh th c!" Du tm thy mt nhc im trong cch tip cn ca

    Tut, v anh chc mm n s gip anh chuyn bi thnh thng. Du thy m ca Tut b lp, rotate c mt c bn th hnh, thit k ny c g hay ho khi phi bo tr c bn phng thc rotate khc nhau?

    Tut gii thch: Du cha nhn thy c im quan trng ca thit k, l quan h tha k. Bn lp c nhng c im chung, nhng c im c tch ra v t trong mt lp mi tn l Shape. Cc lp kia, mi lp u c xem l "tha k t lp Shape". Ni cch khc, nu lp Shape c nhng chc nng g th cc lp kia t ng c cc chc nng .

  • 12

    Tuy nhin, Amoeba c tm xoay khc v chi file nhc khc. Lp Amoeba ci

    cc hot ng rotate v playSound c tha k t Shape bng cch nh ngha li cc th tc ny. V khi chy, h thng t bit l cn dng phin bn c vit ti Amoeba thay v dng phin bn tha k t Shape. l c im th v ca phng php hng i tng.

    Khi ta cn yu cu mt hnh no xoay, tam gic hay amoeba, ta ch vic gi phng thc rotate cho i tng , v h thng s t bit phi lm g, trong khi phn cn li ca chng trnh khng bit hoc khng quan tm n vic i tng xoay kiu g. V khi ta cn b sung mt ci g mi vo chng trnh, ta ch phi vit mt lp mi cho loi i tng mi, t , cc i tng mi s c cch hnh x ca ring chng.

    1.1. KHI NIM C BN

    Hng i tng l k thut m hnh ha mt h thng th gii thc trong phn mm da trn cc i tng. i tng (object) l khi nim trung tm ca OOP, n l mt m hnh ca mt thc th hay khi nim trong th gii thc. Vic m hnh ha ny bao gm xc nh cc i tng tham gia bi ton nhng ci lm nhim v g hoc b lm g . Lp trnh theo kiu hng i tng l hot ng nh ngha cc th loi ca cc i tng hnh thc cc khun mu to ra chng.

    Trong thi gian chy, mt chng trnh OOP chnh l mt tp cc i tng gi thng ip cho nhau yu cu dch v v thc hin dch v khi c yu cu. Vic mt i tng thc hin mt dch v c th dn n vic n thay i trng thi ca bn thn. Mt v d c tnh cht gn vi th gii thc: ng A n rt tin ti my ATM. Ta c cc i tng: ng A, my ATM, c s d liu ngn hng, v ti khon ca ng A. Trnh t din ra nh sau: ng A cho th ngn hng vo khe my ATM;

  • 13

    i tng ATM yu cu c s d liu ngn hng cung cp i tng ti khon ca ng A; ng A yu cu rt 100.000 ng; i tng ATM yu cu i tng ti khon tr i 100.000 ng. Nh vy giao dch ny bao gm chui cc yu cu dch v v vic cc i tng thc hin cc yu cu , ng thi thay i trng thi ca mnh (ti khon ng A b bt tin, ng A c thm tin, d liu nht trnh ATM c thm thng tin v mt giao dch).

    1.2. I TNG V LP

    Gn nh bt c th g cng c th c m hnh ha bng mt i tng. Chng hn, mt mu, mt hnh v, mt ci nhit k.

    Mi i tng c mt tp cc thuc tnh (attribute) nh cc gi tr hay trng thi m hnh ha i tng . Chng hn, mt ci nhit k c th c thuc tnh l v tr hin ti ca n v trng thi hin ti tt hay bt, cc thuc tnh mt mu c th l gi tr ca ba thnh phn RGB ca n. Mt ci t c cc thuc tnh nh: lng xng hin c, tc hin ti, bin s.

    Mi i tng c mt tp cc trch nhim m n thc hin bng cch cung cp dch v cho cc i tng khc. Cc dch v ny c th cho php truy vn thng tin hoc lm thay i trng thi ca i tng. V d, nhit k cho php truy vn v tnh trng tt/bt ca n; p ng cc yu cu v nhit hin hnh m n o c, yu cu tt/bt. Mt ci t cho php tng ga, gim ga tng/gim tc di chuyn. i vi thit k tt, cc i tng bn ngoi khng phi quan tm xem mt i tng no ci t mt dch v nh th no, m ch cn bit i tng cung cp nhng dch v no (hay n c nhng trch nhim g). Chng hn, ngi li xe khng cn bit c ch chuyn i t lc nhn ln chn p ga sang s thay i v tc ca t.

    Hnh 1.1: Cc i tng t v c im chung ca chng.

    Trong mi ng dng, cc i tng c c im tng t nhau, chng hn cc ti khon ngn hng, cc sinh vin, cc my ATM, nhng chic t c xp vo cng mt nhm, l lp (class). Mi lp l c t cc c im ca cc i tng

  • 14

    thuc lp . C th, mt nh ngha lp m t tt c cc thuc tnh ca cc i tng thnh vin ca lp v cc phng thc thc thi hnh vi ca cc i tng . V d, ta c th c nhiu i tng t vi thng s khc nhau v lng xng hin c, tc hin ti, v bin s xe; nh ngha lp t m t c im chung ca cc thng s cng vi cc phng thc thc hin cc hot ng tng tc, gim tc.

    Hnh 1.2: Lp Automobile v bng k php UML

    Quan h gia lp v i tng gn ging nh quan h gia kiu d liu v cc bin thuc kiu d liu . Cc i tng c to ra khi chng trnh chy, v lp l khun mu m t c th to ra cc i tng thuc lp . Mi i tng c to ra t mt lp c gi l mt thc th (instance) ca lp . Mt chng trnh khi c vit l s kt hp ca cc lp khc nhau. Cn khi chy, n l mt tp hp cc i tng hot ng v tng tc vi nhau, cc i tng ny c sinh ra t cc lp cu thnh nn chng trnh .

    Mi i tng u c mt thi gian sng. Trong khi chng trnh chy, i tng c to v khi to gi tr theo yu cu. Ngay khi mt i tng c to ra, h thng t ng gi mt hm khi to (constructor) khi to gi tr cho cc thuc tnh ca i tng. K t , i tng bt u tn ti, n gi v nhn cc thng ip, v cui cng th n b hy i khi khng cn cn n na. Trong khi i tng tn ti, n gi nh danh v trng thi ca mnh. Mi i tng c mt nh danh ring v c b thuc tnh ring, c lp vi cc i tng khc thuc cng mt lp. Trong thc t, mi i tng c v tr ring trong b nh.

    Cc i tng dng cc thng ip (message) lin lc vi nhau. Nhn t phng din lp trnh, vic gi mt thng ip ti mt i tng chnh l gi mt phng thc ca i tng , cn vic mt i tng nhn c mt thng ip chnh l vic mt phng thc ca n c mt i tng khc gi. Chng trnh khi chy l mt tp cc i tng, mi i tng gi thng ip cho cc i tng khc trong h thng v p ng cc thng ip m mnh nhn c. Thng thng, mt thng ip c gi bng mt li gi phng thc trong chng trnh. Tuy nhin, cc thng ip c th xut pht t h iu hnh hoc mi trng chy chng trnh. Chng hn khi ngi dng click chut vo mt nt bm ti mt ca s chng trnh, mt thng ip s c gi n i tng iu khin nt bm thng bo rng ci nt b nhn.

  • 15

    1.3. CC NGUYN TC TR CT

    Lp trnh hng i tng c ba nguyn tc tr ct: ng gi, tha k v a hnh, cn tru tng ha l khi nim nn tng.

    Tru tng ha (abstraction) l mt c ch cho php biu din mt tnh hung phc tp trong th gii thc bng mt m hnh c n gin ha. N bao gm vic tp trung vo cc tnh cht quan trng ca mt i tng khi phi lm vic vi lng ln thng tin. V d, i vi mt con mo trong ng cnh mt ca hng bn th cnh, ta c th tp trung vo ging mo, mu lng, cn nng, tui, tim phng di hay cha, v b qua cc thng tin khc nh dung tch phi, nng ng trong mu, huyt p, cn i vi mt con mo trong ng cnh bnh vin th y th li l mt chuyn khc. Cc i tng ta thit k trong chng trnh OOP s l cc tru tng ha theo ngha , ta b qua nhiu c im ca i tng thc v ch tp trung vo cc thuc tnh quan trng cho vic gii mt bi ton c th. Ngi ta gi mt tru tng ha l mt m hnh ca mt i tng hoc khi nim trong th gii thc.

    Tru tng ha l mt trong nhng cng c c bn ca tt c cc phng php lp trnh, khng ch lp trnh hng i tng. Khi vit mt chng trnh gii mt bi ton ca th gii thc, tru tng ha l mt cch m hnh ha bi ton . V d, khi ta vit mt chng trnh qun l s a ch, ta s dng cc tru tng ha nh tn, a ch, s in thoi, th t bng ch ci, v cc khi nim lin quan ti mt s a ch. Ta s nh ngha cc thao tc x l d liu chng hn nh thm mt mc tn mi hoc sa mt a ch. Trong ng cnh lp trnh, tru tng ha l m hnh ha th gii thc theo cch m n c th c ci t di dng mt chng trnh my tnh.

    Phng php hng i tng tru tng ha th gii thc thnh cc i tng v tng tc gia chng vi cc i tng khc. Vic m hnh ha tr thnh m hnh ha cc i tng tham gia bi ton mt ci nhit k, mt ngi ch ti khon ngn hng, mt s a ch mi i tng cn c cc thuc tnh v phng thc thc hin c tt c cc dch v m n c yu cu.

    ng gi (encapsulation): Cc tru tng ha ca nhng g c lin quan n nhau c ng gi vo trong mt n v duy nht. Cc trng thi v hnh vi ca cc tru tng ha c bc li trong mt khi gi l lp. C th, sau khi xc nh c cc i tng, ri n cc thuc tnh v hnh ng ca mi i tng, mc tiu l ng gi trong mi i tng cc tnh nng cn thit n c th thc hin c vai tr ca mnh trong chng trnh. Th d, mt i tng nhit k cn c nhng g cn thit c th o nhit , lu tr s liu ca cc ln o nhit trc v cho php truy vn cc s liu ny.

    nh ngha lp l cng c lp trnh chnh yu cho vic thc hin nguyn tc ng gi. Mt lp l m t v mt tp hp cc i tng c cng cc thuc tnh, hnh vi.

  • 16

    Thuc tnh (attribute) dng lu tr thng tin trng thi ca mt i tng. Mt thuc tnh c th ch n gin l mt bin Boolean lu tr trng thi tt hoc bt, hay phc tp hn khi chnh n li l mt i tng khc. Cc thuc tnh c khai bo trong nh ngha lp v c gi l cc bin ca thc th (instance variable), gi tt l bin thc th. Chng cn c gi l cc thnh vin d liu (data member), hay trng (field).

    Trng thi (state) phn nh cc gi tr hin ti ca cc thuc tnh ca mt i tng v l kt qu ca hnh vi ca i tng theo thi gian.

    Hnh vi (behavior) l hot ng ca mt i tng m c th nhn thy c t bn ngoi. Trong c vic i tng thay i trng thi ra sao hoc vic n tr v thng tin trng thi khi n c thng ip yu cu.

    Phng thc (method) l mt thao tc hay dch v c thc hin i vi i tng khi n nhn thng ip tng ng. Cc phng thc ci t hnh vi ca i tng v c nh ngha trong nh ngha lp. Phng thc cn c gi bng cc ci tn khc nh: hm thnh vin (member function) gi tt l 'hm', thao tc (operation), dch v (service).

    Khi nim ng gi cn i km vi khi nim che giu thng tin (information hiding) ngha l che giu cc chi tit bn trong ca mt i tng khi th gii bn ngoi. Chng hn khi dng mt ci cu dao in, i vi ngi s dng, n ch l mt ci hp m khi gt cn s c tc dng ngt v ni in v ci hp c kh nng t ngt in khi qu ti. Ngi dng khng bit v khng cn bit cc mch in bn trong c thit k ra sao, c ch pht hin qu ti nh th no. Nhng chi tit c giu bn trong, cn t bn ngoi ta ch nhn thy cu dao l mt ci hp c cn gt.

    Ni theo phng din lp trnh, nhn t bn ngoi mt m-un ch thy c cc giao din. Cc lp trnh vin t do ci t chi tit bn trong, vi rng buc duy nht l tun theo giao din c quy c t trc. Ta c th thc hin nguyn tc ng gi vi tt c cc ngn ng lp trnh hng i tng cng nh cc ngn ng th tc. Tuy nhin, ch cc ngn ng hng i tng mi cung cp c ch cho php che giu thng tin, ngn khng cho bn ngoi truy nhp vo chi tit bn trong ca m-un.

    Tha k (inheritance) l quan h mang tnh phn cp m trong cc thnh vin ca mt lp c k tha bi cc lp c dn xut trc tip hoc gin tip t lp . y l c ch cho php nh ngha mt lp mi da trn nh ngha ca mt lp c sn, sao cho tt c cc thnh vin ca lp "c" (lp c s hay lp cha) cng c mt trong lp mi (lp dn xut hay lp con) v cc i tng thuc lp mi c th c s dng thay cho i tng ca lp c bt c u. Tha k l mt hnh thc ti s dng phn mm, trong mt lp mi c xy dng bng cch hp th cc thnh vin ca mt lp c sn v b sung nhng tnh nng mi hoc sa tnh nng c sn. Ni cch khc, xut pht t mt lp m hnh ha mt khi nim tng qut hn,

  • 17

    chng hn Shape, ta c th dng quan h tha k xy dng cc lp m hnh ha cc khi nim c th hn, chng hn Circle, Triangle. Bng cch ny, ta c th s dng giao din cng nh ci t ca lp c cho lp mi.

    a hnh (polymorphism), theo ngha tng qut, l kh nng tn ti nhiu hnh thc. Trong hng i tng, a hnh i km vi quan h tha k v n c ngha rng cng mt ci tn c th c hiu theo cc cch khc nhau ty tng tnh hung. Cc i tng thuc cc lp dn xut khc nhau c th c i x nh nhau, nh th chng l cc i tng thuc lp c s, chng hn c th t cc i tng Triangle v Circle trong cng mt cu trc d liu dnh cho Shape, hoc dng cng mt li gi hm rotate cho cc i tng Triangle hay Circle. V khi nhn c cng mt thng ip , cc i tng thuc cc lp khc nhau hiu n theo nhng cch khc nhau. V d, khi nhn c thng ip "rotate", cc i tng Triangle v Amoeba thc hin cc phng thc rotate() khc nhau.

  • 18

    Bi tp 1. in t thch hp vo ch trng trong mi cu sau:

    a) Quan h gia mt ngi nh v mt bn thit k tng t nh quan h gia mt ________ vi mt lp.

    b) Khi mi i tng ca mt lp gi mt bn ring ca mt thuc tnh, trng d liu i din cho thuc tnh c gi l _________

    2. Ch trng n cc tnh cht quan trng trong khi b qua cc chi tit t quan trng c gi l

    A. Tru tng ha

    B. a hnh

    C. ng gi

    D. Che giu thng tin

    3. "Cng mt thng ip c hiu theo cc cch khc nhau ty theo i tng nhn c thng ip thuc lp no" l c im ca khi nim no?

    A. ng gi

    B. a hnh

    C. Tha k

    D. Ti s dng

    4. "i tng thuc lp con c th c i x nh i tng thuc lp cha" l c im ca khi nim no?

    A. Tru tng ha

    B. a hnh

    C. ng gi

    D. Che giu thng tin

    E. Tha k

    5. "Che i cc chi tit ci t v ch cho thy giao din ca m-un" l c im ca khi nim no?

    A. Tru tng ha

    B. a hnh

    C. ng gi

    D. Ti s dng

  • 19

  • 20

    Chng 2. Ngn ng lp trnh Java

    Java c hng Sun Microsystems2 thit k nm 1991 nh l mt ngn ng dnh cho cc chng trnh nhng (embedded program) chy trn cc thit b in t gia dng nh l vi sng v cc h thng an ninh gia nh. Tuy nhin, s pht trin v lan rng ca Internet v World Wide Web (WWW) khin Sun chuyn hng Java t mt ngn ng cho lp trnh nhng sang ngn ng lp trnh ng dng Web. n nay, Java tr thnh ngn ng lp trnh ng dng ph thng v l mt trong nhng ngn ng quan trng nht pht trin cc ng dng Web v Internet.

    2.1. C TNH CA JAVA

    Java l ngn ng hng i tng. Cc ngn ng hng i tng chia chng trnh thnh cc m-un ring bit, c gi l cc i tng, chng ng gi d liu v cc thao tc ca chng trnh. Cc khi nim lp trnh hng i tng v thit k hng i tng ni v phong cch t chc chng trnh ang ngy cng c la chn cho vic xy dng cc h thng phn mm phc tp. Khng nh ngn ng C++, trong cc c im hng i tng c gn thm vo ngn ng C, ngay t u Java c thit k l mt ngn ng hng i tng.

    Java l ngn ng c tnh chc chn. Khng nh nhiu ngn ng lp trnh khc, li trong cc chng trnh Java khng gy s c h thng (system crash). Mt s c tnh ca ngn ng cn cho php pht hin nhiu li tim tng trc khi chng trnh chy.

    Java c tnh c lp nn tng (platform independent). Mt nn tng (platform) y c ngha mt h thng my tnh vi h iu hnh c th, chng hn nh mt h thng Windows hay Macintosh. Thng hiu ca Java l "Write once, run anywhere" (Vit mt ln, chy bt c u). C ngha l mt chng trnh Java c th chy trn cc nn tng khc nhau m khng phi dch li. Mt s ngn ng bc cao khc khng c c c tnh ny. Tnh kh chuyn, hay kh nng chy trn hu nh tt c cc nn tng, cn l nguyn do cho vic Java rt ph hp cho cc ng dng Web.

    Java l ngn ng phn tn. Cc chng trnh c th c thit k chy trn mng my tnh, mt chng trnh bao gm nhng lp t ri rc ti cc my khc nhau trong mng. Bn cnh ngn ng, Java cn c mt b su tp phong ph cc th vin m c thit k dng trc tip cho cc loi ng dng c th, to

    2 Sun Microsystems nhp vo hng Oracle t nm 2010.

  • 21

    iu kin thun li cho vic xy dng cc h thng phn mm cho Internet v WWW.

    Java l mt ngn ng an ton. c thit k dng cho cc mng my tnh, Java c nhng c tnh t bo v trc nhng phn m khng c tin cy nhng phn c th a virus vo h thng hoc gy ri h thng bng cch no . V d, khi mt chng trnh Web vit bng Java c ti xung trnh duyt my tnh, chng b cm c v ghi thng tin ti my tnh.

    2.1.1. My o Java Java Virtual Machine

    Ngn ng my bao gm nhng ch th (instruction) rt n gin m CPU my tnh c th thc hin trc tip. Tuy nhin, hu ht cc chng trnh u c vit bng cc ngn ng lp trnh bc cao nh Java hay C++. Mt chng trnh vit bng ngn ng bc cao cn c dch sang ngn ng my trc khi c th c chy trn my tnh. Vic dch ny do trnh bin dch thc hin. chy trn cc loi my tnh vi cc ngn ng my khc nhau, cn n cc trnh bin dch ph hp vi loi ngn ng my .

    C mt la chn khc thay v bin dch chng trnh vit bng ngn ng bc cao. Thay v dng mt trnh bin dch dch thng ton b chng trnh, ta c th dng mt trnh thng dch, n dch tng ch th mt v ch dch khi cn n. Mt trnh thng dch l mt chng trnh hot ng gn nh mt CPU vi mt dng chu trnh np-v-thc-thi (fetch-and-execute). thc thi mt chng trnh, trnh thng dch lp i lp li chui cng vic: c mt ch th t trong chng trnh, xc nh xem cn lm g thc hin ch th , v ri thc hin cc lnh m my thch hp thc hin ch th .

    Mt cng dng ca trnh thng dch l thc thi cc chng trnh vit bng ngn ng bc cao, chng hn nh ngn ng Lisp. Cng dng th hai l chng cho php ta chy mt chng trnh ngn ng my dnh cho mt loi my tnh ny trn mt loi my tnh hon ton khc. V d, c mt chng trnh tn l "Virtual PC" chy trn cc my tnh ci h iu hnh Mac OS, l mt trnh thng dch thc thi cc chng trnh m my vit cho cc my tnh tng thch IBM PC. Nu ta chy "Virtual PC" trn mt my Mac OS, ta c th chy bt c chng trnh PC no, trong c c cc chng trnh vit cho Windows.

    Nhng ngi thit k Java chn cch t hp gia trnh bin dch v trnh thng dch. Cc chng trnh vit bng Java c bin dch thnh m my, nhng y l loi ngn ng my dnh cho loi my tnh khng tn ti loi my "o" ny c gi l My o Java (Java Virtual Machine JVM). Ngn ng my dnh cho my o Java c gi l Java bytecode, hay ngn gn l bytecode. chy c cc chng trnh Java trn mt loi my tnh bt k, ngi ta ch cn mt trnh thng dch dnh cho Java bytecode, trnh thng dch ny gi lp my o Java theo kiu m Virtual PC gi lp mt my tnh PC. My o Java cng chnh l tn gi dnh cho trnh thng

  • 22

    dch bytecode thc hin nhim v gi lp, do ta ni rng mt my tnh cn mt my o Java chy cc chng trnh Java.

    Hnh 2.1: Bin dch v thng dch i vi cc chng trnh Java

    Tt nhin, mi loi my tnh cn mt trnh thng dch Java bytecode khc, nhng mt khi c mt trnh thng dch nh vy, n c th chy mt chng trnh Java bytecode bt k. V cng chnh chng trnh Java bytecode c th chy trn bt c my tnh no c mt trnh thng dch Java bytecode. y chnh l mt trong cc c im quan trng ca Java: mt chng trnh sau khi bin dch c th chy trn nhiu loi my tnh khc nhau.

    C nhiu l do ti sao nn dng m trung gian l Java bytecode thay cho vic phn pht m ngun chng trnh Java v cho mi ngi t bin dch n sang m my ca my tnh h ang dng. Th nht, trnh bin dch l mt chng trnh phc tp trong khi trnh thng dch ch l mt chng trnh nh v n gin. Vit mt trnh thng dch cho mt loi my tnh mi d hn l vit mt trnh bin dch. Th hai, nhiu chng trnh Java cn c ti xung t mng my tnh. Vic ny dn n cc mi quan tm d thy v bo mt: ta khng mun ti v v chy mt chng trnh s ph hoi my tnh hoc cc file trong my tnh ca ta. Trnh thng dch bytecode hot ng vi vai tr b m gia my tnh ca ta v chng trnh ta ti v. N c th bo v ta khi cc hnh ng nguy him tim tng ca chng trnh .

    Khi Java cn l mt ngn ng mi, n b ch trch l chy chm. Do Java bytecode c thc thi bi mt trnh thng dch, c v nh cc chng trnh bytecode khng bao gi c th chy nhanh bng cc chng trnh c bin dch ra ngn ng my ca chnh my tnh m chng trnh ang chy trn . Tuy nhin, vn ny c gii quyt gn nh ton b bng vic s dng trnh bin dch JIT (just-in-time compiler) cho vic thc thi Java bytecode. Trnh bin dch JIT dch Java bytecode thnh m my. N lm vic ny trong khi thc thi chng trnh. Cng nh mt trnh thng dch thng thng, u vo cho mt trnh bin dch JIT l mt chng trnh Java bytecode, v nhim v ca n l thc thi chng trnh . Nhng trong khi thc thi chng trnh, n dch mt phn ca chng trnh ra m my. Nhng phn c bin dch ny khi c th c thc thi nhanh hn l so

  • 23

    vi khi chng c thng dch. Do mt phn ca chng trnh thng c thc thi nhiu ln trong khi chng trnh chy, mt trnh bin dch JIT c th ci thin ng k tng thi gian chy ca chng trnh.

    2.1.2. Cc nn tng Java

    Hng Sun nh ngha v h tr bn bn Java hng n cc mi trng ng dng khc nhau. Nhiu API (giao din lp trnh ng dng) ca Java cng c phn ra thnh nhm theo tng nn tng. Bn nn tng l:

    1. Java Card dnh cho th thng minh (smartcard) v cc thit b nh nh tng t. Th SIM v th ATM c s dng nn tng ny.

    2. Java Platform, Micro Edition (Java ME) dnh cho cc mi trng h thng nhng, chng hn nh in thoi di ng.

    3. Java Platform, Standard Edition (Java SE) l nn tng tiu chun, dnh cho mi trng my trm, thng c dng pht trin Java application v Java applet. y l nn tng c s dng rng ri, dng trin khai cc ng dng nh cho mc ch s dng tng qut. Java SE bao gm mt my o Java v mt b cc th vin cn thit cho vic s dng h thng file, mng, giao din ha, v.v.. trong chng trnh.

    4. Java Platform, Enterprise Edition (Java EE) dnh cho mi trng ln v phn tn ca doanh nghip hoc Internet, thng dng pht trin cc server. Nn tng ny khc vi Java SE ch n c thm cc th vin vi chc nng trin khai cc phn mm phn tn a tng c kh nng chu li.

    Cun sch ny s ch dng Java lm ngn ng minh ha cho lp trnh hng i tng, nn ch gii hn trong phm vi Java SE v Java application.

    2.1.3. Mi trng lp trnh Java

    Mt mi trng lp trnh Java thng bao gm mt s chng trnh thc hin cc nhim v khc nhau phc v cng vic son, dch, v chy mt chng trnh Java.

    C th s dng mt chng trnh son tho vn bn dng text bt k vit m ngun Java. Mt chng trnh Java bao gm mt hoc nhiu nh ngha lp. Theo quy c, mi nh ngha lp c t trong mt file ring. Theo quy tc mt file m ngun Java ch c cha nhiu nht mt nh ngha lp vi t kha public ngha ca t kha ny s c ni n sau. File cha nh ngha lp phi c tn trng vi tn ca lp public t trong file , v d file HelloWorld.java cha lp public c tn HelloWorld, file HelloWorldApplet.java cha lp public c tn HelloWorldApplet.

    Java l ngn ng phn bit ch hoa ch thng. Do nu lp HelloWorld c t trong file helloworld.java th s gy li khi bin dch.

  • 24

    Nhng ngi mi bt u s dng Java nn bt u t vic vit chng trnh bng mt phn mm son tho n gin v s dng cc cng c dng lnh trong b JDK dch v chy chng trnh. Ngay c nhng lp trnh vin thnh tho i khi cng s dng cch ny.

    Cc bc c bn xy dng v thc thi mt chng trnh Java:

    Son tho: M ngun chng trnh c vit bng mt phn mm son tho vn bn dng text v lu trn a. Ta c th dng nhng phn mm son tho vn bn n gin nht nh Notepad (trong mi trng Windows) hay emacs (trong mi trng Unix/Linux), hoc cc cng c son tho trong mi trng tch hp vit m ngun chng trnh. M ngun Java t trong cc file vi tn c phn m rng l .java.

    Dch: Trnh bin dch Java (javac) ly file m ngun v dch thnh cc lnh bng bytecode m my o Java hiu c, kt qu l cc file c ui .class.

    Np v chy: Trnh np Java (java) s dng my o Java chy chng trnh c dch ra dng bytecode.

    thun tin v tng nng sut cho vic lp trnh, ngi ta dng cc mi trng lp trnh tch hp (IDE integrated development environment). Trong , cc bc dch v chy thng c kt hp v thc hin t ng, tt c cc cng on i vi ngi dng ch cn l vic chy cc tnh nng trong mt phn mm duy nht. Trong s cc IDE ph bin nht cho Java c Eclipse, NetBean v JBuilder.

    Tuy IDE rt hu ch cho cc lp trnh vin, nhng ngi mi lm quen vi ngn ng nn t thc hin cc bc dch v chy chng trnh thay v thng qua cc chc nng ca IDE. Nh vy, ngi hc mi c th nm c bn cht cc bc ca qu trnh xy dng chng trnh, hiu c bn cht v c im chung ca cc IDE, trnh tnh trng b ph thuc vo mt IDE c th. Do , cun sch ny khng hng dn v mt IDE no m ch dng cng c chy t dng lnh trong b JDK.

    2.1.4. Cu trc m ngun Java

    Mi file m ngun (tn file c ui .java) cha mt nh ngha lp (class). Mi lp i din cho mt mnh ca chng trnh, mt chng trnh nh c th ch bao gm mt lp. nh ngha lp phi c bc trong mt cp ngoc { }.

    Mi lp c mt vi phng thc. Trong lp Car, phng thc break cha cc lnh m t chic xe con cn phanh nh th no. Cc phng thc ca lp no phi c khai bo bn trong nh ngha lp .

    Bn trong cp ngoc { } ca mt phng thc, ta vit mt chui cc lnh quy nh hot ng ca phng thc . C th tm coi phng thc ca Java gn ging nh hm hay chng trnh con.

  • 25

    Hnh 2.2: Cu trc m Java.

    2.1.5. Chng trnh Java u tin

    Chng trnh n gin trong Hnh 2.3 s hin ra mn hnh dng ch Hello, world!. Trong chng trnh c nhng chi tit m ti thi im ny ta cha cn hiu r v c th n vi chng sau. Ta s xem xt tng dng.

    Hnh 2.3: Chng trnh Java u tin.

    Hai dng u tin bt u bng chui // l cc dng ch thch chng trnh. l kiu ch thch dng n. Cc dng ch thch khng gy ra hot ng g ca chng trnh khi chy, trnh bin dch b qua cc dng ny. Ngoi ra cn c dng ch thch ko di trn nhiu dng, s dng /* v */ nh du im bt u v im kt thc on ch thch.

    Dng th ba, public class HelloWorld { tuyn b rng y l nh ngha v mt lp c tn HelloWorld. "HelloWorld" l tn ca lp v cng l tn ca chng trnh, tuy rng khng phi lp no cng l mt chng trnh nh trong v d ny.

    mt lp l mt chng trnh, ta cn vit cho lp mt phng thc c tn main vi nh ngha c dng sau. y l c php bt buc ca phng thc main():

  • 26

    Khi ta yu cu trnh thng dch Java chy chng trnh HelloWorld, my o Java s tm lp c tn HelloWorld, ri n tm phng thc main() vi c php bt buc nh trn. y l ni chng trnh bt u thc hin v kt thc, my o ln lt chy cc lnh bn trong cp ngoc { } ca phng thc main(). Phng thc main() c th gi cc phng thc khc c nh ngha trong lp hin ti hoc trong cc lp khc, n quyt nh chui cng vic m my tnh s thc hin khi chng trnh chy. Mi ng dng Java phi c t nht mt lp, v c mt phng thc main() trong mt lp no .

    T kha public ti dng u tin ca main() c ngha rng y l phng thc c mc truy nhp public (cng khai) phng thc c th c gi t bt c u trong m chng trnh. Thc t l main() c gi t trnh thng dch mt th nm ngoi chng trnh. T kha static s c gii thch trong cc chng sau. T kha void c ngha rng phng thc main() khng c kt qu tr v. Tham s String[] args ca hm main() l mng cha cc xu k t c nhp vo di hnh thc tham s dng lnh khi ta chy chng trnh t ca s lnh (console).

    Thn phng thc main(), cng nh bt k mt hm no khc, c bt u v kt thc bi cp ngoc { }, bn trong l chui cc lnh m khi chng trnh chy chng s c thc hin tun t t lnh u tin cho n lnh cui cng. Mi lnh Java u kt thc bng mt du chm phy. Phng thc main() trong v d ang xt c cha ng mt lnh. Lnh ny c tc dng hin th thng ip ra u ra chun (standard output). l v d v mt lnh gi hm. Lnh ny gi hm System.out.println(), mt hm c sn trong th vin chun Java, yu cu hm ny thc hin vic hin th thng ip. Ni theo cch ca lp trnh hng i tng, lnh chnh l mt thng ip gi ti i tng c tn System.out yu cu in ra u ra chun mt xu k t. Khi chy chng trnh, thng ip "Hello, world!" (khng c nhy kp) s c hin th ra u ra chun. u ra chun l ci g th ty vo vic chng trnh ang chy loi thit b no, platform no.

    Lu rng trong Java, mt hm khng th tn ti c lp. N phi thuc v mt lp no . Mt chng trnh c nh ngha bi mt lp public c dng

    Trong , l tn lp, tn chng trnh, v cng l tn file m ngun. public l t kha cn c t u khai bo cc lp chng trnh. Nhng

  • 27

    lp c khai bo vi t kha ny cn c t ti mt file c tn file trng vi tn lp, chnh xc n c ch hoa hay ch thng. V d, lp HelloWorld trn nm trong file m ngun c tn HelloWorld.java. Sau khi bin dch file m ngun HelloWorld.java, ta s c file bytecode HelloWorld.class file c th chy bng trnh thng dch Java.

    Ph lc A hng dn chi tit v cch s dng cng c dng lnh JDK dch v chy chng trnh. y l b phn mm min ph, c th c ti v t trang web ca Oracle3.

    2.2. BIN

    Trong mt chng trnh, bin l tn ca mt vng b nh c dng lu d liu trong khi chng trnh chy. D liu lu trong mt bin c gi l gi tr ca bin . Chng ta c th truy nhp, gn hay thay i gi tr ca cc bin, khi bin c gn mt gi tr mi, gi tr c s b ghi ln.

    Java yu cu mi bin trc khi dng phi c khai bo. V d:

    Cc bin c khai bo trong mt hm l bin a phng. Nn khai bo bin a phng ngay trc khi s dng hoc u khi m chng trnh c ng khung trong cp ngoc { }. Bin a phng c khai bo ti hm no th c hiu lc bn trong hm , chng hn numberOfBaskets v applePerBasket trong Hnh 2.4 l cc bin a phng ca hm main v ch c hiu lc bn trong hm main(). Ngoi bin a phng, Java cn c loi bin thc th vi phm vi nm trong mt i tng v bin lp vi phm vi lp. Ch-ng 4 v Ch-ng 10 s m t chi tit v hai loi bin ny.

    3 a ch http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • 28

    Hnh 2.4: S dng bin a phng.

    Mt bin a phng c khai bo nhng cha c gn mt gi tr no c gi l bin cha c khi to v n c gi tr khng xc nh. Trnh bin dch s bo li i vi m s dng bin a phng cha c khi to. C th khi to gi tr ca bin ngay ti lnh khai bo trnh tnh hung qun khi to bin, v d:

    char grade = 'A';

    Vng hiu lc ca mt bin c th cn nh hn phm vi phng thc. Trong cc phng thc, ta thng to cc khi lnh. Thng thng, cc khi c gii hn bi cp ngoc { }. V d v mt s khi thng gp l cc lnh c cu trc (for, while) v cc lnh iu kin (if) c trnh by chi tit ti Mc 2.4. Nu mt bin c khai bo bn trong mt khi lnh th n ch c phm vi cho n ht khi lnh .

    2.3. CC PHP TON C BN

    2.3.1. Php gn

    Php gn l cch gn mt gi tr cho mt bin hoc thay i gi tr ca mt bin. Lnh gn trong Java c cng thc:

    bin = biu thc; Trong , du bng (=) c gi l du gn hay ton t gn, biu thc v phi

    du gn c tnh ri ly kt qu gn cho bin nm v tri.

    Biu thc ti v phi c th l mt gi tr trc tip, mt bin, hoc mt biu thc phc tp.

    2.3.2. Cc php ton s hc

    Java h tr nm php ton s hc sau: + (cng), - (tr), * (nhn), / (chia), % (modulo ly phn d ca php chia). Cc php ton ny ch p dng c cho cc bin kiu c bn nh int, long v khng p dng c cho cc kiu tham chiu.

    Php chia c thc hin cho hai gi tr kiu nguyn s cho kt qu l thng nguyn. V d biu thc 4 / 3 cho kt qu bng 1, cn 3 / 5 cho kt qu bng 0.

  • 29

    Mt s php gn km theo biu thc xut hin nhiu ln trong mt chng trnh, v vy Java cho php vit cc php gn biu thc mt cch ngn ngn hn, s dng cc php gn phc hp (+=, -=, *=, /=, %=, >>=,

  • 30

    K hiu ton hc Ton t V d ngha

    > > x > y x ln hn y < < x < y x nh hn y >= x >= y x ln hn hoc bng y

  • 31

    lnh lp (loop) thc hin lp i lp li mt hnh ng cho n khi mt iu kin dng no c tha mn.

    Hai loi lnh to thnh cc cu trc iu khin (control structure) bn trong chng trnh.

    2.4.1. Cc cu trc r nhnh

    Lnh if-else Lnh if-else (hay gi tt l lnh if) cho php r nhnh bng cch la chn thc

    hin mt trong hai hnh ng. V d, trong mt chng trnh xp loi im thi, nu im ca sinh vin nh hn 4.0, sinh vin c coi l trt, nu khng th c coi l . Th hin ni dung bng mt lnh if-else ca Java, ta c on m:

    if (score < 4.0) System.out.print("Failed"); else System.out.print("Passed");

    Khi chng trnh chy mt lnh if-else, u tin n kim tra biu thc iu kin nm trong cp ngoc n sau t kha if. Nu biu thc c gi tr bng true th lnh nm sau t kha if s c thc hin. Ngc li, lnh nm sau else s c thc hin. Ch l biu thc iu kin phi c t trong mt cp ngoc n.

    Hnh 2.5: V d v cu trc if-else.

    Chng trnh v d trong Hnh 2.5 yu cu ngi dng nhp im ri in ra cc thng bo khc nhau ty theo im s hoc trt.

  • 32

    Trong cu trc r nhnh if-else, ta c th b phn else nu khng mun chng trnh thc hin hnh ng no nu iu kin khng tha mn. Chng hn, nu mun thm mt li khen c bit cho im s xut sc t 9.0 tr ln, ta c th thm lnh if sau vo trong chng trnh ti Hnh 2.5.

    if (score >= 9.0) System.out.print("Excellent!");

    Ta c th dng cc cu trc if-else lng nhau to ra iu kin r nhnh phc tp. Ly mt v d phc tp hn: cho trc im s (lu ti bin score kiu double), xc nh xp loi hc lc A, B, C, D, F ty theo im . Quy tc xp loi l: nu im t 8.5 tr ln th t loi A, im t 7.0 ti di 8.5 t loi B, v.v.. Ti on m xt cc trng hp ca xp loi im, ta c th dng cu trc if-else lng nhau nh sau:

    if (score >= 8.5) grade = 'A';

    else if (score >= 7.0)

    grade = 'B';

    else if (score >= 5.5)

    grade = 'C';

    else if (score >= 4.0)

    grade = 'D';

    else

    grade = 'F';

    Mt iu cn c bit lu l nu mun thc hin nhiu hn mt lnh trong mi trng hp ca lnh if-else, ta cn dng cp ngoc { } bc tp lnh thnh mt khi lnh. V d, phin bn phc tp hn ca lnh if trong Hnh 2.5:

  • 33

    Lnh switch Khi chng ta mun vit mt cu trc r nhnh c nhiu la chn, ta c th s

    dng nhiu lnh if-else lng nhau. Tuy nhin, trong trng hp vic la chn r nhnh ph thuc vo gi tr (kiu s nguyn hoc k t, hoc xu k t k t JDK 7.0) ca mt bin hay biu thc, ta c th s dng cu trc switch chng trnh d hiu hn. Lnh switch in hnh c dng nh sau:

    switch (biu_thc) { case hng_1:

    tp_lnh_1; break; case hng_2:

    tp_lnh_2; break; ... default:

    tp_lnh_mc_nh; }

    Khi lnh switch c chy, biu_thc c tnh gi tr v so snh vi hng_1. Nu bng nhau, chui lnh k t tp_lnh_1 c thc thi cho n khi gp lnh break u tin, n y chng trnh s nhy ti im kt thc cu trc switch. Nu biu_thc khng c gi tr bng hng_1, n s c so snh vi hng_2, nu bng nhau, chng trnh s thc thi chui lnh k t tp_lnh_2 ti khi gp lnh break u tin th nhy ti cui cu trc switch. Quy trnh c tip din nh vy. Cui cng, nu biu_thc c gi tr khc vi tt c cc gi tr c lit k (hng_1, hng_2, ...), chng trnh s thc thi tp_lnh_mc_nh nm sau nhn default: nu nh c nhn ny (khng bt buc).

    V d, lnh sau so snh gi tr ca bin grade vi cc hng k t 'A', 'B', 'C' v in ra cc thng bo khc nhau cho tng trng hp.

  • 34

    switch (grade) { case 'A': System.out.print("Grade = A"); break; case 'B': System.out.print("Grade = B"); break; case 'C': System.out.print("Grade = C"); break; default: System.out.print("Grade's not A, B or C");}

    N tng ng vi khi lnh if-else lng nhau sau:

    Lu , cc nhn case trong cu trc switch phi l hng ch khng th l bin

    hay biu thc. Nu cn so snh vi bin hay biu thc, ta nn dng khi lnh if-else lng nhau.

    Vn c bit ca cu trc switch l cc lnh break. Nu ta khng t gn mt lnh break vo cui chui lnh cn thc hin cho mi trng hp, chng trnh s chy tip chui lnh ca trng hp sau ch khng t ng nhy ti cui cu trc switch. V d, on chng trnh sau s chy lnh in th nht nu grade nhn mt trong ba gi tr 'A', 'B', 'C' v chy lnh in th hai trong trng hp cn li:

    switch (grade) { case 'A': case 'B': case 'C': cout

  • 35

    C mt lu nh l Scanner khng h tr vic c tng k t mt. Do , c gi tr ca grade do ngi dng nhp, ta dng phng thc next() c mt chui (khng cha k t trng), ri ly k t u tin bng hm charAt(0) (m kiu String cung cp) lm gi tr ca grade.

  • 36

    import java.util.Scanner;

    public class SwitchExample { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter your grade: "); String userInput = input.next(); char grade = userInput.charAt(0);

    switch (grade) { case 'A': System.out.println("Excellent!"); break; case 'B': System.out.println("Great!"); case 'C': case 'D': System.out.println("Well done!"); break; case 'F': System.out.println("Sorry, you failed."); break; default: System.out.println("Error! Invalid grade."); } }}

    Kt qu chy chng trnh

    Enter your grade: AExcellent!

    Enter your grade: BGreat!Well done!

    Enter your grade: DWell done!

    Enter your grade: FSorry, you failed.

    Hnh 2.6: V d s dng cu trc switch.

    K t Java SE 7, ta c th dng cc i tng String lm nhn cho cc lnh case. V d:

    switch (answer) { case "yes": System.out.print("You said 'yes'"); break; case "no": System.out.print("You said 'no'"); break; default: System.out.print("I don't get what you mean.");}

  • 37

    2.4.2. Cc cu trc lp

    Cc chng trnh thng cn phi lp i lp li mt hot ng no . V d, mt chng trnh xp loi hc lc s cha cc lnh r nhnh gn xp loi A, B, C cho mt sinh vin ty theo im s ca sinh vin ny. xp loi cho c mt lp, chng trnh s phi lp li thao tc cho tng sinh vin trong lp. Phn chng trnh lp i lp li mt lnh hoc mt khi lnh c gi l mt vng lp. Lnh hoc khi lnh c lp i lp li c gi l thn ca vng lp. Cu trc lp cho php lp trnh vin ch th cho chng trnh lp i lp li mt hot ng trong khi mt iu kin no vn c tha mn.

    Khi thit k mt vng lp, ta cn xc nh thn vng lp thc hin hnh ng g. Ngoi ra, ta cn cn mt c ch quyt nh khi no vng lp s kt thc.

    Mc ny s gii thiu v cc lnh lp m Java cung cp.

    Vng while Vng while lp i lp li chui hnh ng, gi l thn vng lp, nu nh iu

    kin lp vn cn c tha mn. C php ca vng lp while nh sau:

    while (iu_kin_lp) thn_vng_lp Cu trc ny bt u bng t kha while, tip theo l iu kin lp t trong

    mt cp ngoc n, cui cng l thn vng lp. Thn vng lp hay cha nhiu hn mt lnh v khi th phi c gi trong mt cp ngoc { }.

    Khi thc thi mt cu trc while, u tin chng trnh kim tra gi tr ca biu thc iu kin, nu biu thc cho gi tr false th nhy n im kt thc lnh while, cn nu iu kin lp c gi tr true th tin hnh thc hin tp lnh trong thn vng lp ri quay tr li kim tra iu kin lp, nu khng tha mn th kt thc, nu tha mn th li thc thi thn vng lp ri quay li... Tp lnh thn vng lp c th lm thay i gi tr ca biu thc iu kin t true sang false dng vng lp.

    V d, xt mt chng trnh c nhim v m t 1 n mt ngng number cho trc. on m m t 1 n number c th c vit nh sau:

    count = 1;while (count

  • 38

    tng count ln 3) trc khi quay li im xut pht ca vng lp. Ti ln kim tra iu kin lp ny, biu thc 3 2 cho gi tr false, vng lp kt thc do iu kin lp khng cn c tha mn, chng trnh chy tip lnh nm sau cu trc while ang xt.

    Cu trc while trong on m trn c th c biu din bng s trong Hnh 2.7.

    Hnh 2.7: S mt vng lp while.

    Chng trnh hon chnh trong Hnh 2.8 minh ha cch s dng vng lp while in ra cc s nguyn (bin count) t 1 cho n mt ngng gi tr do ngi dng nhp vo t bn phm (lu ti bin number). Km theo l kt qu ca cc ln chy khc nhau vi cc gi tr khc nhau ca number. c bit, khi ngi dng nhp gi tr 0 cho number, thn vng while khng chy mt ln no, th hin vic khng mt s no c in ra mn hnh. L do l v nu number bng 0 th biu thc count

  • 39

    Hnh 2.8: V d v vng lp while.

    Vng do-while Vng do-while rt ging vi vng while, khc bit l ch thn vng lp s

    c thc hin trc, sau mi kim tra iu kin lp, nu ng th quay li chy thn vng lp, nu sai th dng vng lp. Khc bit c ngha rng thn ca vng do-while lun c chy t nht mt ln, trong khi thn vng while c th khng c chy ln no.

    Cng thc ca vng do-while tng qut l: do

    thn_vng_lp while (iu_kin_lp); Tng t nh vng while, thn_vng_lp ca vng do-while c th ch gm

    mt lnh hoc thng gp hn l mt chui lnh c bc trong mt cp ngoc { }. Lu du chm phy t cui ton b khi do-while.

  • 40

    Cng thc tng qut ca vng do-while trn tng ng vi cng thc sau nu dng vng while:

    thn_vng_lp while (iu_kin_lp) thn_vng_lp minh ha hot ng ca hai cu trc lp while v do-while, ta so snh hai

    on m di y: count = 1;

    while (count

  • 41

    thnh phn cng c th l biu thc rng nu cn thit, nhng k c khi vn phi c hai du chm phy.

    Ta c th khai bo bin ngay trong phn khi_to ca vng for, chng hn i vi bin con m. Nhng cc bin c khai bo ti ch c hiu lc bn trong cu trc lp. V d:

    for (int count = 1; count

  • 42

    Lnh break khi c thc thi bn trong mt cu trc lp hay mt cu trc switch c tc dng lp tc chm dt cu trc , chng trnh s chy tip lnh nm tip sau cu trc . Lnh break thng c dng kt thc sm vng lp (thay v i n lt kim tra iu kin lp) hoc b qua phn cn li ca cu trc switch.

    V v d s dng lnh break trong vng lp. Chng hn, nu ta sa v d trong Hnh 2.9 vng for ngng li khi ngi dng nhp im s c gi tr m, ta c chng trnh trong Hnh 2.10. Vi ci t ny, khi ngi dng nhp mt im s c gi tr m, iu kin (mark < 0) s cho kt qu true, chng trnh thot khi vng for v chy tip t lnh if nm sau . Trong trng hp , bin count cha kp tng n ngng subjects (iu kin lp ca vng for cha kp b ph v). Do , biu thc (count >= subjects) trong lnh if sau c ngha "vng for c chy subjects ln hay khng?" hoc "vng for c b ngt gia chng bi lnh break hay khng?", hay l "d liu nhp vo c thnh cng hay khng?".

    Hnh 2.10: V d v lnh break.

    Lnh continue nm trong mt vng lp c tc dng kt thc ln lp hin hnh ca vng lp . Hnh 2.11 l mt bn sa i khc ca chng trnh trong Hnh 2.9. Trong phin bn ny, chng trnh khng ghi nhn im s c gi tr m, cng khng kt thc chng trnh sau khi bo li nh bn trong Hnh 2.10, m yu cu nhp li cho n khi no thnh cng. Khi gp im s m c nhp vo (bin mark), lnh continue c thc thi c tc dng b qua on lnh ghi nhn im na sau ca thn vng while (on cng dn vo tng sum v tng bin m count).

  • 43

    Ln lp c thc hin sau s yu cu nhp li im cho mn hc ang nhp d (xem kt qu chy chng trnh trong Hnh 2.11).

    Mt im cn lu l cc lnh break hay continue ch c tc dng i vi vng lp trong cng cha n. Chng hn, nu c hai vng lp lng nhau v lnh break nm trong vng lp bn trong, th khi c thc thi, lnh break ch c tc dng kt thc vng lp bn trong.

    import java.util.Scanner;

    public class ContinueTest {

    public static void main(String[] args) {

    float sum = 0;

    int count=0, subjects = 3;

    Scanner input = new Scanner(System.in);

    System.out.print( "Enter the marks for "

    + subjects + " subjects: ");

    while (count < subjects) {

    System.out.print("#" + (count+1) + ": ");

    float mark = input.nextFloat();

    if (mark < 0) {

    System.out.println(mark + " ignored");

    continue;

    }

    sum += mark;

    count++;

    }

    System.out.print("Average mark = "+sum/subjects);

    }

    } % java ContinueTestEnter the marks of 3 subjects.#1: 8.0#2: 7.2#3: -5-5 ignored#3: 10.0Average mark = 8.400001

    Hnh 2.11: V d v lnh continue.

    2.4.3. Biu thc iu kin trong cc cu trc iu khin

    Hu ht cc cu trc iu khin m ta ni n trong chng ny u dng n mt thnh phn quan trng: biu thc iu kin. Trong cc v d trc, ta mi ch dng n cc iu kin n gin, chng hn count

  • 44

    Khi kim tra iu kin 80 # score < 90, bt ng thc ton hc ny cn c tch thnh hai iu kin n. Bt ng ng khi c hai iu kin n u tha mn. l khi ta cn dng php ton logic && (AND).

    if (score >= 80 && score < 90)

    grade = 'B';

    Khi mt trong hai iu kin xy ra, hoc tin ht hoc ti y, th khng th mua thm hng. Trng hp ny, ta cn dng php ton logic || (OR).

    if (moneyLeft

  • 45

    Bi tp 1. in t thch hp vo ch trng trong mi cu sau:

    a) Mi khai bo lp m bt u bng t kha _______ phi c lu trong mt file c tn trng vi tn lp v kt thc bng phn m rng .java

    b) T kha ______ to mt i tng thuc lp c tn t bn phi t kha.

    c) Mi bin khi khai bo phi c ch r mt _______ v mt ______.

    2. Cc pht biu sau y ng hay sai? Nu sai, hy gii thch.

    a) Lp no c cha phng thc public static void main(String [] args) th c th c dng chy ng dng.

    b) Mt tp lnh cha trong mt cp ngoc {} c gi l mt khi lnh

    c) Mt lnh c iu kin cho php mt hnh ng c lp i lp li trong khi mt iu kin no vn gi gi tr true.

    d) Java cung cp cc php ton phc hp nh +=, -= vit tt cc lnh gn.

    e) Lung iu khin quy nh th t cc lnh c thc thi trong chng trnh.

    f) Php ton i kiu (double) tr v mt gi tr nguyn l bn sao ca ton hng ca n.

    g) Bin a phng kiu boolean nhn gi tr mc nh l false.

    h) Bin a phng kiu boolean nhn gi tr mc nh l true.

    3. Ci t b cng c JDK, dch v chy th cc chng trnh v d cho trong chng ny.

    4. Vit cc lnh Java thc hin tng nhim v sau y:

    a) Dng mt lnh gn tng ca x v y cho z v tng x thm 1 sau php tnh trn.

    b) Kim tra xem gi tr bin count c ln hn 10 hay khng, nu c th in ra dng text "Count is greater than 10".

    c) Gim x i 1 n v, sau gn cho bin total gi tr l hiu ca total v x. Ch dng mt lnh.

    d) Tnh phn d ca php chia q cho d ri gn kt qu cho q.

    e) Khai bo cc bin sum v x thuc kiu int.

    f) Cng dn gi tr ca x vo bin sum

    g) In ra dng "The sum is ", tip theo l gi tr ca bin sum.

    h) Tnh tng cc s chn trong khong t 1 n 99.

  • 46

    i) S dng vng lp in ra cc s t 1 n 10 trn mt dng, dng k t tab ('\t') ngn cch gia cc s.

    5. Vit mt chng trnh tnh tng cc s nguyn t 1 n 10, s dng vng while cho nhim v lp.

    6. Vit mt chng trnh tnh tng cc s nguyn t 1 n 10, s dng vng for cho nhim v lp.

    7. Vit mt chng trnh tnh tng cc s nguyn t 1 n 10, s dng vng do-while cho nhim v lp.

    8. Tm kt qu hin th ca chng trnh sau:

    9. Sp xp li cc dng m sau y thnh chng trnh c kt qu hin th nh hnh

    di. T b sung cc ngoc ng } vo nhng ni thch hp.

    10. Vit chng trnh th nghim vic in d liu ra mn hnh bng lnh

    System.out.printf(), v d:

  • 47

    System.out.printf(

    "Hello, I am %s, I am %d years old.\n", "Bob", 20 );

    trong , %s l k hiu nh dng i din cho mt xu k t (trong v d l "Bob") cn %d i din cho mt s kiu int (trong v d l 20). Tnh nng ny c Java 5.0 mn t ngn ng lp trnh C. Chi tit v tnh nng ny xem li Ph lc G Formatted Output ca ti liu [1].

  • 48

    Chng 3. Lp v i tng

    Trong chng ny, chng ta s bn su hn v lp v i tng. Cc khi nim hng i tng khc s ln lt l trng tm ca cc chng sau. Chng ny cng ni v cc vn cn bn m ta cn xem xt mi khi thit k mt lp.

    Nh gii thiu s lc trong chng trc, chng trnh Java khi chy l mt tp hp cc i tng, chng c yu cu thc hin dch v v yu cu dch v ca cc i tng khc. Mt i tng c to ra t mt lp c gi l mt thc th (instance) ca lp . Ta c th coi "thc th" l mt cch gi khc ca "i tng".

    Lp l khun mu t to ra cc thc th. Vy nn, khi thit k mt lp, ta cn ngh n nhng i tng s c to ra t lp . C hai loi thng tin quan trng v mi i tng:

    Nhng thng tin m i tng bit.

    Nhng vic m i tng lm.

    Hnh 3.1: Hai loi thng tin quan trng v i tng.

    Nhng g m mt i tng bit v bn thn n c gi l cc bin thc th (instance variable) hay thuc tnh thc th (instance attribute). Chng biu din trng thi (state) ca i tng hay cn gi l d liu ca i tng, cc i tng khc nhau thuc cng loi c th c cc gi tr khc nhau cho cc bin thc th. Cc bin thc th c th l bin thuc mt trong nhng kiu d liu c bn (int, boolean, float...) hoc l tham chiu ti i tng thuc mt lp no .

    Nhng g mt i tng c th lm c gi l cc phng thc (method). Cc phng thc c thit k thao tc trn d liu ca i tng. Mt i tng thng c cc phng thc c v ghi gi tr cho cc bin thc th. V d, mt i tng ng h bo thc c mt bin thc th lu thi gian cn bo thc, v hai phng thc t v ly gi bo thc.

    Tm li, i tng c cc bin thc th v cc phng thc, cc bin thc th v cc phng thc ny c nh ngha trong thit k ca lp. Cng vic vit chng trnh l vit cc nh ngha lp. nh ngha lp m t v cc thnh phn m mi

  • 49

    thc th ca n s cha, c th l d liu ca mi thc th v cc phng thc cho php truy nhp v sa i d liu .

    Mt lp khng phi l mt i tng, n l mt khun mu dng to nn i tng. N m t cch to mt i tng thuc kiu c th . Mi i tng to ra t mt lp c th c cc gi tr ring cho cc bin thc th. V d, ta c th dng lp BankAccount to ra nhiu i tng ti khon ngn hng, mi ti khon c mt ch ti khon, mt s ti khon, v mt s d ring; mi ti khon u c th lm nhng vic ging nhau (rt tin, gi tin, ng ti khon), tuy ch bit nhng g ch c ti khon c th .

    3.1. TO V S DNG I TNG

    Vy lm th no to v s dng mt i tng? Ta cn n hai lp. Mt lp dnh cho kiu i tng m ta mun to (BankAccount, Dog, Cow, AlarmClock, AddressBookEntry,...) v mt lp khc th nghim lp . Lp th nghim l chng trnh, ni ta t phng thc main, v ti phng thc main , ta to v s dng cc i tng thuc lp va xy dng. Lp th nghim ch c mt nhim v duy nht: chy th cc bin v phng thc ca lp i tng mi.

    Hnh 3.2. Lp Cow v lp th nghim CowTestDrive

    T y, trong nhiu v d, ta s dng hai lp. Mt l lp nh ngha cc i tng ta mun dng, lp kia l lp th nghim vi tn l TestDrive. Chng hn, khi ta xy dng lp Cow, ta s cn thm lp CowTestDrive l chng trnh th nghim lp Cow. Ch c TestDrive mi c cha mt phng thc main, vi mc ch to cc i tng thuc lp , ri truy nhp cc phng thc v bin ca cc i tng . V d trong Hnh 3.2 dng hai lp Cow

  • 50

    v CowTestDrive minh ha cch xy dng mt lp mi v th nghim cc i tng thuc lp .

    Chng trnh CowTestDrive th nghim lp Cow bng cch to mt i tng c4 thuc lp ny (lnh Cow c = new Cow()), sau dng ton t du chm (.) truy nhp cc bin thc th v gi phng thc ca i tng. C th, lnh c.age = 2 gn gi tr 2 cho bin thc th age ca c, cn c.moo() kch hot phng thc moo() ca c.

    ci t mt lp, vic vit mt lp th nghim km theo khng phi l bc bt buc. Tuy nhin, l cng vic cn thit m bo rng lp c ci t ng v hot ng nh mong mun ca ngi thit k.

    Hnh 3.3. Lp PhoneBookEntry v lp th nghim.

    V d trong Hnh 3.3 tng t vi v d trong Hnh 3.2. Phng thc main y to hai i tng thuc lp PhoneBookEntry, gn gi tr cho cc bin thc th ca chng v gi phng thc display() cho tng i tng. rng hai i tng tom v jerry c cc b bin name v phone c lp vi nhau, tuy rng chng trng tn.

    4 y ta tm gi l "i tng c". Trong nhiu ng cnh, ngi ta cng quen gi l "i tng

    c". Tuy nhin, c bn cht khng phi l i tng m ch l tham chiu i tng. Chng 4 s bn chi tit v khi nim tham chiu i tng.

  • 51

    3.2. TNG TC GIA CC I TNG

    Nh ni n trong cc phn trc, phng thc main phc v hai mc tiu s dng: (1) th nghim cc lp ci; (2) khi ng ng dng Java. Khi trong cc phng thc main ni trn, ta khng thc s mi trng hng i tng, main ch to v chy th cc i tng. Trong khi , mt ng dng hng i tng thc th, cc i tng phi "ni chuyn" vi nhau.

    Mt ng dng hng i tng ni chung v ng dng Java ni ring thc cht l cc i tng ni chuyn vi nhau. "Ni chuyn" y c ngha rng cc i tng gi cc phng thc ca nhau. Ti cc v d trc, ta c cc lp TestDrive to i tng cc lp khc v chy th cc phng thc ca chng. Ti Ch-ng 5, ta s c v d m phng thc main to cc i tng ri th cho chng tng tc vi nhau.

    Tm thi, ta dng mt v d nh v tr chi on s c mt cht phc ha v hot ng ca mt ng dng hng i tng thc th. Do ta vn ang giai on lm quen vi Java, chng trnh v d ny hi ln xn v khng hiu qu, ta s ci tin n nhng chng sau. Nu c nhng on m kh hiu, ta hy tm b qua, v im quan trng ca v d ny l cc i tng ni chuyn vi nhau.

    Tr chi on s bao gm mt i tng game v ba i tng player. i tng game sinh ngu nhin mt s trong on t 0 n 9, ba player ln lt th on s . Chng trnh bao gm ba lp: GameLauncher, GuessGame, v Player

    L-gic chng trnh:

    GameLauncher l ni ng dng bt u chy. Lp ny c phng thc main().

    Phng thc main() to mt i tng GuessGame c to v chy phng thc startGame() ca n.

    Phng thc startGame() ca i tng GuessGame l ni ton b vn chi xy ra. N to ra ba u th (player), ri "ba" ra mt s ngu nhin (ci m cc u th cn on). Sau , n yu cu tng u th on, kim tra kt qu, v in ra thng tin v (cc) u th thng cuc hoc yu cu c ba on li.

  • 52

    Hnh 3.4. Ba lp ca chng trnh on s.

    Ni dung y ca m ngun cc lp GameLauncher, GuessGame v Player c cho trong Hnh 3.5 v Hnh 3.6.

  • 53

    public class GuessGame {

    Player p1;

    Player p2;

    Player p3;

    public void startGame() { p1 = new Player(); p2 = new Player(); p3 = new Player(); int guessp1 = 0; int guessp2 = 0; int guessp3 = 0; boolean p1isRight = false; boolean p2isRight = false; boolean p3isRight = false; int targetNumber = (int) (Math.random() * 10); System.out.println("I'm thinking of a number between 0 and 9..."); while(true) { System.out.println("Number to guess is " + targetNumber);

    p1.guess(); p2.guess(); p3.guess();

    guessp1 = p1.number; System.out.println("Player one guessed " + guessp1); guessp2 = p2.number; System.out.println("Player two guessed " + guessp2); guessp3 = p3.number; System.out.println("Player three guessed " + guessp3);

    if (guessp1 == targetNumber) { p1isRight = true; } if (guessp2 == targetNumber) { p2isRight = true; } if (guessp3 == targetNumber) { p3isRight = true; }

    if (p1isRight || p2isRight || p3isRight) { System.out.println("We have a winner!"); System.out.println("Player one got it right? " + p1isRight); System.out.println("Player two got it right? " + p2isRight); System.out.println("Player three got it right? " + p3isRight); System.out.println("Game is over"); break; } else { System.out.println("Players will have to try again."); } } }}

    GuessGame c 3 bin thc th dnh cho 3 i tng Player

    to 3 i tng Player v gn cho 3 bin thc th

    khai bo 3 bin lu 3 gi tr m 3 u th on

    khai bo 3 bin lu gi tr ng/sai ty theo cu tr li ca cc u th

    sinh 1 s 3 u th on

    yu cu tng u th on (gi phng thc guess())

    ly kt qu on ca tng u th

    Kim tra tng ngi xem on ng khng, nu ng th t bin ca ngi v true.Nh rng ta t gi tr mc nh ca cc bin l false

    nu c t nht 1 ngi on ng( || l ton t HOC )

    nu khng th lp li vic yu cu on s

    Hnh 3.5: M ngun GuessGame.java.

  • 54

    Hnh 3.6: Player.java v GameLauncher.java

    Nhng im quan trng:

    Tt c m Java u nm trong mt lp no .

    Mt lp c t cch to mt i tng thuc lp . Mt lp ging nh mt bn thit k

    Mt i tng c th t lo cho bn thn, ta khng phi cn bit hay quan tm mt i tng lm vic nh th no.

    Mt i tng bit v mt s th v c th lm mt s vic.

    Nhng g mt i tng bit v chnh n c gi l cc bin thc th (thuc tnh) ca n. Chng i din cho trng thi ca i tng .

    Nhng g mt i tng c th lm c gi l cc phng thc. Chng i din cho hnh vi ca i tng .

    Khi vit mt lp, ta c th mun vit mt lp khc test. Ti ta to cc i tng thuc lp kia v th nghim vi chng.

    Ti thi gian chy, mt chng trnh Java chnh l mt nhm cc i tng ang "ni chuyn" vi nhau.

  • 55

    Bi tp 1. in vo ch trng cc t thch hp (lp, i tng, phng thc, bin thc th):

    _____________ c bin dch t mt file .java.

    _____________ ng vai tr nh mt khun mu.

    _____________ thc hin cc cng vic.

    _____________ c th c nhiu phng thc.

    _____________ biu din 'trng thi'

    _____________ c cc hnh vi.

    _____________ c t trong cc i tng.

    _____________ c dng to cc thc th i tng.

    _____________ c th thay i khi chng trnh chy

    _____________ c cc phng thc.

    2. Tm v sa li ca cc chng trnh sau (mi phn l ni dung ca mt file m ngun hon chnh).

    a)

    b)

  • 56

  • 57

    Chng 4. Bin v cc kiu d liu

    Trong cc v d cc chng trc, ta gp cc bin c s dng hai mi trng: (1) bin thc th l trng thi ca i tng, v (2) bin a phng l bin c khai bo bn trong mt phng thc. Sau ny, ta s dng bin dng i s (cc gi tr c truyn vo trong phng thc bi li gi phng thc), v dng gi tr tr v (gi tr do phng thc tr v cho ni gi n). Ta gp cc bin c khai bo vi kiu d liu c bn, v d kiu int, v cc bin c khai bo thuc kiu i tng nh String, Cow, PhoneBookAddress. Trong chng ny, ta s m t k v cc loi bin ca Java, cch khai bo v s dng bin.

    Java l ngn ng nh kiu mnh (strongly-typed language). Ngha l, bin no cng c kiu d liu xc nh v phi c khai bo trc khi s dng. Trnh bin dch khng cho php gn mt gi tr kiu Cow vo mt bin kiu String, chuyn g xy ra nu ta gi phng thc length() ca bin String ly di xu k t? Java cng khng cho php gn mt gi tr kiu s thc vi du chm ng (chng hn float) vo mt bin kiu s nguyn (chng hn int), trnh bin dch s pht hin v bo li. Ta phi dng php i kiu mt cch tng minh lm vic ny, bit rng vic c th lm gim chnh xc ca gi tr.

    Cc kiu d liu ca Java c chia thnh hai loi: d liu c bn (primitive) v tham chiu i tng (object reference).

    Cc kiu d liu c bn dnh cho cc gi tr c bn nh cc s hay cc k t. V d nh cc kiu char (k t), int. Cn cc tham chiu i tng l cc tham chiu ti i tng. Nghe c v khng r rng hn c cht no, nhng ta s quay li khi nim "tham chiu" ny sau (nu ta bit v C/C++ th khi nim ny gn ging vi con tr ti i tng). Nhng d thuc loi d liu no, mi bin u cn c mt ci tn v thuc mt kiu d liu c th. Khi ta ni mt i tng thuc lp X, iu cng c rng i tng thuc kiu d liu X.

  • 58

    Hnh 4.1. Mi bin cn c mt kiu d liu v mt ci tn

    4.1. BIN V CC KIU D LIU C BN

    Trc ht, ta bn v cc kiu d liu c bn. Bin thuc mt kiu d liu c bn c kch thc c nh ty theo l kiu d liu g (xem Bng 4.1 lit k cc kiu d liu c bn ca Java).

    Kiu M t Kch thc

    Khong gi tr

    char k t n (Unicode)

    2 byte tt c cc gi tr Unicode

    t 0 n 65.535

    boolean gi tr

    boolean 1 bit true hoc false

    short s nguyn 2 byte -32.767 n 32.767

    int s nguyn 4 byte -2.147.483.648 ti

    2.147.483.647

    long s nguyn 8 byte -9.223.372.036.854.775.808 ti 9.223.372.036.854.775.808

    float s thc

    du phy ng

    4 +/- 1,4023x10-45 ti 3,4028x1038

    double s thc

    du phy ng

    8 +/- 4,9406x10-324 ti

    1,7977x10308

    Bng 4.1: Cc kiu d liu c bn ca Java.

    Ti mi thi im, bin lu tr mt gi tr. Khi gn mt gi tr khc cho bin , gi tr mi s thay th cho gi tr c (b ghi ). Ta c th dng php gn ghi gi tr mi cho mt bin theo nhiu cch, trong c:

    dng mt gi tr trc tip sau du gn. V d: x = 10; isCrazy = true; bloodType = 'A';

    ly gi tr ca bin khc. V d: x = y;

    kt hp hai cch trn trong mt biu thc. V d: x = y + 1;

    Thng thng, ta khng th ghi mt gi tr kch thc ln vo mt bin thuc kiu d liu nh. Trnh bin dch s bo li nu pht hin ra. V d:

  • 59

    int x = 10; byte b = x; // compile error!

    Tuy rng r rng 10 l mt gi tr b lu trong mt bin kiu byte, nhng trnh bin dch khng quan tm n gi tr, n ch bit rng ta ang c ly ni dung ca mt bin kiu int vi kch thc ln hn ghi vo mt bin kiu byte vi kch thc nh hn.

    Nh thy ti cc v d trc, bin thuc cc kiu d liu c bn c gi n bng tn ca n. V d sau lnh khai bo int a; ta c mt bin kiu int c tn l a, mi khi cn thao tc vi bin ny, ta dng tn a ch nh bin , v d a = 5;. Vy c nhng quy tc g lin quan n tn bin?

    nh danh (identifier) l thut ng ch tn (tn bin, tn hm, tn lp...). Java quy nh nh danh l mt chui k t vit lin nhau, (bao gm cc ch ci a..z, A..Z, ch s 0..9, du gch chn _). nh danh khng c bt u bng ch s v khng c trng vi cc t kha (keyword). T kha l t mang ngha c bit ca ngn ng lp trnh, chng hn ta gp cc t kha ca Java nh public, static, void, int, byte... Lu , Java phn bit ch ci hoa v ch ci thng.

    Cch t tn bin tun th theo cch t tn nh danh. Tn bin nn d c, v gi nh n cng dng ca bin hay kiu d liu m bin s lu tr. V d, nu cn dng mt bin lu s lng qu to, ta c th t tn l totalApples. Khng nn s dng cc tn bin ch gm mt k t v khng c ngha nh a hay b. Theo thng l, tn lp bt u bng mt ch vit ha (v d String), tn bin bt u bng ch vit thng (v d totalApples); cc tn cu to t nhiu t n, cc t t th hai tr i c vit hoa "tch" nhau.

    4.2. THAM CHIU I TNG V I TNG

    Bin kiu c bn ch lu cc gi tr c bn. Vy cn cc i tng th sao?

    Thc ra, trong Java khng c khi nim bin i tng, m ch c bin tham chiu i tng. Mt bin tham chiu i tng lu tr cc bit i din cho mt cch truy nhp ti mt i tng. Bin tham chiu khng lu tr chnh i tng . C th ni rng n lu ci g ging nh mt con tr, hay a ch ca i tng trong b nh my tnh. Ta khng bit chnh xc gi tr l ci g. Ch cn bit rng gi tr i din cho mt v ch mt i tng, v rng my o Java bit cch dng tham chiu truy nhp i tng.

    Ni cch khc, v bn cht, cc bin kiu c bn hay cc bin tham chiu u l cc nh cha y cc bit 0 v 1. S phn bit gia hai loi bin ny nm ngha ca cc bit . i vi mt bin kiu c bn, cc bit ca n biu din gi tr thc ca bin. Cn cc bit ca bin tham chiu biu din cch truy nhp ti mt i tng.

    Nh li v d trong Hnh 3.2, vi cc lnh Cow c = new Cow();

  • 60

    c.moo();

    Ta c th coi bin tham chiu c nh l mt ci iu khin t xa ca i tng b c sinh ra t lnh new Cow(). Ta dng ci iu khin km vi ton t du chm (.) yu cu con b rng ln mt hi (bm nt "moo" ca ci iu khin t xa kch hot phng thc moo() ca i tng).

    Tng t nh vy, ta ly v d: String s1 = new String("Hello, ");

    System.out.println(s1.length());

    Ta c s1 l bin tham chiu kiu String. N c chiu ti i tng kiu String c to ra bi biu thc new String("Hello, "). Ti y, i tng kiu String va to khng c tn, s1 khng phi tn ca n m l tham chiu hin ang chiu ti i tng v l cch duy nht tng tc vi n. Ta gi hm length() ca i tng ly di ca n bng cch dng tham chiu s1 trong biu thc s1.length().

    Nhn mnh, mt bin tham chiu i tng khng phi l mt i tng, n ch ng vai tr nh mt con tr ti mt i tng no . Tuy rng, trong ngn ng thng thng, ta hay dng cc cch ni nh "Ta truyn i tng kiu String s1 vo cho phng thc System.out.println()" hay "Ta to mt i tng Cow mi vi tn c ", s1 hay c khng phi tn ca cc i tng , chng ch l cc tham chiu. Thc cht, cc i tng khng c tn, chng cng khng nm trong bin no. Trong Java, cc i tng c to ra u nm trong b nh heap.

    Hnh 4.2 minh ha quan h gia bin s v i tng kiu String5 m n chiu ti. C th, ti v d ang xt, s v i tng n chiu ti nm ti hai loi b nh khc nhau: i tng xu "Hello" nm trong heap, cn bin s nm trong vng b nh stack dnh cho cc bin a phng ca hm main(). S khc bit v v tr ca hai d liu ny dn n di cuc i ca chng. Mt bin tham chiu l bin a phng ca mt hm s kt thc s tn ti ca mnh sau khi hm kt thc. Cn i tng c to ra t bn trong hm vn tip tc tn ti cho n khi no c my o Java gii phng sau khi i tng khng cn c dng n na.

    5 T nay, "i tng kiu X", vi X l mt lp, s c vit ngn gn thnh "i tng X".

  • 61

    Hnh 4.2. Bin tham chiu s v i tng kiu String

    Vi dng lnh String s = new String("Hello"); nh trong Hnh 4.2, c ba bc khai bo, to v gn i tng v tham chiu i tng. Bc 1, String s, khai bo mt bin tham chiu c kiu c nh l String v c t tn l s. Bc 2, new String("Hello"), yu cu my o Java cp pht b nh cho mt i tng String mi, t ti heap, vi d liu khi to l xu "Hello". Bc 3, =, l php gn gn bin tham chiu s vi i tng String va to, t nay c th dng s lm mt ci iu khin t xa i vi i tng .

    Tham chiu null l tham chiu ang nhn gi tr null khng chiu ti mt i tng no ht. Nu chng trnh truy nhp bin thc th hoc gi phng thc t mt tham chiu null, ngha l khng c i tng no truy nhp cc bin thc th hoc gi phng thc ca n, khi thc thi n lnh , chng trnh s sp v gp li NullPointerException (con tr null). Cn cn thn trnh li ny bng cch kim tra tham chiu null trc khi truy nhp i tng qua tham chiu .

    i vi mt i tng, li gi lnh new nh trong bc 2 l giai on m u. Trc khi ta c th lm bt c vic g i vi mt i tng mi, n phi c khi to, ngha l cc bin thc th ca n phi c gn gi tr ban u. Khi ta dng lnh new, Java thc hin t ng cng vic ny bng cch gi mt phng thc c bit c gi l hm khi to (constructor). Phng thc ny khng tr v gi tr no v c tn trng vi tn lp. Mt lp c th c nhiu hn mt hm khi to vi danh sch tham s khc nhau. Trnh bin dch s da vo danh sch i s ti li gi new gi hm khi to tng ng. Chi tit v hm khi to c ni n trong mc 9.2.

    i tng mi c to s tn ti trong b nh chng no ta cn c mt tham chiu no chiu ti n. Khi mt i tng khng cn mt tham chiu no chiu ti, ta khng c cch no s dng i tng na. V d nh trong Hnh 4.3, sau khi ta chiu bin c2 n ch khc, ta mt hon ton 'lin lc' i vi vi i tng Cow th hai. Ni cch khc, n b b ri v do s c b phn dn rc (garbage collector) ca my o Java thu hi ti s dng vng b nh m n chim gi. Chi tit v ni dung ny c ni n trong Ch-ng 9.

  • 62

    :Cow

    c1

    c2 = c1;

    c2

    :CowCow

    Cow

    i tng Cow

    i tng sp b thu hi v gii phng

    :Cow

    c1

    Cow c1 = new Cow();Cow c2 = new Cow();

    c2

    :CowCow

    Cow

    i tng Cow

    i tng Cow

    Hnh 4.3. i tng s b thu hi khi khng cn bin tham chiu no gn vi n.

    4.3. PHP GN

    Cng nh ta c th gn mt gi tr mi cho mt bin kiu c bn, ta cng c th dng php gn chiu mt bin tham chiu ti mt i tng khc khi cn, min l i tng phi thuc cng kiu.

    Th hin ng bn cht ca tham chiu i tng, v hot ng sao chp ni dung ca php gn, php gn xy ra gia hai bin tham chiu khng c tc dng sao chp ni dung ca i tng ny sang i tng khc. Php gn ch sao chp chui bit ca bin tham chiu ny sang bin tham chiu kia. Kt qu l bin tham chiu v tri c tr ti i tng m bin/biu thc tham chiu ti v bn phi ang chiu ti.

    Hnh 4.4 minh ha kt qu ca mt php gn bin tham chiu. Bin String s2 sau khi nhn gi tr ca s th chiu ti cng mt i tng String m s khi ang chiu ti. Php gn i vi cc bin tham chiu khng to ra mt bn sao ca i tng. Vy nu ta mun sao chp ni dung i tng th lm th no? Vn ny s c ni n trong Ch-ng 9.

  • 63

    Hnh 4.4. Php gn i vi bin tham chiu.

    4.4. CC PHP SO SNH

    Cng tng t nh php gn, cc php so snh == v != i vi cc bin tham chiu so snh chui bit nm trong cc bin . Ta bit rng chui bit ca hai tham chiu s ging ht nhau nu chng cng chiu ti mt i tng. Ni cch khc, so snh hai bin tham chiu l kim tra xem chng c tr ti cng mt i tng hay khng. Cc php so snh tham chiu khng h so snh ni dung i tng m tham chiu chiu ti. Trong v d Hnh 4.5, c1 v c3 bng nhau v chng chiu ti cng mt i tng. Cn c1 v c2 khc nhau v chng chiu ti hai i tng nm ti hai ch khc nhau trong b nh, bt k hai i tng c "ging nhau" v ni dung hay khng.

    c3

    Cow

    :Cow

    name = "Daisy"

    c1

    c1 == c3 is truec1 == c2 is false

    c2

    :Cow

    name = "Daisy"

    Cow

    Cow

    i tng Cow

    i tng Cow

    Hnh 4.5. So snh tham chiu.

    Cc php so snh ln hn, nh hn khng c ngha v khng th dng cho cc kiu tham chiu i tng.

    so snh ni dung ca cc i tng, ta c nhng cch khc s c bn n trong nhng chng sau (cc mc 8.5 v 13.5).

  • 64

    4.5. MNG

    V mt hnh tng, mng (array) l mt chui cc bin thuc cng mt loi c nh s th t. V d mt mng int kch thc 5 l mt chui lin tc 5 bin kiu int c nh s th t t 0 ti 4. Mt mng Java thc cht l mt i tng. Mt bin mng l tham chiu ti mt i tng mng.

    V d: int[] nums; nums = new int[5];

    nums[3] = 2;

    Lnh th nht khai bo bin tham chiu nums kiu mng int (int[]). N s l ci iu khiu t xa ca mt i tng mng. Lnh th hai to mt mng int vi di 5 v gn n vi bin nums c khai bo trc . Lnh th ba gn gi tr 2 cho phn t c ch s 3 trong mng.

    Hnh 4.6. Tham chiu v i tng mng int.

    V d trn minh ha mng gm cc phn t kiu c bn. Mi phn t mng kiu int l mt bin kiu int. Vy cn mng Cow hay mng String th sao? Cng y ht nh vy, mng Cow cha cc bin kiu Cow, ngha l cc tham chiu i tng Cow (ci iu khin t xa ch khng phi bn thn i tng Cow).

    cows

    Cow[] cows; cows = new Cow[5];cows[0] = new Cow();cows[1] = new Cow();

    Cow[]

    0 1 2 3 4Cow Cow Cow Cow Cow

    i tng mng Cow (Cow[])

    :Cowi tng Cow

    :Cowi tng Cow

    Hnh 4.7. Tham chiu v i tng mng Cow.

    Tm li, mng c th c khai bo cha cc phn t thuc kiu c bn hoc kiu tham chiu i tng. Ty theo mng c khai bo kiu d liu g th cha cc phn t l bin thuc kiu d liu . Tuy nhin, d cc phn t thuc kiu c bn hay tham chiu i tng th bn thn mi mng l mt i tng, v bin mng l tham chiu ti i tng mng.

  • 65

    Thao tc i vi cc phn t mng kiu Cow c khc g vi vic thao tc mt bin kiu Cow? Ta cng dng ton t (.) nh bnh thng, nhng v phn t mng khng c tn bin, thay vo , ta dng k hiu phn t ca mng. V d, vi lp Cow c nh ngha nh trong Hnh 4.8, ta dng cc tham chiu mng thao tc vi cc phn t mng Cow nh trong Hnh 4.9.

    Hnh 4.8: Cow.java

    public class CowArrayDemo {

    public static void main(String[] args) {

    Cow cow1 = new Cow();

    cow1.moo();

    cow1.name = "Lazy";

    Cow[] myCows = new Cow[3];

    myCows[0] = new Cow();

    myCows[1] = new Cow();

    myCows[2] = cow1;

    myCows[0].name = "Daisy";

    myCows[1].name = "Lady";

    System.out.print("last cow's name is ");

    System.out.println(myCows[2].name);

    int x = 0;

    while (x < myCows.length) {

    myCows[x].moo();

    x = x+1;

    }

    }

    }

    %>java CowArrayDemonull says Moooo...

    last cow's name is Lazy

    Daisy says Moooo...

    Lady says Moooo...

    Lazy says Moooo...

    Mng c mt bin 'length' cho ta bit s phn t ca mng

    Hnh 4.9: CowArrayTest.java

    Ta thng dng vng for duyt cc phn t ca mt mng. V d, on m duyt mng myCows v in ra tn ca tng con b trong c th c vit nh sau:

  • 66

    Ngoi c php thng dng nh trn, vng for duyt mng cn c mt cch vit ngn gn hn, l vng for-each. V d, ta c th vit li vng for trn nh di y:

    Trong , ta khai bo bin chy aCow l bin kiu Cow, bin chy s chy t

    u n cui mng myCows, mi ln li ly gi tr bng gi tr ca phn t hin ti trong mng (trong v d ny, gi tr l mt tham chiu ti mt i tng Cow).

    Vng for-each c th p dng cho mng thuc kiu d liu tham chiu cng nh kiu c bn, ngoi ra cn dng c cho cc cu trc collection ca th vin Java m ta s ni n trong Ch-ng 13.

  • 67

    Bi tp 1. in t thch hp vo ch trng trong mi cu sau:

    a) Bin thc th thuc cc kiu char, byte, short, int, long, float, v double u c gi tr mc nh l _________.

    b) Bin thc th thuc kiu boolean c gi tr mc nh l ________.

    c) Cc kiu d liu trong Java c phn thnh hai loi: cc kiu _________ v cc kiu ____________.

    2. Cc pht biu sau y ng hay sai?

    a) C th gi phng thc t mt bin kiu c bn.

    b) Cc i tng c to ra u tn ti trong b nh heap cho n khi chng trnh kt thc

    c) Lc no mt i tng thuc din dng c cng cn phi c mt tham chiu chiu ti n.

    d) Cc gi tr c dng du chm ng trong m ngun c hiu mc nh l cc gi tr trc tip du chm ng thuc kiu float.

    3. Bin thc th dng lm g?

    4. Tham s ca phng thc main() l mt mng String. Mng ny l danh sch cc tham s dng lnh khi ta chy chng trnh. V d, khi chy lnh java CowArrayDemo foo bar t du nhc ca s lnh. Mng args[] s cha cc xu k t foo v bar. Hy vit mt chng trnh in ra mn hnh tt c cc tham s dng lnh nhn c.

    5. Tm v sa li ca cc chng trnh sau (mi phn l mt file m ngun hon chnh).

  • 68

    a)

    b)

    6. Cho chng trnh sau, lit k cc i tng HeapQuiz c to ra; hi n on

    //do stuff th cc phn t mng hq[0] cho ti hq[4] chiu ti cc i tng no.

  • 69

    7. Dn nh T v Su gip vit nhanh mt on m x l danh b in thoi cho

    in thoi di ng, ngi no c gii php tt hn s c tr cng l mt ti bng ng. Sau khi nghe Dn m t, Su vit ln bng on m sau:

    T nhn qua ri ci "in thoi di ng b nh b t m cu hoang ph qu!".

    Ni on, T vit:

    Vit xong, T h h "Bng ng l ca t ri!". Dn ci "Tit kim b nh hn

    tht, nhng cu phi n k Su thi."

    Ti sao Dn li quyt nh nh vy?

  • 70

    Chng 5. Hnh vi ca i tng

    Trng thi nh hng n hnh vi, hnh vi nh hng n trng thi. Ta bit rng i tng c trng thi v hnh vi, chng c biu din bi cc bin thc th v cc phng thc. Ta cng bit rng mi thc th ca mt lp (mi i tng thuc mt lp) c cc gi tr ring cho cc bin thc th. Chng hn i tng Cow ny c tn (name) l "Lady" v nng (weight) 80 kg, trong khi mt i tng Cow khc tn l "Daisy" v nng 150kg. Hai i tng thc hin phng thc moo() c khc nhau hay khng? C th, v mi i tng c hnh vi th hin ty theo trng thi ca n. Ni cch khc, phng thc gi t i tng no s s dng gi tr ca cc bin thc th ca i tng . Chng ny s xem xt mi quan h tng h ny.

    5.1. PHNG THC V TRNG THI I TNG

    Nh li rng lp l khun mu to ra cc i tng thuc lp . Khi ta vit mt lp, ta m t cch xy dng mt i tng thuc lp . Ta bit rng gi tr ca cng mt bin thc th ca cc i tng khc nhau c th khc nhau. Nhng cn cc phng thc th sao? Chng c hot ng khc nhau hay khng? i loi l c. Mi thc th ca mt lp u c chung cc phng thc, nhng cc phng thc ny c th hot ng khc nhau ty theo gi tr c th ca cc bin thc th.

    V d, lp PhoneBookEntry c hai bin thc th, name v phone. Phng thc display() hin th ni dung ca i tng PhoneBookEntry, c th l gi tr ca name v phone ca i tng . Cc i tng khc nhau c cc gi tr khc nhau cho hai bin , nn ni dung c display() hin th cho cc i tng cng khc nhau.

    tom.display() Name: Tom the Cat Phone: 84208594

    jerry.display() Name: Jerry the Mouse Phone: 98768065

    Xem li v d trong Hnh 3.3, ta s thy cc li gi phng thc display() t tom v jerry hin ra kt qu khc nhau trn mn hnh, tuy rng m ngun ca display() cho tom hay jerry u l mt:

  • 71

    Thc cht, ni dung trn ca display() tng ng cch vit nh sau:

    Trong , this l t kha c ngha l mt tham chiu c bit chiu ti i

    tng ch ca phng thc hin hnh. Chng hn, i vi li gi tom.display(), this c gi tr bng gi tr ca tham chiu tom; i vi li gi jerry.display(), this c gi tr bng jerry. C th ni rng khi gi mt phng thc i vi mt i tng, tham chiu ti i tng c truyn vo phng thc ti mt tham s n: tham chiu this.

    Tham chiu this c th c dng truy cp bin thc th hoc gi phng thc i vi i tng hin hnh. Thng thng, cng dng ny ca this ch c ch khi tn bin thc th b trng vi mt bin a phng hoc tham s ca phng thc. Chng hn, gi s phng thc setName() ca lp PhoneBookEntry ly mt tham s name kiu String trng tn vi bin thc th name ca lp . T trong phng thc setName(), nu dng tn 'name' th trnh bin dch s hiu l ta ang ni n tham s name. gi n bin thc th name, cch duy nht l s dng tham chiu this gi mt cch tng minh. V d nh sau:

    5.2. TRUYN THAM S V GI TR TR V

    Cng nh trong cc ngn ng lp trnh khc, ta c th truyn cc gi tr vo trong phng thc. V d, ta mun ch th cho mt i tng Cow v s ln rng cn thc hin bng cch gi phng thc nh sau:

    c.moo(3);

    Ta gi i s (argument) l nhng g ta truyn vo trong phng thc. i vi Java, i s l mt gi tr, chng hn 3 nh trong li gi trn, hoc "Hello" nh trong System.out.println("Hello"), hoc gi tr ca mt tham chiu ti mt i tng Cow. Khi li gi phng thc c thc thi, gi tr i s c chp vo mt tham s. Tham s (parameter) thc cht ch l mt bin a phng ca phng thc mt bin c mt ci tn v mt kiu d liu, n c th c s dng bn trong thn ca phng thc.

  • 72

    void moo(int numOfMoos) {

    while (numOfMoos > 0) {

    System.out.println("Moo...");

    numOfMoos = numOfMoos 1;

    }

    }

    Cow c = new Cow();

    c.moo(3);

    tham s

    i s

    (2) gi tr i s 3 c chp vo tham s numOfMoos

    00000011

    (1) Gi phng thc moo t tham chiu Cow v truyn gi tr 3 vo phng thc di dng i s

    (3) tham s numOfMoos c dng nh mt bin a phng trong phng thc

    Hnh 5.1: i s v tham s.

    iu quan trng cn nh: Nu mt phng thc yu cu mt tham s, ta phi truyn cho n mt gi tr no , v gi tr phi thuc ng kiu c khai bo ca tham s.

    Phng thc c th c nhiu tham s. Khi khai bo, ta dng du phy tch gia chng. V khi gi hm, ta phi truyn cc i s thuc ng ki