You are on page 1of 146

MC LC

MC LC........................................................................................................................................1 ti 0. Gii thiu v Java..............................................................................................................6 I. Lch s hnh thnh v pht trin ngn ng lp trnh Java.........................................................6 I.1. Gii thiu v Java...............................................................................................................6 I.2 Tm tt lch s hnh thnh ca Java ...................................................................................6 II. Cc c trng ca Java.............................................................................................................7 II.1. Tnh n gin....................................................................................................................7 II.2. Tnh hng i tng.......................................................................................................7 II.3. Tnh phn tn....................................................................................................................7 II.4. Tnh mnh m...................................................................................................................7 II.5. Tnh an ton......................................................................................................................7 II.6. Tnh trung lp....................................................................................................................8 II.7. Tnh di ng......................................................................................................................8 II.8. Tnh thng dch.................................................................................................................9 II.9. Tnh thc thi cao...............................................................................................................9 II.10. Tnh a lung..................................................................................................................9 II.11. Tnh ng .......................................................................................................................9 III. Cc loi ng dng ca Java....................................................................................................9 IV. Cng c v mi trng lp trnh Java....................................................................................9 V. Ci t Java ...........................................................................................................................10 ti 1. Ngn ng m hnh ha UML..........................................................................................12 I. Xy dng h thng phn mm theo hng i tng.............................................................12 I.1 Cc khi nim cn bn ca cng ngh hng i tng...................................................12 I.2 Quy trnh chung pht trin h thng phn mm................................................................13 I.3 Nhng thch thc ca ngnh cng nghip phn mm hin nay........................................13 II. Lch s pht trin ngn ng m hnh ha UML....................................................................13 II.1. Tm tt lch s UML......................................................................................................13 II.2. Khi nim v UML.........................................................................................................14 II.3 c trng ca UML.........................................................................................................14 III. Ngn ng UML....................................................................................................................15 III.1. Cc thnh phn ca UML..............................................................................................15 III.2. Cc hng nhn (view)..................................................................................................15 III.3 ng dng UML trong quy trnh lm phn mm............................................................22 IV. Quy trnh Rational Unified Process (RUP) pht trin phn mm da trn UML................23 IV.1. Gii thiu v RUP.........................................................................................................23 IV.2. Cc nguyn tc chnh ca RUP:....................................................................................23 IV.3. Vng i ca phn mm theo quy trnh RUP...............................................................23 IV.4. Cc cng c ca RUP....................................................................................................25 Bi tp.........................................................................................................................................25 ti 2. Nhp mn Java.................................................................................................................26 I. Vit v thc hin mt chng trnh Java ...............................................................................26 I.1 Tm hiu m ngun mt chng trnh n gin................................................................26 I.2. Thc hin chng trnh Java............................................................................................26 I.3. Mt s ch khi lp trnh Java........................................................................................27

I.4. Cu trc mt chng trnh Java.......................................................................................27 II. Cc kiu d liu trong Java....................................................................................................28 II.1 Cc kiu d liu s nguyn..............................................................................................28 II.2 Cc kiu s thc...............................................................................................................29 II.3 Kiu k t (character)......................................................................................................29 II.4 Kiu logic (boolean)........................................................................................................29 II.5 Kiu chui........................................................................................................................29 II.6 Chuyn i gia cc kiu s............................................................................................29 III. Khai bo bin v hng trong Java.........................................................................................30 III.1 Quy tc t tn bin........................................................................................................30 III.2 Khai bo bin..................................................................................................................30 III.3 Bin kiu mng...............................................................................................................31 III.4 Hng s (literal)..............................................................................................................32 III.5 Phm vi hot ng ca hng v bin:.............................................................................33 IV. Cc ton t v biu thc.......................................................................................................33 IV.1 Cc ton t v th t u tin..........................................................................................33 IV.2 Biu thc........................................................................................................................34 V. Cc lnh iu khin r nhnh.................................................................................................34 V.1 Lnh if..............................................................................................................................34 V.2. Lnh switch case.........................................................................................................35 VI. Cc lnh lp..........................................................................................................................36 VI.1. Vng lp for...................................................................................................................36 VI.2. Vng lp while..............................................................................................................37 VI.3. Vng lp do... while......................................................................................................38 VI.4. Php nhy......................................................................................................................38 VII. Vo d liu t bn phm v xut d liu ra mn hnh.........................................................39 VII.1. Ly gi tr nhp vo t bn phm.................................................................................39 VII.2 Kt xut d liu ra mn hnh........................................................................................40 Bi tp.........................................................................................................................................41 ti 3. Lp trnh hng i tng trong Java.............................................................................43 I. Khi nim lp trnh hng i tng (Object-Oriented Programming - OOP)......................43 I.1. Khi nim OOP................................................................................................................43 I.2 C s l lun ca OOP......................................................................................................43 I.3 Tru tng ha..................................................................................................................43 II. Tnh ng gi trong Java.......................................................................................................45 II.1 Khi nim tnh ng gi..................................................................................................45 II.2 Mi quan h gia cc class..............................................................................................45 II.3 Mt s gi khi thit k class.........................................................................................45 IV. S dng cc Class xy dng sn trong th vin...................................................................46 V. Xy dng Class trong Java....................................................................................................47 V.1 Cu trc ca class............................................................................................................47 V.2 Cc thuc tnh thnh phn:..............................................................................................48 V.3 Cc phng thc thnh phn...........................................................................................49 V.4 Gi v truyn tham s cho phng thc..........................................................................50 V.6 Cc hm v phng thc c bit....................................................................................50 V.7 Khai bo chng cc phng thc....................................................................................51 V.8 Lp lng nhau lp ni...................................................................................................52 2

VI. Tnh k tha trong Java........................................................................................................53 VI.1 S k tha cc thuc tnh v phng thc.....................................................................53 VI.2 S k tha i vi cc constructor.................................................................................56 VII. Tnh a hnh trong Java.......................................................................................................57 VII.1 S p kiu v gn tham chiu i tng.......................................................................57 VII.2 S rng buc ng Dynamic Binding ........................................................................57 VIII. Lp Object.........................................................................................................................58 IX. Giao din..............................................................................................................................59 IX.1 Cu trc ca giao din....................................................................................................59 IX.2 Cc tnh cht ca giao din.............................................................................................61 X. Package..................................................................................................................................61 X.1 S dng cc package trong th vin Java........................................................................61 X.2 t lp vo package........................................................................................................62 Bi tp.........................................................................................................................................62 ti 4. Lp v phng thc tru tng.......................................................................................63 I. Khi nim lp tru tng........................................................................................................63 II. Ci t lp v phng thc tru tng trong Java................................................................63 Bi tp.........................................................................................................................................64 ti 5. Lu tr v x l i tng...............................................................................................65 I. Lp Vector v giao din Enumeration....................................................................................65 I.1 Lp Vector........................................................................................................................65 I.2 Giao din Enumeration......................................................................................................66 II. Mng trong Java v lp ArrayList.........................................................................................68 II.1 Mng trong Java...............................................................................................................68 II.2. Cc thut ton c bn trn mng.....................................................................................69 II.3 Class Arrays.....................................................................................................................70 III Danh sch trong java v giao din Lists ...............................................................................72 Bi tp.........................................................................................................................................73 ti 6. Cc lung vo ra d liu vi file.....................................................................................74 I. Khi nim lung vo ra (I/O stream)......................................................................................74 II. Lp InputStream:...................................................................................................................75 III. Lp OutputStream................................................................................................................76 IV. Lp FileInputStream............................................................................................................76 V. Lp FileOutputStream...........................................................................................................76 VI. Lp File................................................................................................................................76 VII. Nhp xut lc .....................................................................................................................78 VII.1 Lp FilterInputStream: .................................................................................................78 VII.2 Lp FilterOutputStream................................................................................................78 VIII. Vo/ra c s dng b m ................................................................................................78 VIII.1 Lp BufferedInputStream:...........................................................................................78 VIII.2 Lp BufferedOutputStream.........................................................................................78 IX. Lp RandomAccessFile ......................................................................................................80 X. i tng System.in..............................................................................................................81 XI. Truy cp file ch tun t...............................................................................................81 XII. Truy cp file nh phn.........................................................................................................85 Bi tp ........................................................................................................................................86 ti 7. X l ngoi l..................................................................................................................87 3

I. Cc tnh hung s dng ngoi l.............................................................................................87 II. C s qun l ngoi l trong Java..........................................................................................87 III. Cu trc cy k tha cc x l ngoi l................................................................................88 IV. S dng ngoi l c kim sot.........................................................................................89 V. Xy dng mt ngoi l...........................................................................................................90 VI. Bi tp...................................................................................................................................91 ti 8. X l cc s kin trong Java............................................................................................92 I. Khi nim v c s x l s kin............................................................................................92 II. Truy cp thng tin s kin.....................................................................................................97 III. X l cc s kin trn window.............................................................................................98 IV. Cc lp thch nghi................................................................................................................98 V. X l cc s kin chut.......................................................................................................101 Bi tp.......................................................................................................................................102 ti 9. Applet.............................................................................................................................103 I. Xy dng mt Applet n gin.............................................................................................103 II. Cu trc c bn v vng i ca mt Applet.......................................................................103 III. An ninh v kh nng ca Applet........................................................................................105 IV. ng dng Applet vi ca s Popup...................................................................................105 V. Cc th HTML ca Applet..................................................................................................106 VI. Cc phng thc, lp trnh ha v bt s kin ca applet.............................................107 ti 10. Lp trnh giao din ha GUI...................................................................................109 I. Gii thiu AWT ....................................................................................................................109 II. Vt cha (Container)............................................................................................................110 II.1 JFrame............................................................................................................................110 II.2 JPanel.............................................................................................................................110 II.3 JDialog...........................................................................................................................112 II.4 JScrollPane.....................................................................................................................113 III. Gii thiu v cc thnh phn GUI c bn..........................................................................113 III.1 Nt nhn ......................................................................................................................113 III.2 Nhn (Label).................................................................................................................113 III.3 Nt nh du (checkbox)..............................................................................................115 III.4 Nt chn (radio button)................................................................................................117 III.5 Hp thoi Combo .........................................................................................................117 III.6 Danh sch (Lists)..........................................................................................................118 III.7 vn bn (text field) v vng vn bn (text areas)......................................................120 III.8 Thanh trt (Scrollbar).................................................................................................123 IV. Thnh phn Menu...............................................................................................................124 V. B qun l cch trnh by (Layout Manager)......................................................................127 V.1 Cch trnh by FlowLayout:..........................................................................................128 V.2 Cch trnh by GridLayout:...........................................................................................128 V.3 Cch trnh by BorderLayout........................................................................................128 VI. Cc hp thoi......................................................................................................................128 VI.1 Hp thoi thng bo.....................................................................................................128 VI.2 Hp thoi chn File......................................................................................................129 VI.3 Hp thoi chn mu.....................................................................................................130 Bi tp.......................................................................................................................................130 ti 11. Threading.....................................................................................................................132 4

I. Khi nim thread...................................................................................................................132 I.1 Khi nim........................................................................................................................132 I.2. Lp Thread.....................................................................................................................132 I.3 Cc bc to mt thread.............................................................................................132 II. Cc trng thi ca thread......................................................................................................133 III. Cc thuc tnh ca thread...................................................................................................134 III.1 u tin ca thread....................................................................................................134 III.2 Nhm thread.................................................................................................................135 III.3 Qun l cc ngoi l ca thread....................................................................................135 IV. iu khin cc thread.........................................................................................................136 IV.1 Interrupt mt thread......................................................................................................136 IV.2 Dng mt thread...........................................................................................................137 IV.3 Tm dng v phc hi mt thread................................................................................138 IV.4 Gii phng thi gian cho CPU.....................................................................................138 IV.5 i mt thread kt thc cng vic...............................................................................138 V. ng b thread....................................................................................................................139 V.1 Tnh trng ua tranh...................................................................................................139 V.2 Kha i tng..............................................................................................................140 V.3 i tng iu kin.......................................................................................................141 Bi tp.......................................................................................................................................143 Ph lc A. Cc t kha ca Java..................................................................................................144 Ph lc B Mt s hm hay s dng..............................................................................................145 Ti liu tham kho........................................................................................................................146

ti 0. Gii thiu v Java


I. Lch s hnh thnh v pht trin ngn ng lp trnh Java
I.1. Gii thiu v Java Java l mt ngn ng lp trnh mnh ang c s dng rt rng ri hin nay trn ton th gii. Trn thc t, Java c bit n khng ch l mt ngn ng lp trnh m l mt platform mt mi trng v cng ngh pht trin ring bit. Khi lm vic vi Java, ngi lp trnh c s hu mt th vin ln, c tnh m vi mt lng m ngun ti s dng khng l lun c trn internet. Ngoi ra, cc chng trnh vit bng Java c mi trng thc thi ring vi cc tnh nng bo mt, kh nng trin khai trn nhiu h iu hnh khc nhau v nhiu tnh nng u vit khc chng ta s xem xt trong phn sau. I.2 Tm tt lch s hnh thnh ca Java Nm 1991, mt nhm k s ca hng SUN bao gm Patrick Naughton, Sun Fellow v James Gosling c tng pht minh ra mt ngn ng lp trnh nh gn c th thc thi c trn cc thit b dng nh b chuyn knh ca truyn hnh cp v cc thit b kiu ny c b nh nh. Bn cnh , do cc hng khc nhau s dng cc chp x l (CPUs) khc nhau nn mt c tnh quan trng m ngn ng ny phi c l c lp vi cc dng CPUs khc nhau gi l c tnh di ng. Nhm m mt d n c tn l Green hin thc ha tng ny. gii quyt vn di ng, nhm s dng tng ca k s Niklaus Wirth ngi sng lp ngn ng Pascal v vic s dng c ch thng dch v my o (virtual machine). V nn tng ngn ng, do hng SUN pht trin trn nn UNIX nn h s dng ngn ng lp trnh C++ l ch yu. Do , ngn ng mi thin v hng i tng (Object Oriented) ca C++ hn l hng th tc nh Pascal. Ban u nhm t tn cho ngn ng mi l Oak nhng sau c chuyn thnh Java do Oak cng l tn mt ngn ng lp trnh khc. Nm 1992, d n Green cho ra i sn phm u tin c tn l *7 nhng khng c cho n nh mong i. Sau nhm phi mt c nm 1993 v na u 1994 i tip th cng ngh ca mnh. T nm 1994, s pht trin ca Internet to c hi Java pht trin nhanh chng. Nhm pht trin mt trnh duyt c tn l HotJava cho php cc chng trnh Java nhng c trong (applet). y chnh l minh chng r rng v sc mnh ca Java nhanh chng c cng ng ngi s dng internet bit n v l tin Java pht trin rc r nh ngy hm nay. Phin bn u tin 1.0 ca Java ra i vo nm 1996, sau l phin bn 1.1 mc d kh mnh nhng cng cn nhiu hn ch. Nm 1998 nh u bc chuyn mnh mnh m ca Java vi s ra i ca phin bn 1.2 lm cho Java tin gn ti mc tiu vit mt ln, chy khp ni (Write once, Run Anywhere). Cc nhn vin tip th ca Java gi y l phin bn Java 2 Standard Edition Software Development Kit Version 1.2 ni ti s c mt ng thi ca 2 phin bn Standard Edition l Micro Edition v Enterprise Edition trong Java. Cc phin bn 1.3, 1.4 l s pht trin m rng tip theo ca phin bn 1.2. Phin bn 1.5 (chuyn sang gi l phin bn 5.0) nh du s tch hp y nht cc cng ngh Java. Bng sau cho thy s pht trin th vin Java qua cc phin bn:

Phin bn S cc Class v Interface 1.0 1.1 1.2 1.3 1.4 5.0 211 477 1524 1840 2723 3270

Hin ti, Java pht trin ti phin bn 1.6 v lin tc c cp nht. Ngi s dng c th download phin bn mi nht ca Java ti a ch: http://www.sun.com/download/index.jsp?cat=Java %20%26%20Technologies&tab=3&subcat=Java.

II. Cc c trng ca Java


Java c bit n vi cc c trng sau: II.1. Tnh n gin Java c pht trin da trn C++ nhng lc bt i hoc thay th cc khi nim kh hiu nh header file, con tr, structures, union, operator overloading, virtual base class. Trong Java ch c tha k n m khng c tnh a tha k nh ca C++. Tuy nhin tnh a tha k c biu hin thng qua vic s dng cc Interface. II.2. Tnh hng i tng Nh trnh by trn, Java c pht trin t C++ nn n l ngn ng lp trnh hng i tng. II.3. Tnh phn tn Java cho php lp trnh truy cp cc i tng t xa thng qua cc giao thc HTTP, FTP bng cc phng thc nh RMI hay Socket. Java hon ton thch hp cho cc ng dng Internet. Cc cng ngh JSP, Servlet cho php xy dng cc website tng tc vi cc tnh nng thc thi ti u II.4. Tnh mnh m Vic loi b con tr lm tng tin cy ca chng trnh. Lp trnh vin khng cn quan tm n thao tc cp pht v gii phng b nh. Vi Java, b nh c gii phng t ng. II.5. Tnh an ton Ngn ng Java c thit k trnh cc s c: Np chng stack lc runtime. nh hng ti b nh nm ngoi phm vi c cp pht. c v ghi file t do

II.6. Tnh trung lp Cc chng trnh vit bng Java khng b ph thuc vo h iu hnh. iu ny c c l do m ngun chng trnh khng c bin dch thnh m my ngay m thnh m Bytecode. Khi em m Bytecode ny chy trn h my tnh no th mt trnh thng dch virtual machine (Java Vitual Machine-JVM) s thng dch chng sang m my tng ng thc thi. M ngun -> ByteCodes -> machine code. T m ngun -> Bytecodes: Trnh bin dch Java. T Bytecodes -> machine code: Trnh thng dch Virtual machine. IBM
Bytecode

Trnh bin dch

Trnh thng dch Java (Java Interpreter)

Sparc

Macintosh

Java Virtual Machine JVM My o l mt phn mm da trn c s my tnh o. N c tp hp cc lnh logic xc nh cc hot ng ca my tnh. Ngi ta c th xem n nh mt h iu hnh thu nh. JVM thit lp cc lp tru tng cho phn cng bn di, h iu hnh, m bin dch. Trnh bin dch chuyn m ngun thnh tp cc lnh ca my o m khng ph thuc vo phn cng c th. Trnh thng dch trn mi my s chuyn tp lnh ny thnh chng trnh thc thi. My o to ra mt mi trng bn trong thc thi cc lnh bng cch: Np cc file .class Qun l b nh Dn rc, thu hi b nh cp cho cc bin khng cn c s dng. Vic khng nht qun ca phn cng lm cho my o phi s dng ngn xp lu tr cc thng tin sau: Cc Frame cha cc trng thi ca cc phng thc. Cc ton hng ca m bytecode. Cc tham s truyn cho phng thc. Cc bin cc b. II.7. Tnh di ng Khng ging C++ v C, cc kiu d liu nguyn thy ca Java c cp pht mt lng b nh c nh. Chng hn kiu d liu int ca Java lun l 4 byte (32 bit) trong khi kiu int ca C++ c th hiu l 2 byte hoc 4 byte ty theo ng cnh. Thit k ny gip cho trnh bin dch lun c s bytecode nh nhau trn mi h my v sau pht sinh m my theo khun dng c nh. Trong cc phin bn u ca Java, vn giao din ha cho ngi s dng (GUI) cha c x l trit v ph thuc vo h my. Ngy nay, th vin GUI ca Java c vit li

hon ton v c tnh c lp cao gip cho chng trnh Java c giao din ging nhau trn mi h my. II.8. Tnh thng dch Trnh thng dch Java s thng dch m bytecode sang m my ni m n c ci t. Qu trnh ny cng lm cc chng trnh Java chy chm hn. Tuy nhin y li l gii php cho tnh di ng. II.9. Tnh thc thi cao Java s dng cng ngh Just-In-Time (JIT) gip qu trnh thng dch thc hin nhanh hn. Vi cng ngh ny, nhng m bytecode ging nhau s ch cn thng dch mt ln. Ngy nay, cng ngh ny lin tc c ci tin v cho kt qu vt tri so vi cc trnh thng dch truyn thng. V d nh JIT c th qun l cc on m c s dng thng xuyn trong chng trnh, ti u chng nng cao tc c thc hin. II.10. Tnh a lung Vi chng trnh Java, lp trnh vin c th cng lc qun l nhiu tin trnh khc nhau. iu ny gip cho vic ci t cc thut ton song song bng Java trn cc my tnh nhiu CPU c d dng hn, c bit trong cc ng dng thi gian thc. II.11. Tnh ng Cc chng trnh Java c th c nng cp m khng nh hng ti ngi s dng. Cc phng thc mi c th c ci t thm vo cc lp i tng hay cc giao din trong th vin ca chng trnh ang chy.

III. Cc loi ng dng ca Java


ng dng console: Khng c giao din GUI. ng dng ho: C giao din GUI. Applet: Nhng trong cc trang Web. Servlet: Cc class thc thi pha web server. JSP: Cc file nhng m Java v HTML. ng dng EJB, RMI, JMS: Xy dng ng dng bi nhiu thnh phn ghp li, giao tip t xa.

IV. Cng c v mi trng lp trnh Java


Hin nay c rt nhiu mi trng pht trin Java (Integrated Development Environment IDE). Mi mi trng cung cp cho lp trnh vin nhng tin ch lp trnh mc khc nhau. Mt s IDE thng dng l: Netbeans (min ph ti http://www.netbeans.org). Jcreator (thng mi). Jbuilder (thng mi). Eclipse (min ph http://www.eclipse.org/).

V. Ci t Java
Java phin bn Java mi nht c th download ti a ch http://java.sun.com/j2se. Sau ci t nh ng dng bnh thng. Th mc ci t mc nh ca Java trn Windows l C:\Program Files\Java\jdk1.6.0_02 (nu phin bn ci l jdk1.6.0_02). Trong c cha cc th mc vi ngha sau: bin Cha cc cng c v trnh bin dch Java demo Cha cc chng trnh Java Demo docs Cha cc ti liu m t th vin ca Java includes Cha cc file dng bin dch cc on m ngun vit bng ngn ng khc (native). jre Cha cc file lu thng tin mi trng lc thc thi lib Cha cc file th vin src Cha m ngun java Trong th mc \bin c cha cc cng c chnh ca Java: Trnh bin dch, 'javac' C php:javac [options] sourcecodename.java Trnh thng dch, 'java' C php:java [options] classname Trnh dch ngc, 'javap' javap dch ngc bytecode v in ra thng tin v cc thuc tnh (cc trng), cc phng thc ca mt lp. C php:javap [options] classname Cng c sinh ti liu, 'javadoc' Tin ch ny cho php ta to ra tp HTML da trn cc li gii thch trong m chng trnh (phn nm trong cp du /*.... */). C php:javadoc [options] sourcecodename.java Chng trnh tm li - Debug, 'jdb C php:jdb [options] sourcecodename.java hay jdb -host -password [options] sourcecodename.java Ci t ng dn mc nh. 1. M Control Panel 2. Chn System

10

3. Chn Tab Advanced 4. Chn Environment Variables

5. Thm ng dn C:\Program Files\Java\jdk1.6.0_02\bin vo bin mi trng Path - Chn Variable Path - Chn Edit v copy thm ng dn C:\Program Files\Java\jdk1.6.0_02\bin, chn OK kt thc.

11

ti 1. Ngn ng m hnh ha UML


I. Xy dng h thng phn mm theo hng i tng
I.1 Cc khi nim cn bn ca cng ngh hng i tng Hng i tng l mt cng ngh sn sinh ra cc m hnh phn nh mt cch t nhin cc nghip v thc t. Xt cho cng th mi quy trnh nghip v trong thc t u l s tng tc ca cc i tng theo mt trnh t nhm t c mt mc ch c th. Ni cch khc, cc i tng v mi quan h gia chng phn nh quy trnh nghip v. V d nh nghip v tuyn nhn s cho mt cng ty c th c tm tt qua mt chui cc tng tc nh sau: 1. Cng ty a ra thng bo tuyn nhn s ti cc ng vin c nhu cu. 2. ng vin gi h s d tuyn ti cng ty. 3. Cng ty duyt h s v gi giy hn phng vn ti ng vin. 4. Cng ty phng vn ng vin. 5. Cng ty k hp ng vi ng vin hoc t chi. Trong v d trn c s tham gia ca hai i tng cng ty v ng vin. S trao i thng tin gia hai i tng ny cho thy mi quan h ph thuc gia chng (dependence). Mt v d khc l trong h thng qun l nhn s chng ta c cc i tng nh: nhn vin, qun l,cho thy mi quan h dng khc: cc nhn vin lm cng vic qun l tt nhin cng l nhn vin ca cng ty nhng c thm cc thuc tnh ring bit mt quan h k tha (inheritance). Trong mt h thng bn hng, mi n hng bao gm trong n cc thng tin v khch hng, ngy gi, v mt danh mc cc mt hng. Khi ny ta ni rng gia n hng v mt hng tn ti mt quan h bao gm (aggregation) Mc tiu ca cng ngh hng i tng chnh l th hin c cc i tng v mi quan h gia chng vo trong cc h thng phn mm. V vy, cc h thng phn mm theo cng ngh hng i tng phn nh mt cch t nhin v trung thc nghip v thc t v c kh nng p ng cc thay i d dng. Pht trin mt h thng phn mm theo hng i tng da trn 5 khi nim c bn: Lp (class), i tng (object), thng ip (mesage), tha k (inheritance) v a hnh (polymorphism). Lp l s tru tng ha cc i tng thc t theo phm vi nghip v. Ly v d v h thng qun l sinh vin ca trng HBK H Ni cn qun l rt nhiu i tng sinh vin khc nhau nhng c th ch c tru tng ha thnh mt lp i tng c tn SinhVien chng hn. S tru tng ha mt lp i tng cho ta kt qu mt tp cc thuc tnh (attributes) v cc hnh vi (operations) c trng cho bt k i tng no thuc lp . i tng thc t th c v s thuc tnh v hnh vi nhng ch thuc tnh v hnh vi trong phm vi nghip v l c xt n. S chi tit ph thuc vo phm vi nghip v. S tru tng ha din ra nhiu cp . Ly v d: lp ng vt c v bao gm lp ng vt 4 chn, lp 4 chn li bao gm cc lp nh lp mo, lp tru, Mi i tng l mt biu hin thc t ca mt lp. object = name + attributes + operations H thng hng i tng nu c m hnh ng s rt linh hot, d hiu chnh, c ci t d dng bng cc ngn ng hng i tng. Cc h thng phn mm hng i tng cng c ci t bi cc ngn ng lp trnh hng i tng.

12

Hng i tng khng ch l mt l thuyt m c chng minh bng nhng ng dng rt thnh cng trong thc t nhiu lnh vc khc nhau. Tuy nhin, lnh vc ny vn cn c chun ha hn na. I.2 Quy trnh chung pht trin h thng phn mm Xy dng mt h thng phn mm hng i tng cng tun theo quy trnh chung nh mi cng ngh khc: 1. Requirements : Thu thp yu cu. 2. Analysis : Phn tch. 3. Design: Thit k. 4. Implementation: Ci t. 5. Test: Kim th. 6. Deployment: Trin khai. Theo nguyn tc chung ny, mi cng ty li ng dng nhng cng ngh khc nhau pht trin ng dng nh cc m hnh water fall, m hnh hng chc nng hay m hnh hng i tng v.v I.3 Nhng thch thc ca ngnh cng nghip phn mm hin nay Mc d ng dng cc cng ngh tin tin v quy trnh pht trin chun ha nhng ngnh cng nghip phn mm vn phi i mt vi nhng thch thc nh: 1. S gia tng v quy m t nh n ln ca ng dng. 2. Sc p v thi gian hon thnh. 3. S phn tn v khng gian lm vic. 4. a dng v ni dung. 5. S thay i cc yu cu ca ngi s dng. Nhng thch thc ny c th ni l gn lin vi mi cng ty phn mm c bit l Vit Nam, ni m vai tr ca qu trnh kho st, phn tch cn b xem nh cng nh cc cng ty cn ang b ng vi s m rng v quy m v thiu nhn lc chuyn mn v phn tch thit k.

II. Lch s pht trin ngn ng m hnh ha UML


II.1. Tm tt lch s UML Nhng nm 1980 l thi k bng n s lng cc cng ty phn mm s dng ngn ng lp trnh hng i tng(Object Oriented Programming - OOP) xy dng cc ng dng. iu ny dn ti mt i hi phi c mt quy trnh lm phn mm tip cn theo hng phn tch v thit k hng i tng (Object Oriented Analyze and Design - OOAD). Nhiu nh nghin cu phng php trong c Booch, Rumbaugh v Jacobson lm vic c lp v xut cc quy trnh tha mn yu cu ny. Mi mt quy trnh c mt tp k hiu m hnh ring truyn t v din t cc kt qu phn tch v thit k. Vo u nhng nm 1990, cc cng ty khc nhau, thm ch l cc b phn khc nhau ca cng mt cng ty s dng cc quy trnh khc nhau. Thm vo , cc cng ty ny li mun s dng cc cng c phn mm h tr cc quy trnh ca h. Vi qu nhiu quy trnh khc nhau, cc cng ty phn mm rt kh khn trong vic cung cp cc cng c ny. iu ny cho thy vic cn thit phi c mt quy trnh vi tp k hiu thng nht. Nm 1994, James Rumbaugh hp tc cng Grady Booch ti cng ty phn mm Rational Software Corporation cng xy dng mt quy trnh thng nht da trn kt qu ca

13

tng ngi. Sau Ivar Jacobson cng sm gia nhp nhm ny. Nm 1996, nhm cho xut bn phin bn u tin ca UML ti cng ng pht trin phn mm v yu cu phn hi. Cng cng thi gian , mt t chc c tn Object Management Group (OMG) mi nhm trnh mt ngn ng m hnh. OMG l mt t chc phi li nhun chuyn xc tin vic s dng cng ngh hng i tng trong ngnh cng nghip phn mm thng qua vic a ra cc hng dn v c t OOP. Cc thnh vin ca OMG ban u l 3Com Corporation; American Airlines; Canon, Inc.; Data General; Hewlett-Packard; Philips Telecommunications N.V.; Sun Microsystems; v Unisys Corporation. Cc tp on ln nh HP, IBM, Microsoft, Oracle v Rational Software nhn thy li ch ca UML v nhn li ti tr cho cc d n v UML ca OMG. Nm 1997, OMG tip tc xem xt li UML v n nm 2001 th phin bn UML 1.4 ra i. Hin nay OMG pht hnh ti phin bn UML 2.0 v ang nghin cu phin bn 2.1. II.2. Khi nim v UML UML Unified Modeling Language l mt ngn ng dng cc s v m hnh thng nht m hnh cc h thng phn mm. Mc ch ca UML l: Tr thnh ngn ng m hnh m tt c mi ngi lm m hnh c th s dng. Tp trung hng ti gii quyt cc vn tn ti trong pht trin phn mm. n gin nht c th trong khi vn m hnh c phn ln cc ng dng. Nng cao tnh ti s dng cc thnh phn ca mt h thng phn mm. UML l mt ngn ng din t, UML khng phi l mt quy trnh. Thut ng Unified y c mt ngha quan trng, n ni ln cc nguyn tc ca UML: Thng nht phng thc, k hiu, thut ng. Gn kt gia cc chu trnh pht trin. Khng ph thuc vo lnh vc ng dng. Khng ph thuc vo ngn ng lp trnh v mi trng thc hin. Khng ph thuc vo quy trnh pht trin. Gn kt cht ch cc khi nim ni ti ca h thng. II.3 c trng ca UML Hin nay, UML l mt ngn ng c OMG chun ha v c c t r rng. Tt c cc m hnh, s ca UML u theo hng i tng. Cc c tnh ca UML bao gm: M hnh class (class diagrams) m t cu trc tnh ca h thng v mi quan h gia cc i tng. M hnh tng tc (interaction diagrams), m hnh trng thi (state diagrams), m hnh hot ng (activity diagrams) m t cc hnh vi ng ca cc i tng trong h thng cng nh cc thng ip gia chng. M hnh Use-case v m hnh hot ng m t cc yu cu v cc lung cng vic trong h thng. Cc m hnh cu trc hn hp (composite structure diagrams) m t s hp tc cng nh cc c im v ci t. M hnh trin khai (deployment diagrams) m t vic trin khai phn mm trn mt mi trng xc nh.

14

III. Ngn ng UML


III.1. Cc thnh phn ca UML Xt trn kha cnh ngn ng din t, UML c y cc m hnh v s th hin hu ht cc kha cnh ca h thng phn mm. Cc thnh phn ca ngn ng UML bao gm: Cc Views (cc hng nhn): Cc view th hin cc cch nhn khc nhau ti h thng. Mt h thng khng th ch c m t bi mt s . Nhiu hng nhn khc nhau cho ta nhiu s m t y v h thng. Cc hng nhn cng lin kt ngn ng m hnh vi cc quy trnh c chn cho vic pht trin h thng.

Cc Diagrams (cc s ): Cc s bao gm cc phn t hnh v dng m t ni dung ca cc View. UML 2.0 bao gm 13 loi s khc nhau. Cc Model Elements (cc phn t m hnh): Cc khi nim c s dng trong cc s v cc phn t ca s din t cc khi nim ph bin ca cng ngh hng i tng nh class, object, message (thng ip) v mi quan h gia chng bao gm quan h dependence, inheritance v aggregation. Mt phn t m hnh c th c s dng trong nhiu s nhng chng lun c cng ngha v k hiu ging nhau. Cc General Mechanisms (cc c t chung m rng): M t cc thng tin ch thch, ng ngha ca cc phn t m hnh, thut ng.

III.2. Cc hng nhn (view) Use-case view: y l hng nhn v mt chc nng ca h thng c thc hin bi cc tc nhn bn ngoi.

15

ud Primary Use Cases

                         

                         

                                                     

                Hthng bn hng qua mng Interrnet                                                Chn hng                                      

                      sn phm                                Khchhng                        
Gi thng

Xem chi ti t

   hng                       

Cp nht gi

                    tin phn hi                                                                                   
hng

                      ng k       Lp n mua                                   danh mc              Qun trh                         


thng hng ha Tr li Qun l khch hng

                                                                                                                                                                                                                             

                   khchhng                    thng tin                                     


Theo Nh vin                   di    n   kinh  n hng   doanh m t hng Cp nht

                         

                                                Cc nguyn tc cho vic xy dng use-case view l:     Cc use-case    hnh thnh trn c s nhn t bn ngoi vo trong h thng         c                       (out-> in).     Cc use-case phi y , chngc tng    theo phng php i t ti a n                     hp              ti thiu (ban u m rng ti a cc use-case c th sau thu hp li theo nhu     cu khch hng).                                           Cc use-case cn c tnh c lp tng i d t chc nhm lm vic v c tnh     ti   dng cao.                                      s      Bn cnh s , ngi lm m hnh c th s dng m t bng vn bn chi tit cho mi   detail).      cn           use-case (text     Mi m t   m bo cc thng tin sau:                    1. Tn use-case.       2.  Mc tiu ca use-case.                                        3. Phm vi ca use-case.                                                 4. Cc tc nhn chnh. 5. Tin iu kin.                                                 6. Dng chnh. 7. Dng ph.                                                                      16                               

                                                   

8. Ngoi l. 9. Hu iu kin. Sau y l mt v d v use-case text detail: Use-case: i tin bi thng. Phm vi: Cng ty Bo him PCM. Actor chnh: Ngi i bi thng. Dng chnh 1. Ngi i bi thng gi n yu cu vi cc d liu bng chng v tai nn. 2. Cng ty bo him xc nhn ngi vit n c quyn li bo him hp l. 3. Cng ty bo him phn cng cho mt i l xc minh trng hp ny. 4. i l i chiu tt c cc chi tit trong n theo chnh sch bo him ca cng ty 5. Cng ty bo him tr tin bo him. Dng ph 1a. Bng chng tai nn khng y . 1a1. Cng ty bo him yu cu d liu thiu. 1a2. Ngi i bi thng gi li cc d liu thiu. 2a. Ngi i bi thng khng c chnh sch bo him hp l. 2a1. Cng ty bo him t chi yu cu, nhc nh, ghi li v kt thc x l v vic. 3a. Khng c i l no rnh ri. 3a1. (Cng ty bo him s lm g trong trng hp ny???-cn trao i k hn) 4a. V tai nn vi phm chnh sch bo him c bn. 4a1. Cng ty bo him t chi yu cu, nhc nh, ghi li v kt thc x l v vic. 4b. V tai nn ch vi phm chnh sch bo him nh. 4b1. Cng ty bo him iu nh vi ngi i bo him v ng tr bo him. Trong trng hp cc use-case qu phc tp v cha c m t r rng, chng c th c tch ra thnh cc use-case nh hn theo hai dng: Include: use-case mi c tch ra v c bao gm trong use-case chnh mt cch v iu kin.
uc Use Case Model

Use Case Include Use Case Principal include

Extend: use-case mi xy ra khi mt iu kin xy ra trong use-case chnh.


uc Use Case Model

Use Case Principal extend Use Case Extend

17

Ni chung, use-case view gip ta tr li cu hi WHAT? v h thng. Logical views y l hng nhn cho bit cc chc nng c thit k vo trong h thng nh th no (HOW?) thng qua vic m t cc cu trc tnh v cc hnh vi ng ca h thng. Sau y l mt s s quan trng thng c s dng. Cc cu trc tnh (static structure): Cu trc tnh c m hnh bng UML chnh l cc class diagrams. y l s m hnh cc khi nim trong ng dng, cc c im ni ti cng nh mi quan h gia chng. Cc cu trc ny c gi l tnh v chng khng ph thuc vo thi gian.

Cc khi nim

M hnh ha Classes Attributes Operations

Object
V d v m hnh class:
cd Java Model

                                                                 
Order

                                                   
quantity: int LineItem

                         
StockItem

             

- date: Date                -  deliveryInstructions: String             - orderNumber: String  enumeration       +  checkForOutstandingOrders() : void                      OrderStatus property get enum             +  getDate() :Date                 -status - closed: int + getDeliveryInstructions() : String - delivered: int +  getLineItem(): LineItem                             - dispatched: int + getOrderNumber() : String - new: int + getStatus() : OrderStatus                   -  packed: int        property set    + setDate(Date) : void                +  setDeliveryInstructions(String) : void              + setLineItem(LineItem) : void                +  setOrderNumber(String) : void               + setStatus(OrderStatus) : void Account

  -   Author: string                    
  -item -    -  catalogNumber: string  costPrice:                      number listPrice: number  title:                      string

             

        property get            
+ getItem() : StockItem

             

        +  getQuantity(): int         

property set         +  setItem(StockItem): void           + setQuantity(int) : void

             

         

                                                                               

property get +  getAuthor(): string                + getCatalogNumber() : string +  getCostPrice() : number                  + getListPrice() : number + getTitle() : string                    property set + setAuthor(string) : void +  setCatalogNumber(string) :                 void + setCostPrice(number) : void +  setListPrice(number)  void              :   + setTitle(string) : void

                        

             

             

             

             

             

                -account                                         deliveryAddress:                      String - emailAddress: String     name: String                      -bask et

                         
-

                         
Transaction                           date: Date orderNumber: String                         

             

billingAddress: String closed: boolean

                         
shoppingBasketNumber: String -

ShoppingBasket

             

         +  addLineItem() :void                -

             

                   

+ createNewAccount() : void   loadAccountDetails() :void                 + + markAccountClosed() : void   retrieveAccountDetails(): void                + + submitNewAccountDetails() : void +   validateUser(String,String)                 property get + getBasket() : ShoppingBasket                     + getBillingAddress() : String + getClosed() : boolean   getDeliveryAddress() : String                  + + getEmailAddress() : String +   getName() :String                 + getOrder() : Order property set                    + setBasket(ShoppingBasket) : void + setBillingAddress(String) : void   setClosed(boolean): void                + + setDeliveryAddress(String) : void +   setEmailAddress(String) :void                 + setName(String) : void +   setOrder(Order): void               

           
-account

                           

+ createNewBasket() : void + loadAccountHistory() : void +  deleteItem() :void                                + loadOpenOrders(): void     + processOrder() : void property get property get                              Account + getAccount() :          + getLineItem() : LineItem + getDate() : Date property set  setLineItem(LineItem) :               + getLineItem() :LineItem                void        + + getOrderNumber() : String property set                                       + setAccount(Account) : void -history + setDate(Date) : void                           + setLineItem(LineItem) :void            + setOrderNumber(String) : void

                                                                     

             

             

             

             

             

                                                                                                                                                                                                                                                                                             

                                                                                                                                                                                                                                                                                             

             

             

             

             

             

             

                                                                                                                                 

             

             

18

             

             

             

Cc hnh vi ng: State machine: S sau m t s chuyn i trng thi ca mt my tnh PC:

S sau m t s chuyn i trng thi ca mt thang my:

y l m hnh m t vic chuyn i trng thi ca i tng trong qu trnh tham gia cc hot ng nghip v ca h thng. Trng thi ca i tng b thay i bi mt hnh vi no . S hnh ng (activity diagrams): y l s m t lung nghip v trong h thng.

19

S trin khai (Deployment Diagram): y l s cho thy cc thnh phn c v phn cng v cc cc gi phn mm c trin khai nh th no.

20

S tng tc (interaction diagram): y l s m t s tng tc gia cc i tng theo trnh t thi gian (cn gi l sequence diagram). Cc s sequence c th c m t mc h thng (Sequence System ch c user tng tc vi h thng) hoc mc chi tit (Sequence Detail Cc i tng v thng ip gia chng c nh hnh). Cc class trong h thng c chia thnh ba loi tch bit: M (Model) V (View) C (Control). Cc class V chu trch nhim hin th giao din tng tc vi ngi s dng, cc class M lu tr d liu c m hnh ha t thng tin i tng qun l trong khi cc class C l ni iu khin vic d liu t M c a ti giao din V nh th no hoc x l cc yu cu t V sau cp nht vo M.
   sd Sequence            V                                           Khach mua       DangKy               hang Page           Nhap thong tin dang ky                                                                                                                      
Click "Dang Ky"

      C                   M                              AccountUtilities      AccountTable                                                                               DangKyKhachHang()                                                                      

                                               

XacNhanThongTinDangKy()

                                                         sd MuaHang                  V             C       M                                                                                                                                                                                        
Chon xem san pham theo hang Khach Hang TrangChu TrangDanhMucSanPham SanPhamUtilities SanPhamTable

                                                                                   
Redirect

                                       LayDanhSachSanPham                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 21                                                                                                                                                            
HienT hi

III.3 ng dng UML trong quy trnh lm phn mm Nh trnh by trn, UML ch thun ty l mt ngn ng m hnh dng cho vic m t mi kha cnh ca h thng phc v cho vic xy dng v pht trin cng nh bo tr sau ny. Cc cng ty phn mm khc nhau tuy u ng dng UML nhng c th s dng cc quy trnh pht trin khc nhau.

S trn cho thy mt trnh t s dng cc m hnh UML xy dng mt ng dng. Xut pht t tng ban u thun ty mang tnh nghip v (business), cc bc tip theo cn lm song song l xy dng m hnh use-case v v phc tho giao din chng trnh. Tip theo xy dng m hnh sequence system v thng qua giao din ta bit user tng tc vi system nh th no. Sau xy dng m hnh class mc phc tho, s trng thi v s hnh ng. n y ta bit user tng tc vi c th i tng no ca system v cc thng ip gia cc i tng t m hnh class. y l c s xy dng sequence detail v hon chnh m hnh class vi cc quan h y . Trong thc t ng dng UML, ta cn linh hot s dng cc m hnh v s th hin st ng cc yu cu nghip v nhm mc tiu cui cng l chng trnh ng dng khi c trin khai s gp li t nht. Ngoi ra, ta cng cn ch ti tnh ti s dng v kh nng thch ng vi cc thay i ca cc m-un chng trnh. Khng nht thit mi h thng phi s dng tt c cc m hnh UML nhng quan trng nht l cc s trnh by trn. Theo quan im v phn tch thit k bng UML th vic lp trnh r rng khng ch bt u khi ci t cc class v cc sequence detail bng mt ngn ng lp trnh m thc t chng ta lp trnh ngay t khi xy dng m hnh use-case v vit text detail cho n. Nh vy vic lp trnh ci t ch c tin hnh sau khi cc m hnh hon tt, c khch hng chp thun. Do , trong qu trnh xy dng cc m hnh cn tun th quy trnh v lin tc tip xc vi khch hng m bo tnh chnh xc v y . Mt khi cc m hnh v ti liu c t hon chnh, vic coding thc s ch chim khong 20% tng s thi gian. Sau y l mt s cng c gip s dng UML trong pht trin h thng phn mm:

22

IV. Quy trnh Rational Unified Process (RUP) pht trin phn mm da trn UML
IV.1. Gii thiu v RUP Trong s cc quy trnh hin nay, RUP c pht trin bi cng ty Rational Software c s dng kh ph bin. Lch s: RUP l s phi hp gia cch tip cn cng ngh hng i tng ca Rational trong nhng nm 1980s v 1990s vi cng ngh x l i tng ca Ival Jarcobson. Phin bn mi nht ca RUP l version 7.0 pht hnh 2005. ng c pht trin RUP l tm ra nguyn nhn ca cc li phn mm v tm cch khc phc chng thng qua mt quy trnh. IV.2. Cc nguyn tc chnh ca RUP: 1- Tun th tin trnh (Adapt the process). 2- Cn bng cc u tin ca stakeholder (Balance stackeholder priorities). Stakeholder l nhng ngi a ra nhng kin c nh hng ln ti t tng thit k h thng. 3- Cng tc gia cc nhm (Collaborate across teams). 4- Th hin kt qu theo quy trnh lp (Demonstrate value iteratively). Kt thc mi quy trnh cn theo di kt qu v kim tra cht ch. 5- Nng cao mc tru tng (Elevate the level of abstraction). 6- Tp trung theo di cht lng lin tc (Focus continuously on quality). IV.3. Vng i ca phn mm theo quy trnh RUP Trong mt vng i ca phn mm, c 4 pha: Inception, Elaboration, Construction v Transition.

23

Biu trn cho bit trnh t cc pha v lng ti nguyn (resources) s dng cho mi pha. Ti nguyn y th hin v nhn lc v c s vt cht c huy ng. Inception: y l giai on chun b, tip xc vi khch hng nm bt tng v thu thp yu cu, chun b nhn lc, vt t k thut. Elaboration: Sau khi thu thp c yu cu th y l pha thit k phc tho s dng cc s UML m hnh ha cc yu cu, cc quy trnh nghip v ca ng dng, Construction: Pha xy dng h thng yu cu s dng nhiu nhn lc, ti nguyn ca cng ty. Cc cng vic nh thit k chi tit, ci t, kim th,u c tin hnh trong pha ny. Transition: Pha chuyn giao cho khch hng. Mt biu khc chi tit hn cho ta thy cc cc giai on pht trin c tin hnh khi no v mc s dng ti nguyn ca chng trong cc pha theo cc nguyn tc chung.

Trong biu trn, pha inception ch yu lm cc cng vic mang tnh cht khi ng nh m hnh ha nghip v (business modeling), thu thp yu cu (requirements). Cc giai on cng vic ca RUP bao gm: M hnh ha nghip v (business modeling): m t cu trc v quy trnh nghip v. Xc nh yu cu (requirement): m t nghip v bng phng php s dng cc use-case. Phn tch v thit k (analysis & design): m t kin trc h thng thng qua cc s phn tch thit k. Lp trnh (Implement): thc hin cc vic xy dng chng trnh bng ngn ng lp trnh.

24

Th nghim (Test): m t cc tnh hung v kch bn th nghim, tin hnh th nghim h thng phn mm. Trin khai (Deployment): a h thng phn mm vo s dng. Qun tr cu hnh v qun tr thay i (Configuration & Change Management): kim sot cc thay i v duy tr s hp nht ca cc thnh phn d n. Qun tr d n (project management): qun l ton b qu trnh lm vic ca d n. m bo mi trng (environment): m bo cc h tng cn thit c th pht trin c h thng.

IV.4. Cc cng c ca RUP p dng c quy trnh pht trin h thng phn mm ca Rational th yu cu khng th thiu l h thng cc phn mm cng c h tr. Hng Rational xy dng mt h thng cng c nh vy, m tiu biu v thng dng nht l: Phn mm Rational Requisite Pro: cho php phn tch cc yu cu, xy dng k hoch thc hin, xc nh cc tc nhn ca h thng cng nhng tnh hung s dng. Phn mm Rational Rose: cho php xy dng cc m hnh phn tch, thit k, trin khai. Phn mm Rational XDE: cho php va xy dng cc m hnh va kt sinh m ngun chng trnh song song vi nhau. Phn mm Rational Clear Case: qun tr d n phn tch thit k, cho php lm vic theo nhm.

Bi tp
1. Xy dng m hnh use-case cho h thng qun l vic mn v tr sch ti th vin. Hy tit text detail v xy dng m hnh sequence system cho cc use-case : Mn sch v Tr sch. 2. Hy m t mt quy trnh ng dng UML trong pht trin h thng phn mm. 3. Hy vit text detail cho cc use-case trong cc h thng khc nhau: - Mua hng trong h thng bn hng siu th. - ng k hc trong h thng tuyn sinh. - ng nhp h thng trong mt h thng c yu cu xc thc account.

25

ti 2. Nhp mn Java
I. Vit v thc hin mt chng trnh Java
I.1 Tm hiu m ngun mt chng trnh n gin 1. /* Day la chuong trinh vi du*/ 2. public class Vidu 3. { 4. public static void main(String[] args) 5. { 6. System.out.println("Hello, World!"); 7. } 8. } Dng 1: Dng ch thch trong mt chng trnh Java. Trong khi lp trnh, ta cn ch vit cc dng ch thch m t v m ngun. iu ny rt quan trng khi chng trnh ln v gp li, cc dng ch thch gip ta nhanh chng nhn ra vai tr v ngha ca tng on code. Cc ch thch trong chng trnh Java c t trong cp /* v */ khi cn ch thch nhiu dng hoc sau cp // khi ch ch thch mt dng. Tuy nhin cc cp /* v */ hay c dng hn v cc on ch thch ny s c t ng a vo ti liu khi ta dng cng c javadoc sinh ti liu cho m ngun. Dng 2: Khai bo mt lp c tn Vidu. Dng 3. Cng vi dng 8 to thnh mt cp {} dng nh du vic m v ng cho mt khi lnh, trong trng hp ny, tt c cc lnh nm trong cp ny u thuc phm vi ca lp Vidu. Dng 4: Khai bo hm main. Trong Java, mi chng trnh nu cn thc thi u bt u t hm main. Trnh thng dch s tm hm main lm im khi pht cho mt ng dng Java. Dng 5 v 7 cng l nh du m v ng cho mt khi lnh thuc hm main. Dng 6: Cu lnh in ra mn hnh dng ch Hello, World!. Cc lnh trong Java lun c kt thc bi du ;. I.2. Thc hin chng trnh Java. thc hin chng trnh Java trong v d trn, ta thc hin theo cc bc sau: 1. Dng mt trnh son tho bt k hoc mt IDE Java th cng tt son chng trnh. 2. Ghi file va son vi tn Vidu.java. y, tn file phi bt buc l Vidu ging nh tn lp trong chng trnh. Phn m rng cng bt buc l .java trnh bin dch Java bit y l file cha m ngun Java. Gi s ghi vo th mc C:\JavaSample. 3. Gi ca s Command Line ca Windows: T Menu Start, chn Run v g vo lnh cmd. 4. T du nhc g lnh: javac C:\JavaSample\Vidu.java Sau lnh ny, nu chng trnh khng c li c php, Java s sinh ra mt file m bytecode c tn Vidu.class mc nh cng nm trong th mc C:\JavaSample. 5. T du nhc g lnh: java C:\ JavaSample\Vidu.class

26

Lnh ny s thng dch file m bytecode Vidu.class v in ra mn hnh dng ch Hello, World!. y, ta cn ch Windows khng t ng hiu cc lnh javac, java. Tuy nhin, khi ci t Java ta t ng dn mc nh n th mc cha cc lnh ny l: C:\Program Files\Java\jdk1.6.0_02\bin Trng hp cha t ng dn mc nh, ta phi gi cc lnh ny vi ng dn y ca n. I.3. Mt s ch khi lp trnh Java Java phn bit ch vit hoa v vit thng. Hm main phi nm trong file gi thc hin. Hm main trong Java lun lun l static. Tn khai bo lp phi trng vi tn tp Vidu.java Trong Java tt c hm v th tc u phi c t trong mt lp c th. Khng c khai bo phng thc, hm hay th tc bn ngoi lp. S dng phng thc (method) thay th cho hm v th tc. I.4. Cu trc mt chng trnh Java /*Khai bao goi*/ package <tn gi>; /*Khai bao thu vien*/ import <tn gi th vin>; /*Khai bao lop chua ham main*/ public class <tn lp> { /*Cc thuoc tinh cua lop */ . /*Cac phuong thuc*/ . /*Hm main*/ public static void main(String[] args) { // Cc lnh trong hm main } } /*Cac lop lien quan khac*/ class A { . } class B { . } Cc thnh phn trong mt chng trnh Java gm c: 1. Khai bo gi: 27

C php: package <tn gi>. Khai bo ny l khng bt buc vi mt chng trnh Java. Trong trng hp ng dng gm nhiu class v cn t chc cc class vo cc gi ring th ta cn khai bo gi. Trong chng trnh trn, class Vidu sau khi bin dch s c t trong gi my.java. Tn ca gi c cha cc du . ch s bao gm, y gi java nm trong gi my v class Vidu nm trong gi java. Khi mt chng trnh Java khc mun truy cp ti lp Vidu, n cn truy cp theo ng dn gi my.java.Vidu. Thc ra, ngha quan trng ca gi l vic t chc mt cch logic cc lp vo trong cc domain ring ngi pht trin ng dng d dng truy cp. Trong hng ngn class c Java h tr trong cc gi th vin, chng u c nhm li theo chc nng v mc ch s dng vi tn gi c tnh cht gi . Nu khng lm nh vy, chng ta s rt kh khn tm ra mt class s dng. 2. Nhp th vin. C php: import <tn th vin> Nu c khai bo ny, khi s dng cc class nm trong gi theo <tn th vin> ta khng cn vit y tn gi m ch cn vit tn class. Java dng k t * ng vic nhp tt c cc class trong <tn th vin>. V d: import my.java.Vidu; // Nhp duy nht class Vidu trong gi my.java import my.java.*; // Nhp tt c cc class c trong gi my.java, tt nhin l bao gm c class Vidu. Sau y l mt chng trnh v d s dng import: 1. import java.util.Date; //Khai bo th vin 2. /*Chng trnh in ra ngy thng hin hnh*/ 3. public class Application { 4. public static void main(String[] args) { 5. Date date = new Date(); //to bin i tng thuc class Date 6. System.out.println(Hm nay "+date); 7. } 8. } y, class Date c khai bo import nn khng cn khai bo y java.util.Date ti dng s 5. 3. Khai bo class, thuc tnh, hm thnh phn: Cc khai bo ny s c bn chi tit trong mc Lp trnh hng i tng trong Java. 4. Khai bo hm main: Khng phi tt c cc class trong Java u cha hm main. Ch c class c gi thc thi u tin mi cn cha hm main. 5. Khai bo cc lp khc: Thng thng 1 file chng trnh Java chng ta ch khai bo 1 class. Tuy nhin khi class qu phc tp chng ta c th tch ra thnh cc class khc. Trong s 5 phn trn, tt c cc class u c phn 3, cc phn cn li c th c hoc khng ty theo nhu cu.

II. Cc kiu d liu trong Java


II.1 Cc kiu d liu s nguyn Java c 4 kiu s nguyn:

28

int short long byte

4 bytes 2 bytes 8 bytes 1 byte

T 2,147,483,648 n 2,147,483, 647 T 32,768 n 32,767 T 9,223,372,036,854,775,808 n 9,223,372,036,854,775,807 T 128 n 127

II.2 Cc kiu s thc Java c 2 kiu s thc du chm ng: float 4 bytes Xp x 3.40282347E+38F double 8 bytes Xp x 1.79769313486231570E+308

S du chm ng c th nhn cc gi tr: V cc m/dng. S m/dng. S 0. NaN (khng l mt s = 0.0/0.0f). II.3 Kiu k t (character) L kiu d liu biu din 1 k t unicode. Mt bin char s c mt gi tr l mt k t Unicode. II.4 Kiu logic (boolean) L kiu d liu ch c hai gi tr true v false dng xc nh kt qu mt iu kin. Ch : kiu boolean khng c th hin l 0 v 1. II.5 Kiu chui Java xem chui l mt i tng. Bin i tng chui thng c khai bo t lp String nm trong gi java.lang.String. II.6 Chuyn i gia cc kiu s

char byte short int

long double

float

29

III. Khai bo bin v hng trong Java


III.1 Quy tc t tn bin Khi khai bo cc bin trong chng trnh Java, ta cn ch tun th cc im sau: Ch bt u bng mt k t (ch), mt du gch di (_) hay mt du dollard ($). Khng c khong trng gia tn. Sau k t u, c th dng cc k t (ch), k t s, du dollard, du gch di. Khng trng vi cc t kho. III.2 Khai bo bin Cc bin trong Java ri vo hai trng hp: Ton hc: Cc bin c kiu nguyn thy ca Java u thuc dng ny. Sau khi khai bo, bin c cp pht mt vng nh c nh ty theo kch thc ca kiu d liu ca bin . a ch: Cc bin i tng c lu dng ny. Bin ch lu gi tr a ch u ca mt vng nh c cp pht cho i tng. V d khai bo cho tng kiu bin ton hc: byte i; short j; int k; long x; float y; double z; char ch; boolean bQuit; Cc bin a ch thng s dng lu tr cc a ch mng, con tr, i tng. V d v khai bo bin kiu a ch: String strHello; //khai bo mt chui AudioClip music; // v d lp ca AudioClip Khi ng gi tr cho bin V d v khi ng bin ngay lc khai bo: byte i = 3; short j = 10; int k = 1; long x = 1234567L; float y = 1.25f; double z = 23.45d; char ch = T; boolean bQuit = true; String strHello = Hello everybody; y cn ch rng khi khi to gi tr cho cc kiu s nn xc nh r kiu d liu ca gi tr. Cc gi tr mc nh byte 0 short 0 int 0 30

long 0L; float 0.0f; double 0.0d; char null; boolean false; Cc bin dn sut null III.3 Bin kiu mng Khi cn lm vic vi mt tp cc gi tr c cng kiu d liu, ta c th s dng mt bin mng lu tr chng. Khai bo: Mt bin mng c khai bo theo hai cch: S dng cp ngoc vung t sau tn bin. S dng cp ngoc vung t sau kiu d liu. V d: int [] intArray; hoc int intArray[]; u cho ta mt mng s nguyn c tn l intArray. Thng thng ta dng kiu khai bo th nht c th khai bo nhiu bin mng cng kiu d liu: int [] intArray1, intArray2, intArray3; nh v mng Sau khi khai bo, bn thn mng cha xc nh hay cha c nh v v cha c cp pht vng nh . Do , mng cn c cp pht vng nh trc khi s dng. Dng t kho new nh v cho mt mng trong vng nh, v d: int IntArray[] = new int[100];//to mng 100pt float floatArray[]; floatArray = new float[10]; //to mng 10 pt Khi to gi tr cho mng Ta cng c th khi to mt mng bng cch lit k cc phn t ca n, v d: int IntArray[] = {1, 2, 3, 4, 5}; char [] charArray = {a, b, c}; IntArray[] = new int[] {1, 2, 3, 4, 5}; Truy cp cc phn t ca mng Cc phn t trong mt mng lun c nh s bt u t s 0. Kiu d liu ca ch s l kiu int. Tuy nhin nu dng kiu char th Java s t ng chuyn sang m ASCII tng ng. V d b[a] tng ng vi b[97]. Phn t u tin l phn t th 0, v phn t cui cng ca mt mng c n phn t l n-1. Cc phn t ca mng c truy cp mt cch trc tip bng ch s ca n. V d: int IntArray[] = {1, 2, 3, 4, 5}; int a = IntArray[2];//a=3 int b = IntArray[0];//b=1 Ta c th gn cc gi tr ca mng thng qua truy nhp vo tng phn t ca mng. V d: int intList[] = new int[10]; //to mng 10pt intList[0] = 99; //Phn t th 0 (u tin) c gi tr l 99. for (sort i=1; i<10; i++)

31

intList[i] = 1; //cc phn t cn li bng 1 V d: int x, y, k; x = intList[0]; //x=99 y = intList[5]; //y=1 k = intList[y+1]; //k=intList[6]=1 Mng nhiu chiu: Khai bo mng 2 chiu: <kiu phn t>[][] <tn mng> = {<danh sch phn t>}; V d: int[][] b = {{1,2},{3,4}}; y l khai bo v khi to gi tr cho mt mng 2 chiu kch thc 2 x 2. {1,2} l cc phn t ca hng 1; {3,4} l cc phn t trn hng th 2. Hoc ta c th khai bo r s hng v s ct ca mng: int b[][] = new int[ 3 ][ 4 ]; Thm ch ta c th khai bo mt mng 3 chiu hoc hn. int b[][][] = {{{1,2},{3,4}},{{5,6},{7,8}}}; Ta c b[0][0][0] =1; b[0][0][1]=2;b[1][1][1]=8;b[0][1][0]=3; III.4 Hng s (literal) L mt gi tr khng i c s dng trong chng trnh. Hng s c biu din nh chnh n ch khng l mt gi tr ca bin hay mt kt qu ca biu thc. Gi tr ca hng s khng th b thay i. V d: Pi = 3.1415. Tn ca hng s c t tn nh tn bin. Cch khai bo hng cng tng t nh bin nhng c dng thm t kha final: <phm vi> final <kiu d liu ca hng> <tn hng> = <gi tr> V d: public final String mauda ="vang"; Hng s c th l: Hng s nguyn: Hng c th c biu din di dng thp phn, bt phn, thp lc phn. V d: biu din s 15 dng int: 15. dng long: 15L. dng bt phn: 017. dng thp lc phn: 0xF. Hng s thc: Tng t nh hng s nguyn, ch r hng l float ta thm v ng f hay F, hng l double ta thm d hay D. Hng Boolean: Mt hng s kiu boolean c gi tr l true hoc false. Trong Java, cc gi tr 0 v 1 khng c dng thay th cho false v true nh trong C hoc C++. Hng k t: L mt k t n gin hay mt chui ESCAPE, hng k t c t trong hai du ngoc n . Cc chui ESCAPE: \b : Xo li. \n : Xung dng. \t : Tab ngang. 32

\f : y trang. \r : du enter. \ : nhy kp. \ : nhy n. \\ : s ngc. uxxxx: k t unicode. V d: System.out.println(Xin cho bn \n Nguyn Vn A); S in ra mn hnh kt qu: Xin cho bn Nguyn Vn A Hng chui k t: Mt hng chui k t c th c 0 k t (hng chui rng) hay nhiu k t. V d: A String, //chui rng, dong 1 \t\n dong 2. III.5 Phm vi hot ng ca hng v bin: Khi lnh Block 1 cha 2 khi lnh con Block 2, Block 3.

{ Block 1
{ Block 2 }

{
Block 3

}
Bin hay hng s ch c ngha trong phm vi khi lnh m n c khai bo.

IV. Cc ton t v biu thc


IV.1 Cc ton t v th t u tin Cc ton t thng s dng: Ton t ngha = Gn != so snh khc > so snh ln hn < so snh nh hn >= ln hn hoc bng <= nh hn hoc bng + cng tr * Nhn

V d x=10 x!=5 x>5 x<20 x>=10 x<=10 y=x+1 y=x-1 y=x*3

33

/ % ++ -+= -= *= /= ^ | & ! && || ==

Chia Ly phn d tng gi tr ln 1 gim gi tr i 1 cng kt hp php gn tr kt hp php gn nhn kt hp php gn chia kt hp php gn php XOR trn bit php OR trn bit php v trn bit Ton t logic NOT Ton t logic AND Ton t logic OR So snh bng nhau

y=x/3 10%3 = 1 x++ x-x+=y tng ng x=x+y x-=y tng ng x=x-y x*=y tng ng x=x*y x/=y tng ng x=x/y x^y x|y

Th t u tin: ( ), *, /, %, +, -,= =, !=, &, ^, |, &&, ||, =, %=, /=, *=, -=, += IV.2 Biu thc Biu thc l s kt hp cc bin s, cc gi tr bi cc ton t hoc c th l mt php gn gi tr mt biu thc cho mt bin s. V d: (x+3)/(y-2); C 3 loi biu thc chnh l: Biu thc s lin kt cc bin s, cc hng bng cc php ton s, kt qu l mt gi tr s. Biu thc gn dng gn gi tr cho mt bin, mt hng. Biu thc logic ch cho ra kt qu l cc gi tr true hay false. Khi s dng cu lnh gn kt qu ca mt biu thc cho mt bin, ta cn ch ti vn ng nht kiu d liu gia hai v trnh mt thng tin. V d: double delta = 0.0d; //khai bo mt bin s thc c tn delta. delta = 1/ 100; // Gn cho delta kt qu ca php chia 1 cho 100. Trong tnh hung ny, ta khng thu c delta = 0.01 nh mong i m l delta =0. L do l cc s 1 v 100 u c hiu l cc s nguyn v kt qu ca php chia c t ng lm trn thnh mt gi tr nguyn trc khi gn cho delta. khc phc tnh trng ny, ta cn xc nh r cc s 1 v 100 l cc s double. delta = 1d/100d;

V. Cc lnh iu khin r nhnh


V.1 Lnh if Lnh if...{...}: l mt php kim tra gi tr ca mt biu thc boolean, nu cho gi tr l true th khi lnh s c thc hin. Cu trc: if <biu thc boolean>

34

{ <khi lnh>; } Nu biu thc boolean ng, khi lnh s c thc hin, cn nu biu thc sai th khi lnh s b b qua. V d: public class dkIfThen { public static void main(String[] args) { int x=1; int y=x+1; if (x<y) { System.out.println("x>y"); } }} Dng 2 ca cu lnh if: if <biu thc boolean> { <khi lnh 1>; } else { <khi lnh 2>; } Nu biu thc boolean ng th <khi lnh 1> c thc hin, cn nu biu thc boolean sai th <khi lnh 2> c thc hin. V d: public class dkIfThen { public static void main(String[] args) { int x=1; int y=x-1; if (x<y) { System.out.println("x>y"); } else { System.out.println("x<y"); }}} V.2. Lnh switch case Lnh switch ... case ...: Cho php chn nhiu trng hp xy ra ca gi tr so snh. Cu trc: switch <biu thc>{ case <gi tr 1>: <khi lnh 1>; break; case <gi tr 2>: <khi lnh 2>; break; ... case <gi tr n>: <khi lnh n>; break; default: <khi lnh default>; break; }

35

Mt s ch khi s dng lnh switch-case: Cc gi tr: <gi tr 1>, <gi tr 2>,<gi tr n> phi l cc hng s. Nu khng s dng lnh break mi khi kt thc cc khi lnh th sau khi thc hin xong khi lnh, cc lnh tip theo s c thc hin.

VI. Cc lnh lp
VI.1. Vng lp for Khi mun mt khi lnh c thc hin vi mt s ln bit trc, ta c th s dng mt vng lp for. Cu trc lnh: for([<khi to>]; [<biu thc kim tra>]; [<bc nhy>]) { <Khi lnh>; } Bt u vi gi tr <khi to> ca bin m, <khi lnh> c thc hin. Sau mi ln thc hin xong <khi lnh>, bin m thay i gi tr mt lng bng <bc nhy> v <biu thc kim tra> c tnh li. Nu biu thc kim tra l true th li thc hin khi lnh, cn nu l false, vng lp chm dt. Lu hot ng ca vng lp for nh sau:

Biu thc bin iu khin

Biu thc iu chnh theo bc nhy

Biu thc kim tra


true

false

Thc hin khi lnh

Kt thc vng for


V d: tnh tng 1 dy s thc public class vdFor { public static void main(String[] args) { double accounts[]={1.2,1.4,1.6}; double sum=0; for (int i=0;i<accounts.length;i++){ sum+=accounts[i]; 36

} System.out.println(sum); } }//kt qu l: 4.2 Cc vng for c th c t lng nhau nu cn V d: for(int i=0; i<10; i++) { [cc cu lnh; ] for(int j=0; j<5; j++) { [cc cu lnh; ] ... } [cc cu lnh; ] } VI.2. Vng lp while Khi mt khi lnh cn c thc hin, thng l vi mt s ln khng c bit trc, ta c th s dng vng lp while. Cu trc lnh: while <bt boolean> { <Khi lnh>; } Khi lnh c thc hin khi <bt boolean> cn c gi tr true. Ch : trong khi lnh phi c cu lnh c tc dng nh hng ti kt qu <bt boolean> vng lp c th dng. Lu thc hin:

Bt boolean

false

true Cc cu lnh

Cu lnh tip theo

37

VI.3. Vng lp do... while Vng lp ny c ngha tng t nh vng lp while nhng <khi lnh> c thc hin ngay vng u tin m cha cn kim tra kt qu <biu thc boolean>. Cu trc lnh: do { <khi lnh>; } while <biu thc boolean>; Vng lp ny cho thc hin <khi lnh> ri mi kim tra <biu thc boolean>. Nu <biu thc boolean> c gi tr true th tip tc thc hin <khi lnh>, nu khng s dng vng lp. V d tnh tng 10 s nguyn dng u tin: public class vdDoWhile { public static void main(String[] args) { int x=1, sum=0; do{ sum+=x; x++; } while (x<11); System.out.println(sum); } } //kt qu l: 55 VI.4. Php nhy Trong mt s trng hp, vic thc hin cc vng lp i khi khng theo ht vng m c th dng hoc thot khi vng lp. V d: Tm mt gi tr no trong mt dy 1000 phn t. Khi thc hin vng lp duyt dy, so snh cc phn t ca dy vi gi tr cn tm t phn t u tin cho n phn t cui cng, nu tm thy phi thi duyt dy ngay. Vic nhy ra khi vng lp c thc hin vi lnh break hoc kt thc vng hin ti vi lnh continue. Lnh break Lnh ny kt thc ngay vng lp trong cng (nu c nhiu vng lng nhau) cha n. V d: while <bt boolean 1>{ lnh 1; lnh 2; if <bt boolean 2> break; lnh 3; } lnh 4; Lnh continue Cho php chng trnh b qua vng hin ti v nhy n vng tip theo. V d: while <bt boolean 1>{

38

lnh 1; lnh 2; if <bt boolean 2> { .. continue; } lnh 3; } lnh 4; Khi <bt boolean 2> c gi tr true, lnh continue c thc hin, chng trnh s khng thc hin tip <lnh 3> m quay li kim tra <bt boolean 1>.

VII. Vo d liu t bn phm v xut d liu ra mn hnh


VII.1. Ly gi tr nhp vo t bn phm ly gi tr m ngi s dng nhp t bn phm, ta lm theo cc bc sau: 1. Khai bo bin thuc lp Scanner. Lp Scanner ch c h tr t phin bn Java 1.5 v nm trong gi java.util. // Khai bo mt bin Scanner c tn l nhap. Java.util.Scanner nhap = new java.util.Scanner(System.in); 2. Ly gi tr nhp vo: System.out.print("What is your name? "); // In ra mn hnh mt cu hi tn /* Khai bo v gn gi tr nhp t bn phm cho mt bin kiu String c tn name.*/ String name = nhap.nextLine(); c 1 t trong chui nhp vo: String firstName = nhap.next(); Nu c vo mt s nguyn: int Tuoi = nhap.nextInt(); Tng t cho cc kiu d liu khc. V d: import java.util.*; public class InputTest { public static void main(String[] args) { Scanner nhap = new Scanner(System.in); // Lay gia tr nhap ho ten System.out.print("What is your name? "); String name = nhap.nextLine(); // Lay gia tri nhap tiep theo System.out.print("How old are you? "); int age = nhap.nextInt(); // Hien thi ket qua nhap tren man hinh System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); } }

39

VII.2 Kt xut d liu ra mn hnh Trong cc chng trnh v d trn, ta bit dng hm System.out.print in d liu ra mn hnh. Tuy nhin, trong mt s trng hp ta cn nh dng d liu xut ra chng hn nh hin th mt s thc dng thp phn vi chnh xc nht nh. System.out.printf(%8.1f, 10/3); System.out.printf(Hello, %s. You have %f VND , name,money); Sau y l bng cc k t nh dng: K t nh dng D X O F E A S C B H tx % N nh dng S nguyn thp phn S nguyn h 16 S nguyn h 8 S thc float S thc float dng Hexa String K t Boolean Hash code Date and time K hiu phn trm Xung dng % V d 159 9f 237 15.9 0x1.fccdp3 Hello H True 42628b2

S thc float theo k php c s e 1.59e+01

Sau y l v d s dng cc k t nh dng khi xut d liu ra mn hnh. public class TestFormat { public static void main(String[] argvs) { double sothuc = 10.09898765; /*In ra s thc chim 10 k t trn mn hnh trong phn thp phn chim 3 k t*/ System.out.printf("Ket qua 3 so sau dau phay la %10.3f \n",sothuc); int songuyen =100; /*In ra s nguyn h c s 16*/ System.out.printf("He 16 cua 100 duoc viet la: %x \n",songuyen); /*In ra s nguyn h c s 8*/ System.out.printf("He 8 cua 100 duoc viet la: %o \n",songuyen); /*In ra k t c bit */ System.out.print("\"Mot tram phan tram\" thi in ra the nao: 100%"); }} Lu rng khi s dng cc k t nh dng ta cn dng hm System.out.printf() thay v System.out.print() hay System.out.println() nh thng l. 40

Bi tp
1. Vit chng trnh tnh gi tr cc biu thc (Gi tr n, k,nhp t bn phm): A = 1 + 1/2! + 1/3! + + 1/n! B = 1/1! 1/2! + 1/3! - 1/4! + + 1/(2k+1)! - . 2. Vit chng trnh m s t c trong mt chui k t nhp vo. Cc t cch nhau bi du space,. v ; 3. Vit chng trnh m tn sut xut hin ca cc t trong mt chui nhp t bn phm. 4. Nhp vo mt chui h tn ca mt ngi, hy sa li cc k t u cc t cho ng quy nh vit hoa v khong cch gia cc t. V d: nguyen van nam -> Nguyen Van Nam 5. Tm cc li trong cc on chng trnh sau: a) For ( x = 100, x >= 1, x++ ) System.out.println( x ); b) on m sau s in ra cc gi tr chn hay l: switch ( value % 2 ) { case 0: System.out.println( "Even integer" ); case 1: System.out.println( "Odd integer" ); } c) on m sau s in ra cc s nguyn l t 19 n 1 ?: for ( x = 19; x >= 1; x += 2 ) System.out.println( x ); d) on m sau s in ra cc s nguyn chn t 2 n 100 ?: counter = 2; do { System.out.println( counter ); counter += 2; } While ( counter < 100 ); 6. on chng trnh sau lm g? public class Printing { public static void main( String args[] ) { for ( int i = 1; i <= 10; i++ ) { for ( int j = 1; j <= 5; j++ ) System.out.print( '@' ); System.out.println(); } } } 7. Vit chng trnh tm s nh nht trong s cc s c nhp vo t bn phm. Cho bit s nguyn u tin nhp vo s chnh l s cc con s c nhp. 8. Vit chng trnh in ra mn hnh cc mu nh sau:

41

9. Tnh s PI theo cng thc sau:

In ra 10 gi tr chnh xc hn 3.141.

42

ti 3. Lp trnh hng i tng trong Java


I. Khi nim lp trnh hng i tng (Object-Oriented Programming - OOP)
I.1. Khi nim OOP Lp trnh hng i tng l s ci t mt chng trnh theo hng i tng bng cc ngn ng lp trnh, thng l ngn ng OOP. Nh vy, nu dng mt ngn ng OOP m chng trnh khng theo hng i tng th cng khng phi l lp trnh OOP. Trong khi nu dng mt ngn ng khng hng i tng vit mt chng trnh OOP (rt kh khn) th cng c th gi l lp trnh OOP. Thc t th ta khng th vit chng trnh hng i tng bng cc ngn ng cu trc (nh Pascal chng hn) v cc ngn ng ny khng h tr c php ci t v k thut bin dch cc c tnh ca hng i tng. Nhng ngn ng OOP khng ch bao gm c php v mt trnh bin dch (compiler) m cn c mt mi trng pht trin ton din. Mi trng ny bao gm mt th vin c thit k tt, thun li cho vic s dng k tha cc i tng tnh ti s dng. y l mt im mnh ca OOP v phng php trc y khng c c. i vi mt ngn ng lp trnh h tr OOP th vic trin khai k thut lp trnh hng i tng s d dng hn. Hn na, cc d n phn mm phn tch v thit k theo UML bt buc phi s dng k thut OOP ci t th mi pht huy hiu qu. I.2 C s l lun ca OOP Chng ta thy rng thut ng hng i tng c ngha l ly i tng lm trung tm v tt c nm trong i tng. Quan st th gii thc, ta thy mi vt u c v tr ring ca n, chng s hu cc tnh cht v thuc tnh ring, cch thc vn ng ring. Chng ta gi chng l nhng i tng. Theo cch hiu nh vy th mi nghip v thc t suy cho cng ch l vic qun l cc i tng, khai thc thng tin cng nh cc mi quan h t chng hoc thay i trng thi ca chng. OOP l phng thc t duy mi gii quyt vn bng my tnh. t kt qu, lp trnh vin phi nm c s tng ng gia cc cc i tng thc t, mi quan h gia chng v s h tr ca ngn ng ci t chng vo my tnh. Ngn ng OOP cung cp y phng tin thc hin iu ny. Chng ta s dng k thut hng i tng nh x nhng thc th chng ta gp phi trong i sng thc thnh nhng thc th tng t trong my tnh. Do , pht trin phn mm theo k thut lp trnh hng i tng c kh nng gim thiu s ln ln thng xy ra gia h thng v lnh vc ng dng. Tuy nhin, t nghip v thc t chng ta khng th ngay lp tc em vo ci t trong ngn ng OOP m phi qua mt quy trnh phn tch v thit k theo hng i tng nh chng ta thy qua vic nghin cu ngn ng m hnh ha UML mt ngn ng gip chng ta tru tng ha th gii thc. I.3 Tru tng ha Qun l thng tin, cc hnh vi, cc mi quan h ca cc i tng l nhim v m lp trnh OOP phi lm. Thng tin v i tng v mi quan h gia chng thc t l v cng. Vy lm th no a chng vo my tnh? Cu tr li l chng ta cn mt qu trnh tru tng ha.

43

Gi s i tng qun l l mt sinh vin. Mt h thng qun l sinh vin c th ch cn quan tm ti: H v tn, ngy sinh, lp hc, a ch ni , im cc mn hc. Trong khi , cc thng tin khc v sinh vin cng l mt con ngi nh chiu cao, cn nng, nhm mu, chng ta khng cn quan tm. Mt qu trnh suy lun nh vy l mt qu trnh tru tng ha d liu. y ta khng quan tm ti gi tr c th ca cc thuc tnh ny. Khi quan tm ti gi tr ca cc thuc tnh, chng ta c mt cu hi: Ci g lm cho d liu ny bin i? Cu tr li l chnh hnh vi ca i tng lm cho thuc tnh ca chng b thay i. Trong v d trn, mt anh sinh vin bt k c th c hnh vi xin i lp hc hoc i a ch ni lm cho gi tr cc thuc tnh lp hc, a ch ni b thay i. Qu trnh xc nh cc hnh vi ca i tng phc v cho nghip v qun l cng l mt qu trnh tru tng ha hnh vi. Tm li, chng ta c mt m hnh tru tng ha ca mt sinh vin: Sinh vin H v tn Ngy sinh Tn lp a ch im mn hc Thay i lp Thay i ni im quan trng l sau khi tru tng ha t mt lp cc sinh vin (tt c cc sinh vin trong phm vi qun l), m hnh ny i din cho tt c sinh vin v l khun mu to ra bt k sinh vin no khc. Qua y, ta cng rt ra nhn xt rng qu trnh tru tng ha ty theo yu cu nghip v s cho kt qu khc nhau. Cng l mt sinh vin nhng nu chng may anh ta b m nm vin, anh ta c qun l nh mt bnh nhn. Mt h thng qun l bnh nhn tt nhin khng th b qua cc thng tin v nhm mu, cn nng, huyt p,v tt nhin l cng c cc m hnh hnh vi khc. Cc lp i tng trong chng trnh - Classes Tru tng ha Th gii thc = Cc i tng + Cc mi quan h

Tm li: Cc thc th tn ti trong th gii thc c m hnh ha thnh cc lp i tng. Cc mi quan h gia cc thc th trong th gii thc c m hnh ha bng cc mi quan h gia cc lp i tng.

44

II. Tnh ng gi trong Java


II.1 Khi nim tnh ng gi Tnh ng gi th hin bi vic thuc tnh m t i tng v hnh vi ca i tng c gn cht vi nhau. Thuc tnh th hin trng thi i tng, hnh vi lm thay i trng thi i tng thng qua vic thay i gi tr cc thuc tnh. Thuc tnh c ci t thng qua m lnh Java bng cc bin thnh phn trong lp. Hnh vi c ci t thng qua m lnh Java bi cc phng thc. Thng tin v hnh vi i tng c bo v bng cc cp truy cp: public, private. Cp public cho php s truy cp t bn ngoi lp trong khi private ch cho php ni b lp truy cp. i tng c sinh ra bi class - mt s m hnh ha mt lp i tng trong thc t. object = attributes (cc thuc tnh) + operations(cc hnh vi) + name (tn nh danh) Nh vy tnh ng gi th hin vic chuyn m hnh i tng thc t thnh cc lp trong Java. II.2 Mi quan h gia cc class Cc class trong chng trnh c th quan h vi nhau theo 1 trong 3 dng: Ph thuc (Dependence): Class A c quan h ph thuc vi class B nu phng thc ca class A c s dng i tng thuc class B. Bao gm (Aggregation): Class A c quan h bao gm vi class B nu i tng ca class A cha i tng ca class B. Tha k (inheritance): Class B gi l tha k class A nu class B c cc phng thc v thuc tnh ca class A, ngoi ra class B cn nh ngha cc phng thc v thuc tnh khc ca ring n. V d: Trong h thng bn hng chng ta c: class DanhMucMatHang class TaiKhoan class HoaDon class HoaDonThanhToanNhanh Mi HoaDon bao gm 1 DanhMucMatHang: Quan h aggregation. Khi mt HoaDon c to ra, n cn truy cp n class TaiKhoan kim tra tnh trng th tn dng: Quan h dependence. Mi HoaDonThanhToanNhanh tha k cc thuc tnh v phng thc ca HoaDon v c thm cc thuc tnh, phng thc khc: Quan h inheritance. II.3 Mt s gi khi thit k class Khai bo d liu private: iu ny trnh vic truy cp ty t bn ngoi lp. Khi to cho d liu: Cc thuc tnh nn c khi to bng cc phng thc constructor khi mt i tng mi c to ra. Khng s dng qu nhiu kiu d liu c bn trong 1 lp Khng phi thuc tnh no cng cn mutator v accesor: Mi thuc tnh thng c mt phng thc thit t gi tr cho n gi l mutator (tin t set) v mt phng

45

thc ly ra gi tr ca n gi l accesor (tin t get). Tuy nhin iu ny l khng bt buc. Tch cc class phc tp. t tn phng thc v thuc tnh phn nh theo tnh cht v nghip v ca n.

IV. S dng cc Class xy dng sn trong th vin


Java h tr cho lp trnh vin mt th vin phong ph cc lp i tng c xy dng v thit k cn thn. Lp trnh vin ch cn bit cch ly chng ra v s dng chng theo kch bn ca ng dng. Cc gi th vin quan trng ca Java 2 bao gm: (tham kho chi tit ti: http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html ) Cc gi thng dng trong Java 2 SE java.applet java.awt java.awt.color java.awt.event java.awt.font java.awt.image java.awt.print java.beans java.io java.lang java.math java.net java.rmi java.security java.sql java.text java.util javax.crypto H tr cc class cn thit cho vic to ra cc Applet v giao tip gia Applet vi mi trng ng cnh ca n. Cha cc lp dng to ra cc giao din ngi dng v cho cc thao tc v cc hnh ha v nh. Cung cp cc lp cho khng gian mu. Cung cp cc giao din v cc lp cho vic gii quyt cc vn v x l cc s kin trn cc thnh phn giao din AWT. H tr cc giao din v lp lin quan n font ch. Cung cp cc lp to v hiu chnh hnh nh. Cung cp cc lp v giao din cho mc ch in n. Cha cc lp lin quan ti vic pht trin cc thnh phn (beans) da trn kin trc ca Java. H tr cho cc thao tc vo / ra d liu trn h thng file. Cung cp cc lp nn tng thit k ngn ng lp trnh Java. H tr cc lp thao tc v thut ton vi cc s nguyn ln BigInteger v BigDecimal. Cung cp cc lp cho vic ci t cc ng dng mng. Cung cp cc gi cho lp trnh RMI Remote Method Invocation. Cung cp cc lp v giao din cho vic x l cc vn an ninh v bo mt trong Java. Cung cp cc hm API cho vic truy cp vo d liu trong mt ngun d liu thng l cc CSDL quan h. Cung cp cc lp v giao din cho vic qun l text, dates, numbers v cc thng ip. Cha ng cc lp tin ch thuc nhiu loi khc nhau nh sinh s ngu nhin, ngy thng,. H tr cc lp v giao din cho cc thao tc m ha d liu.

46

javax.net javax.print javax.sql javax.swing javax.swing.event javax.swing.table javax.swing.tree javax.xml.parsers

Cung cp cc lp cho lp trnh mng. Cung cp cc lp c bn cho cc dch v in n qua mng. Cung cp cc hm API cho vic truy cp d liu pha server. Cung cp mt tp cc thnh phn giao din c chp nhn v thng nht trn hu ht cc h thng my tnh. H tr cho cc s kin kch hot bi cc thnh phn ca Swing. Cung cp cc lp v giao din lm vic vi bng. Cung cp cc lp v giao din lm vic vi cy javax.swing.JTree. H tr cc lp cho vic x l cc ti liu XML.

Sau y l hng dn v d v s dng lp Date c sn trong th vin ca Java: Khai bo bin i tng vi ton t new Date myDate = new Date(); Date() l phng thc contructor ca class Date. Mt i tng lun c to ra t mt constructor ca lp . Khai bo: Date myDate; Xc nh cho ta mt bin i tng Date nhng khng cho ta mt i tng Date thc s v trong thc t, myDate cha c cp pht vng nh. Cu lnh: myDate = new Date(); Xc nh rng myDate l mt i tng thc s thuc class Date, ta c th p dng cc phng thc v thuc tnh ca class Date cho myDate. System.out.println(myDate.getMonth()); // In ra thng hin ti

V. Xy dng Class trong Java


Ci t cc lp l cng vic thng xuyn ca lp trnh vin Java. Cc vn ca cng vic thit k mt lp bng ngn ng Java s c cp di y. V.1 Cu trc ca class [<Cch truy xut>] class <tn lp> [extends <tn lp cha>] [implements <tn giao din>] { <cc thnh phn ca lp>; } Ta s ln lt xem xt tng thnh phn: <Cch truy xut>: public: C th truy cp lp t cc lp khc. abstract: Lp tru tng, khng c khi to i tng ca lp ny. Cc lp tru tng c thit k ch cho mc ch k tha. final: Khng cho php k tha. Nu <cch truy xut> khng c xc nh, mc nh l public. 47

<tn lp>: Tn ca lp, nu <cch truy xut > l public th tn lp phi trng vi tn file cha lp. <tn lp cha>: Tn ca lp cha m lp hin ti tha k. <tn giao din>: Tn ca giao din c ci t ti lp. y c th l mt danh sch cc giao din phn tch bi du ,. <cc thnh phn ca lp>: y l phn thn ca lp cha cc nh ngha cho cc thuc tnh v cc phng thc thnh phn. Ta s ln lt xem xt ti cc thnh phn ny. V.2 Cc thuc tnh thnh phn: Khai bo thuc tnh chnh l vic khai bo cc bin. Khi khai bo trong lp chng thng c xc nh phm vi hot ng l mt trong cc dng: public: Bin c th truy cp bt c lp no. private: Ch c truy cp trong chnh lp . protected: Ch c truy cp trong lp v cc lp k tha. Mc nh th phm vi truy cp ca bin l public, cc bin thng thng c phm vi private. V d: public int Tuoi; private String HoVaTen; Cch truy cp bin rt n gin, ph thuc vo bin thuc dng no trong 2 dng sau: 1. Bin c phm vi i tng: y l bin tn ti cng vi s tn ti ca i tng. Mun truy cp vo bin, trc ht phi khi to mt i tng thuc lp. SinhVien sv = new SinhVien(20,Nguyen Van A); Truy cp vo bin Tuoi nh sau: sv.Tuoi, v d gn Tuoi ca sinh vin ny bng 21: Sv.Tuoi=21; 2. Bin c phm vi lp (bin tnh): y l bin c phm vi tn ti trong mi i tng ca lp c to ra trong chng trnh ang chy. Gi tr ca bin c dng chung gia cc i tng. Khi khai bo mt bin c phm vi lp, ta cn thm t kha static nh v d sau: public static int MaSo; Khi truy cp, ta c th khng cn khi to i tng m trc tip thng qua tn lp: SinhVien.MaSo = 10; Cc bin c phm vi lp rt t khi c s dng, trong khi cc hng static li rt hay c dng. L do l trong thc t, cc lp i tng thng c cc thuc tnh chung, c nh c mi i tng. Hn na, khi chng khng ph thuc vo mt i tng c th no th ta cng khng cn khi to mt i tng truy cp. Do , ta s ci t chng nh l cc hng static. V d: public static final String MauDa = Vang; // Mi sinh vin u c mu da l Vang hoc khi bo hng s PI: public static final double PI = 3.14159265358979323846; L hng s ca lp Math. Khi truy cp ta ch cn gi: Math.PI Ch : Cc bin rt t khi c khai bo l public v c th thay i gi tr ca n bn ngoi lp nn kh qun l. Trong khi cc hng thng lun c khai bo l public v chng c dng chung v khng th b thay i do t kha final (hng). Bin this Bin this l bin i tng ca lp tn ti ngm trong mi lp.

48

Thng dng bin this truy cp n cc thuc tnh ca lp b khai bo trng trong phm vi cc phng thc ca lp. V d: public class TestThis { private int number = 10; public void PrintNumber() { int number =20; // khai bo trng vi bin ca lp System.out.println(number); //in bien number = 20 System.out.println(this.number);//in bien number =10 } } V.3 Cc phng thc thnh phn Phng thc thnh phn l s ci t cc hnh vi ca i tng. C php khai bo mt phng thc trong lp nh sau: [<Cch truy xut> <cch cp nht>] <Kiu gi tr tr v> <Tn phng thc>([<danh sch bin hnh thc>]) [<mnh throws>] { <Ni dung ca phng thc>; } <Cch truy xut>: private: phng thc ny ch c truy xut bn trong lp cha n. public: c th truy xut t bt k lp bn ngoi no. protected: ch cc lp l dn xut ca lp cha phng ny mi truy xut c n. Nu khng khai r cch truy xut, cc phng thc s c cch truy xut mc nh l public. Cc phng thc khai bo chng lp dn xut phi c mc truy cp mnh hn hoc ging vi mc truy cp lp cha. < Cch cp nht> static: phng thc tc ng khng ph thuc vo cc i tng c th, n c th c gi m khng cn khi to i tng ca lp. abstract: phng thc n gin nht, khng ci t g trong lp khai bo n, tc l n khng c phn thn. Phng thc ny s c pht trin trong cc lp l dn xut ca lp cha n. Lp c cha phng thc abstract cng phi c khai bo abstract. final: phng thc ny c bo v khng cho cc lp dn xut khai bo v ci t li. native: l phng thc c vit bng ngn ng khc java. synchronyzed: m bo d liu khng b sai lc khi cng mt lc 2 phng thc truy cp cng mt d liu. <Kiu gi tr tr v>: integer, String, char, float, ...: l cc kiu d liu m phng thc tr v. void: phng thc khng tr v gi tr. Khi xc nh kiu gi tr tr v, khi kt thc cc lung x l trong phng thc nht thit phi c cu lnh return tr v mt gi tr thuc kiu . 49

public static int max(int num1, int num2) { if(num1>num2) return num1; else return num2; } V <mnh throws> chng ta s xem xt k trong phn x l ngoi l. V.4 Gi v truyn tham s cho phng thc Cc tham s kiu c bn c truyn theo kiu tham tr. Cc tham s c kiu i tng c truyn theo kiu tham chiu. Cc ch khi truyn tham s cho phng thc: Cc phng thc khng th lm thay i gi tr ca cc tham s c kiu nguyn thy. Phng thc c th lm thay i trng thi ca tham s kiu i tng. Phng thc khng th lm cho tham s i tng tham chiu ti mt i tng mi. Gi mt phng thc: C 2 cch gi phng thc: Nu phng thc tr v gi tr, vic gi phng thc thng c x l nh mt gi tr. V d: int larger = max(3, 5); hoc ta c th in gi tr tr v ca cuc gi phng thc: System.out.println(max(3, 5)); Nu phng thc tr v void, vic gi phng thc l cu lnh. V d phng thc println() tr v void: System.out.println("Hello!"); V.6 Cc hm v phng thc c bit Phng thc khi to: Phng thc khi to (constructor) dng khi to mt i tng ca lp v t trng thi ban u cho i tng bng cch xc nh gi tr cho cc thuc tnh ca lp. Mi lp c th c 1 hoc nhiu phng thc khi to. Phng thc khi to c cng tn vi tn lp v khng c kiu d liu tr v. Khi khng khai bo phng thc khi to, i tng c to ra bng phng thc khi to mc nh khng tham s vi cc gi tr mc nh ca cc thuc tnh. Constructor khng c k tha, n ch c nh ngha cho chnh lp cha. Vn s dng phng thc khi to ca lp cha trong cc lp dn xut s bn trong phn Tnh tha k Phng thc hy: Tri vi phng thc khi to, phng thc hy c gi khi i tng c gii phng. Tuy nhin, trong Java cng vic ny c lm t ng, lp trnh vin khng cn quan tm. Trong trng hp cn thit ta c th khai bo phng thc hy theo c php: protected void finalize() { // Body of Method } Hm main() y l mt hm c bit c ci t trong lp c gi thc thi u tin trong chng trnh. V n c gi khi cha c i tng no c to ra nn n lun c khai bo l static. 50

Hn na, vic gi hm main() ng nhin l din ra bn ngoi lp nn n cng cn c mc truy cp l public. Hm main() thng khng tr v gi tr no nn kiu gi tr tr v ca n l void. Hm main() c mt tham s l mt mng cc chui cha ni dung cc tham s dng lnh. V.7 Khai bo chng cc phng thc Cc phng thc trong cng mt lp c th c cng tn nhng nht nh s lng cc tham s hoc kiu ca chng phi khc nhau. iu ny gi l khai bo chng phng thc. T phin bn Java 1.5, kiu gi tr tr v cng c xem nh mt yu t phn bit cc phng thc. Sau y l chng trnh v d v xy dng cc class trong Java: abstract class People // Lp tru tng { protected int Tuoi; protected String HoVaTen; public static final String MauDa=Vang; //hng s // Phng thc khi to public People(int t,String ht) { Tuoi=t; HoVaTen=ht; } // Phng thc hin th tn v tui ca mt ngi public String toString(){ return HoVaTen + "," + String.valueOf(Tuoi); };} Sau , ta c mt lp SinhVien k tha t lp People trn: public class SinhVien extends People { private String Lop; private double DiemTongKet; public static int MaSo; // bin lp // Phng thc khi to public SinhVien(int t,String ht,String l,double dtk) { super(t,ht); // Gi phng thc khi to ca lp cha cho cc thuc tnh k tha // Cc thuc tnh khng k tha c gn tng minh Lop = l; DiemTongKet=dtk; } // Hm main public static void main(String[] argvs) { // Truy cp vo bin lp khng cn khi to i tng SinhVien.MaSo=10;

51

// Khi to mt i tng sinh vin, MaSo ca sinh vin ny s l 10 SinhVien k = new SinhVien(23,"Nguyen Thi Mai","Letio3",7.15); System.out.print(k.MaSo); SinhVien.MaSo=11; // Khi to mt i tng sinh vin, MaSo ca sinh vin ny s l 11 SinhVien k1 = new SinhVien(20,"Pham Anh Thu","Letio3",8.15); System.out.print(k.toString()); People p = new People(20,"Pham Anh Hoa"); // Bo li dng ny } } Trong chng trnh trn, vic khi to mt i tng thuc lp People s b bo li do lp ny l lp tru tng. Chng ta s tr li vn ny trong phn Tnh k tha. V.8 Lp lng nhau lp ni Co th inh nghia mt lp bn trong mt lp khac. Lp nh vy goi la lp lng (Nested Class) va c cai t nh sau : class EnclosingClass{ // Lp bao bn ngoai ... static class StaticNestedClass { // Lp lng tinh ... } class InnerClass { // Lp lng phi tinh hay lp ni b ... } } Lp lng chi c bit bn trong phm vi cua lp bao bn ngoai. Trnh bin dich Java se bao li nu mt oan ma bt ky ca lp bn ngoi truy cp trc tip lp lng. Mt lp lng co quyn truy cp n cac thanh vin cua lp bao bn ngoai, thm chi nu chung c khai bao private. Tuy nhin, lp bao khng th truy xut cac thanh phn cua lp lng. Co hai kiu lp lng : tinh va phi tinh. Lp lng tinh (static nested class) c b sung t khoa static. No khng th tham chiu trc tip n bin hay phng thc i tng c inh nghia trong lp bao, ma chi dung chung thng qua i tng. Vi gii han nay nn lp lng tinh it c dung. Hu ht cac lp lng la lp ni b. Lp lng phi tinh (nonstatic nested class) khng b sung t khoa static, con c goi la lp ni b (inner class). No co th truy cp trc tip n cac bin va phng thc i tng. class Outer { int outer_x = 100; void test() { Inner inner = new Inner(); inner.display_x(); } class Inner { // co th truy xut trc tip bin i tng cua lp Outer

52

int inner_y = 10; void display_x() { System.out.println(display : outer_x = + outer_x); } } void display_y() { // khng th truy xut bin i tng cua lp Inner System.out.println(display : inner_y = + inner_y); // Error } } class InnerClassDemo { public static void main(String args[]) { Outer outer = new Outer(); outer.test(); } } Trong Java c s dng mt k thut ci t lp ni nc danh, tc l khng c tn, khi x l cc s kin. V d: frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { System.exit(0); } public void windowIconified(WindowEvent e) {System.exit(0);} } ); y, ta c mt lp nc danh k tha t lp WindowAdapter. N c khai bo chng 2 phng thc ca WindowAdapter.

VI. Tnh k tha trong Java


theo di tnh k tha trong Java c ci t nh th no, trong phn ny chng ta s xem xt mt v d v qun l nhn s ti mt cng ty. VI.1 S k tha cc thuc tnh v phng thc Gi s trong cng ty, i ng qun l (managers) c i x khc vi nhn vin (employees) bnh thng. Lp Employee c nh ngha nh sau: import java.util.Date; import java.util.GregorianCalendar; class Employee { // Phng thc khi to public Employee(String n, double s, int year, int month, int day) { HoVaTen = n; Luong = s; GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);

53

// GregorianCalendar coi 0 l Thng 1 NgayBatDau = calendar.getTime(); } // Phng thc ly h tn public String getHoVaTen() { return HoVaTen; } // Phng thc ly lng public double getLuong() { return Luong; } //phng thc ly ngy bt u lm vic public Date getNgayBatDau() { return NgayBatDau; } // Phng thc tng lng public void raiseSalary(double PhanTram) { double PhanTang = Luong * PhanTram / 100; Luong += PhanTang; } // Cc thuc tnh thnh phn private String HoVaTen; private double Luong; private Date NgayBatDau; } Ta thy rng c Manager v Employee u c nhng im chung v mt qun l nh h cng c tr lng. Tuy nhin, vi Employee ch c tr lng theo mt hp ng c sn trong khi Manager ngoi lng ra cn c hng mt khon tin thng. y chnh l ng cnh tt ci t tnh k tha. Chng ta s thit k mt lp Manager nhng k tha li nhng g vit lp Employee. class Manager extends Employee { //Cc thuc tnh v phng thc b sung } T kha extends xc nh rng chng ta ang to ra mt lp mi c dn xut t mt lp ang tn ti. Lp ang tn ti cn c gi l lp cha, supperclass, hoc lp c s (base class), lp k tha cn c gi l lp dn xut, lp con. Cc lp dn xut thng c ci t nhiu tnh nng hn lp cha. Lp Manager c thm thuc tnh TienThuong v phng thc thit t gi tr cho n: class Manager extends Employee { ... 54

public void setTienThuong(double b) { TienThuong = b; } private double TienThuong; } Vic s dng cc thuc tnh v phng thc ny khng c g c bit. Nu ta c mt i tng Manager c tn boss, ta c th gi: boss.setTienThuong(10000); Tt nhin l i tng ca lp Emplyee khng th gi phng thc setTienThuong() v n khng phi l phng thc c nh ngha trong lp Employee. Tuy nhin, chng ta c th s dng cc phng thc getHoVaTen(), getLuong(), getNgayBatDau() i vi cc i tng ca lp Manager v chng c t ng k tha t lp Employee. Tng t nh th, cc thuc tnh HoVaTen, Luong v NgayBatDau cng c k tha. Lp Manager c 4 thuc tnh l HoVaTen, Luong, NgayBatDau v TienThuong. n y ta c th rt ra rng khi thit k cc lp trong Java, ta t cc thuc tnh v phng thc ph bin vo cc lp cha, lp con ch vic khai bo thm cc thuc tnh v phng thc c bit. Tuy nhin, mt s phng thc ca lp cha c th khng cn ph hp lp con. y, phng thc getLuong() i vi lp Manager phi l tng ca Luong v TienThuong. Do , ta cn nh ngha mt phng thc mi trong lp Manager ln phng thc c: class Manager extends Employee { ... public double getLuong() { ... } ... } Chng ta c th ngh vic ci t cho phng thc mi ny rt n gin nh: public double getLuong() { return Luong + TienThuong; // Khng thc hin } Tuy nhin n khng thc hin. L do l v s truy cp vo Luong y l khng hp l. Thuc tnh Luong trong Employee c khai bo l private nn ch cc phng thc trong lp Employee mi c php truy cp. Theo l thuyt, vic xc nh cho cc thuc tnh lp Employee cp truy cp l protected c v l hp l. Tuy nhin iu ny c th cho php tt c cc lp dn xut t Employee thay i gi tr cc thuc tnh ny lm tnh ng gi ca OOP b ph v. n y chng ta ngh rng Luong phi c truy cp thng qua mt c ch public khc l phng thc getLuong() c nh ngha public trong Employee. public double getLuong() { double LuongCoBan = getLuong(); // vn khng thc hin 55

return LuongCoBan + TienThuong; } Tuy nhin, on m ny cng cha thc hin c. L do l phng thc getLuong() lc ny c coi l chnh phng thc getLuong() ca lp Manager nn n khng c tc dng. gi c phng thc getLuong() ca lp Employee, ta dng t kha super ch lp cha. public double getLuong() { double LuongCoBan = super.getLuong(); // OK return LuongCoBan + TienThuong; } Nu khng cho php lp con k tha mt phng thc ca lp cha, ta dng t kha final khi khai bo phng thc. VI.2 S k tha i vi cc constructor Nh cp, cc phng thc khi to khng c t ng k tha cho lp con. Tuy nhin ta c th s dng phng thc khi to ca lp cha khi to gi tr cho cc thuc tnh c k tha lp con: public Manager(String n, double s, int year, int month, int day) { super(n, s, year, month, day); TienThuong = 0; } y, super(n, s, year, month, day); thay cho vic gi constructor ca Employee vi 5 tham s n, s, year, month v day. Lu l lnh gi super phi l lnh u tin trong phng thc constructor lp con. n y, ta c mt lp Manager c nh ngha ng n: class Manager extends Employee { // Phng thc khi to public Manager(String n, double s, int year, int month, int day) { super(n, s, year, month, day); TienThuong = 0; } // Phng thc tnh lng public double getLuong() { double LuongCoBan = super.getLuong(); // OK return LuongCoBan + TienThuong; } //Phng thc t tin thng public void setTienThuong(double b) { TienThuong = b; }

56

private double TienThuong; }

VII. Tnh a hnh trong Java


Tnh a hnh l mt kh nng ca OOP cho php mt phng thc thc thi theo ng cnh lc chng trnh ang chy. Cho dng l cng mt tn gi, thm ch l cng danh sch tham s, phng thc vn c gi theo ng i tng s hu n. Trong khi chng ta ci t tnh cht tha k ca OOP, c s ca tnh a hnh cng c ci t. Trong v d trn, phng thc getLuong() c nh ngha c lp cha v lp con, chng ta s xem n c gi nh th no. VII.1 S p kiu v gn tham chiu i tng Trong quan h tha k, i khi c s chuyn i vai tr ca cc lp cha v con. Ta c th gn tham chiu mt i tng ca lp con cho mt i tng ca lp cha. Trng hp ngc li l khng th. y chnh l th hin tnh a hnh ca i tng. Mt i tng ca lp cha c th c gn tham chiu ti bt k lp con no dn xut t n nhng khng p kiu sang lp con c. Ngc li, i tng lp con khng th c gn tham chiu ti mt i tng lp cha nhng c th chuyn kiu sang lp cha. V d: Employee me = new Employee("Nguyen Anh Minh", 50000, 2000, 10, 1); Employee you = new Employee("Nguyen Anh Tai", 52000, 2000, 10, 1); Manager boss = new Manager ("Nguyen Tan Minh", 80000, 1987, 12, 15); boss.setTienThuong(5000); Manager boss1 = new Manager ("Nguyen Tan Phat", 81000, 1987, 12, 15); boss1.setTienThuong(15000); boss = me; // khng gn tham chiu c me=boss1; //OK. hoc: you = (Employee)boss; // Chuyn kiu OK boss1 = (Manager) me; // Cha khng chuyn kiu sang con c Thm ch mt mng cc i tng Employee c th c gn cho mt mng cc i tng Manager m khng cn chuyn kiu: Manager[] managers = new Manager[10]; Employee[] staff = managers; // OK Tuy vy, s chuyn i ny ch din ra trong thi gian chy chng trnh. Nu khi lp trnh ta vit: you = boss; // OK you.setTienThuong(2000);// Khng c L do l vic chuyn kiu ch xy ra lc chng trnh chy nn khi bin dch you vn l mt i tng Employee, n khng c phng thc setTienLuong(). VII.2 S rng buc ng Dynamic Binding Xt v d sau: // Khai bo mt i tng Manager Manager boss = new Manager("Phan Thanh Ha", 80000, 1987, 12, 15); boss.setTienThuong(5000);

57

// Khai bo mt mng 3 i tng Employee Employee[] staff = new Employee[3]; // Gn boss cho i tng th 0 staff[0] = boss; // Khi to cho 2 i tng cn li staff[1] = new Employee("Nguyen Hai Nam", 50000, 1989, 10, 1); staff[2] = new Employee("Pham Quyet Tan", 40000, 1990, 3, 15); // Dng vng lp in ra tn v lng tng ngi for (Employee e : staff) System.out.println(e.getHoVaTen() + " " + e.getLuong()); Kt qu in ra l: Phan Thanh Ha 85000.0 Nguyen Hai Nam 50000.0 Pham Quyet Tan 40000.0 y chng ta thy i tng th 1 v 2 in ra cc gi tr vn c ca n theo phng thc getLuong() ca Employee. Tuy nhin i tng th 0 gi phng thc getLuong() ca Manager. Mt khc, nu vit: staff[0].setTienThuong(2000); th khng c php khi bin dch. Ta gi vic getLuong() ca Manager c gi trong tnh hung ny l s rng buc mun hay rng buc ng (Dynamic Binding). c trng th hin tnh a hnh trong Java. kt thc phn ny ta s xem xt c ch ca vic gi phng thc ca mt i tng trong Java c thc hin nh th no: 1. Trnh bin dch kim tra kiu ca i tng v tn ca phng thc, gi s l x.f(param). Trong x c khai bo l i tng ca lp C. Trong lp C c th c nhiu phng thc c cng tn f nhng khc nhau tham s, v d f(int) v f(String). Trnh bin dch s lit k tt c cc phng thc tn f trong lp C v phng thc tn f c mc truy cp public trong cc lp cha ca C. 2. Tip theo, trnh bin dch s xc nh kiu ca tham s ca phng thc c gi. Nu trong danh sch phng thc c tn f ch c 1 phng thc c kiu tham s ph hp th phng thc ny c gi. V d cu lnh l x.f(Chao ban) th hm f(String) c gi ch khng phi f(int). C ch ny gi l np chng (overloading). Nu trnh bin dch khng th tm thy phng thc c tham s ph hp hoc c nhiu hn 1 phng thc ph hp, n s a ra thng bo li. By gi, trnh bin dch bit r phng thc no c gi (tn v danh sch tham s). 3. Nu phng thc l private, static v final hoc l mt constructor, trnh bin dch s bit chnh xc phng thc cn phi gi l phng thc f ca lp C. iu ny gi l rng buc tnh (static binding). Ngc li, phng thc c gi ty theo kiu hin ti ca i tng, gi s kiu hin ti ca x l D, mt lp dn xut t C (Ban u x l mt i tng lp C nhng sau c gn tham chiu ti mt i tng ca D). Nu D c nh ngha mt phng thc f(String) th phng thc ny s c gi. Nu lp D khng c, n s tm ln cc lp cha ca D (trong c lp C). C ch ny gi l rng buc ng.

VIII. Lp Object
Lp Object l lp cha ca mi lp trong Java. Tuy nhin chng ta khng bao gi phi khai bo: class Employee extends Object

58

Mi lp u l hu du ca Object, do , i tng thuc lp Object c th c tham chiu ti bt k i tng no khc. Object obj = new Employee("AAA", 35000); Employee[] staff = new Employee[10]; obj = staff; // OK obj = new int[10]; // OK

IX. Giao din


IX.1 Cu trc ca giao din Trong Java khng h tr tnh a tha k. Tuy nhin, Java h tr mt k thut thay th v rt linh hot, l cc interface hay cn gi l cc giao din. Giao din khng phi l mt class nhng n ch ra cc phng thc s c nh ngha trong cc lp ci t n. Cc lp c s dng ti cc phng thc ny phi khai bo ci t giao din bng t kha implement. Cu trc ca mt giao din rt n gin: public interface <tn giao din> { //Danh sch cc phng thc } Ti lp c ci t giao din: public class <tn lp> implements <tn giao din> { //Phn thn lp c cha nh ngha phng thc ca giao din } V d: Trong lp Arrays ca Java c phng thc sort dng sp xp cc i tng trong mt mng. Tuy nhin, mun sp xp c th trong nh ngha lp ca cc i tng ny phi c ci t mt phng thc so snh compareTo(Object objKhac). M rng hn, tt c cc lp mun s dng phng thc sort ca Array u phi ci t phng thc ny trong nh ngha ca n. iu ny dn n vic thit k mt giao din: public interface Comparable { int compareTo(Object objKhac); } Phng thc compareTo nhn mt i tng khc lm tham s v l i tng em ra so snh, kt qu so snh biu hin qua mt s nguyn. T phin bn Java 5.0 (1.5), cc giao din c th c xc nh cho mt kiu tng qut: public interface Comparable<T> { int compareTo(T objKhac); } V d cc lp mun ci t giao din Comparable<Employee> phi ci t phng thc: int compareTo(Employee objKhac); Tt c cc phng thc khai bo trong interface mc nh l public nn ta khng cn khai bo public cho n. By gi chng ta nh ngha: 59

x.compareTo(y) <0 nu x < y x.compareTo(y) =0 nu x = y x.compareTo(y) >0 nu x > y Trong interface ta ang xem xt th n ch c mt phng thc. Cc interface thng c nhiu phng thc, cc hng s. Tuy nhin trong interface ta khng th khai bo cc bin thnh phn v khng th ci t ni dung ca cc phng thc. Cc interface c th xem nh cc lp tru tng khng c thuc tnh thnh phn tuy rng chng c nhiu im khc bit. Trong phn sau y chng ta s ci t mt phng thc compareTo cho vic so snh cc i tng Employee. Khai bo ci t Comparable cho Employee: class Employee implements Comparable Gi s cc Employee c so snh thng qua tiu ch Luong, ta ci t compareTo nh sau: public int compareTo(Object objKhac) { Employee other = (Employee) objKhac; // Chuyn kiu if (Luong < other.Luong) return -1; if (Luong > other.Luong) return 1; return 0; } Ch rng cc phng thc trong interface khng khai bo public nhng khi ci t chng, nht nh ta phi c khai bo public. i vi phin bn Java 5.0, ta c th ci t: class Employee implements Comparable<Employee> { public int compareTo(Employee objKhac) { if (Luong < objKhac.Luong) return -1; if (Luong > objKhac.Luong) return 1; return 0; } ... } i vi lp Manager th sao. R rng l mt i tng Manager vn c th c so snh vi mt i tng Employee v tin lng. Tuy nhin nu ta cng khai bo chng mt phng thc compareTo() th khng c do vi phm quy tc chuyn kiu: class Manager extends Employee { public int compareTo(Employee objKhac) { Manager otherManager = (Manager) objKhac; // khng c ... } ... } May mn l ta khng cn lm iu ny v tnh k tha m bo Manager ci t Comparable<Employee> ch khng phi Comparable<Manager>. Khi a mt i tng 60

Manager vo lm tham s so snh, n t ng c p sang kiu Employee. Vic so snh v th din ra thoi mi gia cc i tng Employee v Manager vi nhau. IX.2 Cc tnh cht ca giao din Khi s dng interface ta cn ch my im sau: Giao din khng phi l class nn khng dng t kha new to mt i tng kiu giao din: x = new Comparable(. . .); // Li C th khai bo mt bin interface. Comparable x; // OK Bin interface phi tham chiu ti mt i tng ca mt lp c ci t interface . x = new Employee(. . .); // OK C th dng ton t instanceof kim tra xem mt i tng c c ci t interface hay khng: if (anObject instanceof Comparable) { . . . } Cc interface cng c th c k tha. C th khai bo cc hng s trong interface. public interface Comparable<Employee> { double greater = 1; int compareTo(Employee other); } Trong interface, khai bo double greater =1 c t ng hiu l: public static final double greater =1; Cc lp c ci t interface cng t ng c tha k cc hng s ny. Mt lp ch c th k tha t mt lp khc trong khi c th ci t nhiu giao din.

X. Package
X.1 S dng cc package trong th vin Java s dng cc class nm trong mt gi th vin ca Java m khng cn vit ng dn y ca gi, ta khai bo nhp th vin: import java.util.*; V tr ca du * c th l tn mt class c th. Du * i din cho tt c class. Trong mt s trng hp, s dng du * c th gy ra li. V d: import java.util.*; import java.sql.*; Trong c hai gi ny u c lp Date nn trong dng lnh: Date myDate = new Date(); Th trnh bin dch bo li v khng bit Date ca gi no. Khi ny ta phi khai bo r rng cho Date gi no: import java.util.Date; import java.sql.*; Nu mun s dng c hai Date trong chng trnh ta phi khai bo trc tip: java.util.Date deadline = new java.util.Date(); java.sql.Date today = new java.sql.Date(...); 61

Ta cng c th c mt khai bo nhp th vin vi t kha static: import static java.lang.System.*; Khi cc phng thc v thuc tnh tnh ca lp System c truy cp m khng cn c tn lp: out.print(Khong co ten lop System); Ta thng dng phng php ny vi cc hm ca class Math: sqrt(pow(x, 2) + pow(y, 2)). X.2 t lp vo package t mt lp vo mt package, ta phi c khai bo package dng u tin ca chng trnh: package com.myproject.employeee; public class Employee { ... } Nu khng c khai bo , lp t ng thuc vo mt package mc nh khng c tn. Cc lp trong gi s t ng thuc vo mt ng dn y theo tn ca package. Trong v d trn Employee.class s nm trong th mc: com\myproject\employee tnh t th mc hin thi. Do , khi bin dch hoc chy chng trnh t ca s dng lnh CommandLine, ta phi c ng dn y : Javac com\myproject\employee\Employee.java

Bi tp
1. Thc hnh ci t cc v d trong ti trn. 2. Xy dng cc class trong java ci t cc lp i tng: Khch hng, sn phm, ha n, gi hng trong mt h thng qun l bn hng siu th. 3. Trong h thng ha: a. Hy xy dng cc class im, on thng, hnh vung, a gic, t gic, hnh ch nht, tam gic, hnh thoi. b. Hy cho bit mt th t phn cp k tha ca cc lp ny. c. Hy ci t mt phng thc toString() cho cc lp trn theo k thut rng buc ng. Phng thc toString() in ra mn hnh gi tr tt c cc thuc tnh ca mt i tng. 4. Xy dng mt lp PhuongTrinhBac1 gii phng trnh bc 1. 5. Xy dng mt lp i tng phng trnh bc 2 sao cho ta c th khi to mt phng trnh bc 2 v bit ngay cc tnh trng ca n nh c nghim hay khng v gi tr nghim. 6. Xy dng mt giao din GiaiPhuongTrinh dng cho vic gii cc phng trnh bc 1 v bc 2 sau xy dng li cc lp PhuongTrinhBac1, PhuongTrinhBac2 c ci t giao din ny. 7. Xy dng mt lp i tng ci t cho lp i tng lp hc bao gm cc thuc tnh nh: S s, Tn lp, Kha hc, danh sch lp v cc phng thc nh: Thm sinh vin, Xa Sinh vin, Sp xp danh sch, Xem danh sch, thng k hc tp, thng k gii tnh. Trong cc thnh vin ca lp l cc i tng Sinh vin c cc thuc tnh nh H v tn, Tui, Gii tnh, im tng kt v cc phng thc ph hp (sinh vin t xc nh xem cn nhng phng thc g). Cc i tng sinh vin c so snh theo tiu ch im tng kt.

62

ti 4. Lp v phng thc tru tng


I. Khi nim lp tru tng
Nhng khi nim tru tng trong th gii thc c ci t trong chng trnh nh l cc lp tru tng. Chng thng lm c s gip ta c c cc nh ngha c th hn: V d: Cc con tru l ng vt bn chn c nui phc v cy ba. Cc con h l ng vt bn chn sng trong cc khu rng. Cc con mo l ng vt bn chn hay bt chut. . Trong cc nh ngha trn, mt khi nim chung cn c lm r l ng vt bn chn. cho cc nh ngha ny thm sng t, ta cn mt nh ngha v ng vt bn chn ng vt bn chn l ng vt c bn chn di chuyn. n y ta li bt gp mt khi nim tru tng hn l ng vt v.vv c rt nhiu khi nim dng n khi nim ny nh ng vt n c, ng vt n tht, ng vt b st,. Trong lp trnh cng vy, nhng lp i tng sinh ra ch cho cc lp khc k tha gi l cc lp tru tng. Chng thc s khng c mt biu hin no (hoc nu ta bt buc chng c biu hin th biu hin cng khng c ngha trong phm vi ang xt).

II. Ci t lp v phng thc tru tng trong Java


Khai bo: Lp tru tng c khai bo nh lp thng thng nhng c thm t kha abstract. V d: abstract class People { private int NamSinh; private String HoTen; public People(int ns, String ht) { NamSinh= ns; HoTen = ht; } public String getHoTen() { return HoTen; } abstract String toString(); } Ta thy rng mt lp tru tng thc s l mt lp vi y cc thnh phn, khng ging nh interface. Gi s trong chng trnh c cc i tng SinhVien, GiaoVien. Cc i tng ny u c mt phng thc toString tr v mt chui bao gm ton b thng tin v chng. y l tnh hung s dng phng thc tru tng mt cch hiu qu. abstract String toString(); Ch l cc phng thc tru tng khng c phn thn. Lp SinhVien k tha t People c ci t nh sau:

63

public class SinhVien extends People { private String Lop; private double DiemTongKet; // Phng thc khi to public SinhVien(int ns,String ht,String l,double dtk) { //Dng phng thc khi to ca lp cha super(ns,ht); Lop = l; DiemTongKet=dtk; } // Ci t phng thc toString public String toString() { return String.valueOf(NamSinh) + String.valueOf(DiemTongKet) + HoTen; } } Khi mt phng thc c khai bo l abstract th lp cha n cng phi l mt lp abstract. Khi s dng phng thc abstract cho mt lp th nht thit phi c mt lp khc k tha v khai bo ci t chng th mi c tc dng. Khi k tha mt lp c cha phng thc tru tng th phng thc bt buc phi c ci t.

Bi tp
1. Trong h thng qun l bnh nhn bnh vin c 2 loi bnh nhn l ni tr v ngoi tr trong bnh nhn ni tr c tnh tin ging nm. Xy dng mt lp BenhNhan tru tng c cc thuc tnh nh h v tn, tin iu tr, c phng thc tnh tin phi thanh ton bng tin iu tr cng vi tin ging nm. Sau xy dng hai lp BenhNhanNoiTru v BenhNhanNgoaiTru k tha lp BenhNhan. (Gi : Phng thc TinhTien lp BenhNhan khai bo tru tng sau c khai bo chng ti cc lp tha k). 3. Mt nh my sa cha phng tin vn chuyn c cc loi xe t thuc nhiu hng khc nhau nh Honda, Toyota, Mishubishi, Mercedec, Ford, Kia. Mi hng t li c nhiu kiu khc nhau nh 2 ch, 4 ch, 7 ch, 12 ch v 24 ch. Ngoi ra, nh my cn nhn bo dng cho cc loi xe m t tay ga v xe s. Nh my c cc ch khuyn mi v bo hnh khc nhau ty theo xe ca tng hng. a. Hy xy dng mt lp PHUONG_TIEN tru tng c phng thc tru tng l Xac_Dinh_Gia() trong vic tnh gi sa cho mt phng tin bng gi ca nh my tr i tin khuyn mi. b. Hy xy dng mt giao din trong c phng thc so snh phng tin theo tiu ch gi sa. c. Xy dng chng trnh nhp vo d liu cho 5 chic xe c t v m t v in ra mn hnh theo th t tng dn ca gi sa.

64

ti 5. Lu tr v x l i tng
Trong phn ny chng ta s cp ti cc lp tin ch ca Java trong gi java.util dng cho vic lu tr v x l cc i tng.

I. Lp Vector v giao din Enumeration


I.1 Lp Vector Lp trnh vin dng lp Vector lu tr cc i tng c kiu ging nhau nhng c th thay i ng v kch thc ty theo nhu cu. Chng ta s xem xt vic s dng interface Enumeration cho php duyt lp trn cc cu trc nh Vector. Kch thc ca Vector c tng theo mt lng t trc hoc c t ng tng gp i khi ta cn tng dung lng ca n. V vy thao tc chn mt phn t mi vo mt Vector s nhanh hn khi kch thc ca n cn dng. Vector lu tr tham chiu ca cc i tng nn chng trnh c th dng Vector lu tham chiu n bt k i tng no. lu cc gi tr d liu nguyn thy, ta phi s dng cc lp trong java.lang nh Integer, Long hay Float thay v dng chnh kiu . Sau y l mt v d nhp vo 10 s nguyn, lu vo mt Vector ri in ra kim tra: // Nhp 10 doi tuong so nguyen 1. java.util.Vector v = new java.util.Vector(5,2); 2. for (int i=0;i<10;i++) 3. { 4. System.out.print("Nhap so nguyen thu " + String.valueOf(i) + ":"); 5. java.lang.Integer p = new java.lang.Integer(nhap.nextInt()); 6. v.addElement(p); 7. } 8. // In ra de kiem tra 9. for (int i=0;i<10;i++) 10. { 11. System.out.print("So nguyen thu " + String.valueOf(i) + " la:"); 12. System.out.println(v.get(i)); 13. } 14. System.out.println(v.size()); 15. System.out.println(v.capacity()); Dng 1: Khai bo mt i tng v thuc lp Vector. y ta dng mt constructor vi 2 tham s l s phn t ban u v s s tng khi Vector c nhu cu tng (mc nh s gp i s hin c). Lp Vector c 3 constructor: Nu dng constructor khng tham s th Java t ng cp cho ta s phn t ban u l 10 v nhn i mi khi c nhu cu m rng. Nu l 1 tham s th l s phn t ban u, khi cn cng t ng nhn i. Nu l 2 tham s th tham s th nht ch s phn t ban u, tham s th 2 ch s phn t c thm vo mi khi dung lng ca Vector b ht. Dng 2-7: Vng lp nhp v lu kt qu nhp vo Vector. y ta phi khai bo mt bin i tng kiu Integer ch khng phi l mt kiu nguyn thy int. Sau dng phng thc addElement() thm i tng ny vo v tr cui ca Vector. 65

Ngoi ra ta cng c th s dng insertElementAt() chn phn t vo mt v tr xc nh hoc s dng setElementAt() t gi tr cho mt phn t ti mt v tr. S dng removeElement(Object) xa mt phn t xut hin u tin trong Vector c gi tr bng vi Object. Dng 12: Dng phng thc get(ch s) in ra gi tr ca phn t c ch s tng ng. Thc ra th phng thc get(ch s) cho ta mt tham chiu n i tng c ch s tng ng c lu trong Vector nhng y i tng s nguyn t ng in ra gi tr. Dng 14: Phng thc tr v kch thc thc t ca Vector, tc l s phn t thc s Vector lu tr (=10) . Dng 15: Kch s lng cc phn t ti a hin c ca Vector (=11). Mt s phng thc ca Vector: removeElementAt: Xa mt phn t mt v tr xc nh. removeAllElements(): Xa tt c cc phn t. firstElement(): Tr v tham chiu ti phn t u tin. lastElement(): Tr v tham chiu ti phn t cui cng trong Vector. isEmpty(): Xc nh liu Vector l trng. contains(key): kim tra xem trong vector c phn t so khp vi key hay khng. i tng key v cc phn t ca Vector c so snh vi nhau bi phng thc equals(). Cc lp thng khai bo chng phng thc equals() dng trong vic so snh cc i tng ca mnh. indexOf(Object): Tr v ch s ca i tng u tin so khp vi Object. trimToSize(): Gim s lng phn t ca Vector. I.2 Giao din Enumeration S dng phng thc elements() ca mt i tng Vector s tr v mt i tng Enumeration cho php chng trnh duyt lp trn danh sch phn t ca Vector. i tng Enumeration c cc phng thc quan trng sau: hasMoreElement(): Tr v true nu vn cn phn t trong Vector. nextElement(): Tr v tham chiu ti phn t tip theo trong Vector. on chng trnh sau duyt v in ra danh sch cc sinh vin: abstract class People { protected int NamSinh;//Nam Sinh protected String HoVaTen; //Ho Va Ten //constructor public People(int ns,String ht) { NamSinh=ns; HoVaTen=ht; } // Phuong thuc tinh tuoi protected abstract int TinhTuoi(); public abstract String toString(); } // Ke thua lop People public class SinhVien extends People {

66

private String Lop;// Ten lop private double DiemTongKet; // Diem tong ket public final String mauda ="vang";//Hang so private int ID;// Ma so SinhVien protected static int MaSo;// ma so chung de cap phat cho moi sinh vien // constructor public SinhVien(int ns,String ht,String l,double dtk) { super(ns,ht);//goi constructor cua lop cha la People Lop = l; DiemTongKet=dtk; // Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop ID=MaSo; // Tang ma so len 1 den gan cho SinhVien sau MaSo+=1; } // Phuong thuc tinh tuoi protected int TinhTuoi() { java.util.Date homnay = new java.util.Date(); return (homnay.getYear() - NamSinh +1); } // Khai bao chong phuong thuc toString() public String toString() { return "Ma so:" + String.valueOf(ID)+ "\n" +"Tuoi:"+ String.valueOf(this.TinhTuoi()) + "\n" +"Diem Tong Ket:"+ String.valueOf(DiemTongKet)+"\n" +"Ho va ten:"+ HoVaTen; } // Ham main public static void main(String[] argv) { // Dat gia tr? bien static, sinh vien dau tien co ma so 1 SinhVien.MaSo=1; // bien doi tuong Vector java.util.Vector sv = new java.util.Vector(5); SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5); sv.addElement(k1); // Them sinh vien vao Vector SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6); sv.addElement(k2); SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7); sv.addElement(k3); SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8); sv.addElement(k4); SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9); sv.addElement(k5); 67

// Dung interface Enumeration de duyet cac phan tu cua Vector java.util.Enumeration enu = sv.elements(); while (enu.hasMoreElements()) { // Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc SinhVien g = (SinhVien)enu.nextElement(); System.out.println(g.toString()); } //People p = new People(20,"Pham Anh Hoa"); bao loi vi People l lp tru tng } } Kt qu thc hin nh sau:

II. Mng trong Java v lp ArrayList


II.1 Mng trong Java Trong phn Ngn ng Java cn bn ta xem xt mt bin mng c khai bo v s dng nh th no. Trong phn ny ta s i su khai thc cc c tnh ca mng v mt s thut ton thng dng thng qua cc v d. V d: m tn sut ca cc phn t ca mt mng: import javax.swing.*; public class StudentPoll { // Hm main public static void main( String args[] )

68

{ // Khai bo mt mng cc cu tr li int TraLoi[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 }; // Mng m tn sut int TanSuat[] = new int[ 11 ]; // Vi mi phn t ca mang TraLoi, s dng gi tr nh l ch s ca mng TanSuat // sau m s xut hin ca n trong TraLoi, lu gi tr vo mng TanSuat ti v tr // tng ng. for ( int answer = 0; answer < TraLoi.length; answer++ ) ++frequency[ TraLoi[ answer ] ]; // a kt qu vo mt chui String output; for ( int rating = 1; rating < TanSuat.length; rating++ ) output += rating + "\t" + TanSuat[ rating ] + "\n"; // In ra System.out.print(output); }} Trong v d ny, cc cu tr li nm trong khong t 1 n 10 nn khai bo mt mng 11 phn t c th s dng chnh gi tr 10 lm ch s ca mng. Ch cn duyt mng TraLoi 1 ln ta c ngay kt qu. II.2. Cc thut ton c bn trn mng V d: Sp xp tuyn tnh. y l mt v d sp xp cc phn t ca mng tng dn theo thut ton ni bt - tc l sau mi vng lp duyt, phn t no ln nht s b y xung cui cng. // Sp xp cc phn t ca mng public void bubbleSort( int array2[] ) { // Duyt qua mi phn t ca mng for ( int pass = 1; pass < array2.length; pass++ ) { // Vng lp so snh v i ch for ( int element = 0; element < array2.length - pass; element++ ) { // So snh 2 phn t lin k v i ch nu cn if ( array2[ element ] > array2[ element + 1 ] ) swap( array2, element, element + 1 ); }} } // Hm i ch 2 phn t ca mt mng public void swap( int array3[], int first, int second ) { int hold; // Bin trung gian hon i hold = array3[ first ]; array3[ first ] = array3[ second ]; array3[ second ] = hold;

69

} V d: Tm kim nh phn trn mng c sp xp: Thng thng vic tm kim din ra bng php duyt ln lt cc phn t ca mng. Ta gi phng php ny l tm kim tuyn tnh. i vi cc mng c sp xp, ta c mt phng php tm kim hiu qu hn, gi l tm kim nh phn. Gi s ta c mt mng: int[] b={1,5,7,8,34,56,67,89,100}; c sp xp tng dn. Gi s ta cn tm v tr ca mt phn t c gi tr 7. Trc tin, ta so snh 7 vi v tr ng gia ca mng l 34 th 7 < 34 nn ta chc chn nu c th 7 s nm na trc ca mng. Tip tc lm vic ny vi na trc ca mng, so snh 7 vi 5 th 7>5 nn phn t cn tm nu c s nm phn sau ca na ny gm 2 phn t 7,8. Ln phn i cui cng ny cho ta kt qu. Th tc ny c ci t nh sau: public int binarySearch( int array2[], int key ) { int low = 0; // Ch s di int high = array.length - 1; // Ch s trn int middle; // ch s ca phn t trung gian // Lp cho n khi ch s di ln hn hoc bng ch s trn while ( low <= high ) { // Xc nh ch s phn t gia middle = ( low + high ) / 2; // Nu kha cn tm trng vi phn t gia th tr v kt qu ngay if ( key == array[ middle ] ) return middle; // Nu kha nh hn phn t gia, t li ch s trn else if ( key < array[ middle ] ) high = middle - 1; // Kha ln hn phn t gia, t li ch s di else low = middle + 1; } return -1; // Khng tm thy }

II.3 Class Arrays Java h tr mt lp mng trong th vin java.util.Arrays lp trnh vin thao tc trn mng. Ch yu cc phng thc ca lp ny l static. Thay v phi lp trnh, Arrays h tr cc phng thc: fill: np gi tr cho mng. sort: sp xp mng.

70

binarySearch: Tm kim nh phn trn mng c sp. equals: So snh mng. Sau y l v d v s dng lp Arrays: import java.util.*; public class UsingArrays { private int intValues[] = { 1, 2, 3, 4, 5, 6 }; private double doubleValues[] = { 8.4, 9.3, 0.2, 7.9, 3.4 }; private int filledInt[], intValuesCopy[]; // Khi to cc mng public UsingArrays() { filledInt = new int[ 10 ]; intValuesCopy = new int[ intValues.length ]; Arrays.fill( filledInt, 7 ); // Np gi tr cho mng filledInt vi gi tr 7 Arrays.sort( doubleValues ); // Sp xp mng doubleValues System.arraycopy( intValues, 0, intValuesCopy, 0, intValues.length ); // Sao chp mng } // In gi tr ca cc mng public void printArrays() { System.out.print( "doubleValues: " ); for ( int count = 0; count < doubleValues.length; count++ ) System.out.print( doubleValues[ count ] + " " ); System.out.print( "\nintValues: " ); for ( int count = 0; count < intValues.length; count++ ) System.out.print( intValues[ count ] + " " ); System.out.print( "\nfilledInt: " ); for ( int count = 0; count < filledInt.length; count++ ) System.out.print( filledInt[ count ] + " " ); System.out.print( "\nintValuesCopy: " ); for ( int count = 0; count < intValuesCopy.length; count++ ) System.out.print( intValuesCopy[ count ] + " " ); System.out.println(); } // Tm mt gi tr trong mng intValues

71

public int searchForInt( int value ) { return Arrays.binarySearch( intValues, value ); } // So snh ni dung mng public void printEquality() { boolean b = Arrays.equals( intValues, intValuesCopy ); System.out.println( "intValues " + ( b ? "==" : "!=" ) + " intValuesCopy" ); b = Arrays.equals( intValues, filledInt ); System.out.println( "intValues " + ( b ? "==" : "!=" ) + " filledInt" ); } // Hm main public static void main( String args[] ) { UsingArrays usingArrays = new UsingArrays(); usingArrays.printArrays(); usingArrays.printEquality(); int location = usingArrays.searchForInt( 5 ); System.out.println( ( location >= 0 ? "Tm thy 5 ti v tr " + location : "Khng thy" ) + " trong mng intValues" ); location = usingArrays.searchForInt( 8763 ); System.out.println( ( location >= 0 ? "Tm thy 8763 ti " + location : "Khng thy 8763" ) + " trong mng intValues" ); }}

III Danh sch trong java v giao din Lists


Lists l mt chui c th t cc phn t cho php cc phn t c th ging nhau. Lists l mt giao din k tha giao din Collections nn n cho php lp trnh vin truy cp cc phn t qua ch s. Cc lp tp hp ci t Lists l ArrayList, LinkedList v Vector. ArrayList l mt lp tp hp c th thay i kch thc. V c bn th ArrayList ging vi Vector chng ta xem xt trn. Sau y l chng trnh v d s dng ArrayList. y ta t cc i tng String v Color vo cng mt ArrayList sau xa i cc phn t String s dng mt i tng Iterator. import java.awt.Color; import java.util.*; public class CollectionTest { private String colors[] = { "red", "white", "blue" }; // To mt ArrayList, thm cc phn t cho n public CollectionTest() { ArrayList list = new ArrayList(); // Thm i tng cho n list.add( Color.magenta ); // Thm mt i tng Color

72

// Thm cc i tng String for ( int count = 0; count < colors.length; count++ ) list.add( colors[ count ] ); list.add( Color.cyan ); // Thm mt i tng Color // In ra ni dung System.out.println( "\nArrayList: " ); for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); // Xa tt ccc i tng String removeStrings( list ); // output list contents System.out.println( "\n\nArrayList sau khi gi removeStrings: " ); for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); } public void removeStrings( Collection collection ) { // Khai bo i tng iterator iterator iterator = collection.iterator(); // Lp trong khi tp hp vn cn phn t while ( iterator.hasNext() ) if ( iterator.next() instanceof String ) iterator.remove(); // Xa phn t } // Hm main public static void main( String args[] ) { new CollectionTest(); } }

Bi tp
1. Vit chng trnh qun l danh sch mt lp hc vi cc chc nng - Tm kim sinh vin - Thm sinh vin. - Xa sinh vin - Sp xp danh sch theo tn 2. Vit chng trnh nhp vo n s nguyn v s thc, n nhp t bn phm. Sau : - Tnh tng ca n s ny. - Sp xp n s theo th t tng dn - Nhp vo t bn phm 1 s khc v tm xem s c trong s n s va nhp khng.

73

ti 6. Cc lung vo ra d liu vi file


Mt kh nng quan trng m cc ngn ng lp trnh phi c l vic qun l cc lung d liu vo ra h thng my tnh gip cc chng trnh c th giao tip d liu vi th gii bn ngoi.

I. Khi nim lung vo ra (I/O stream)


Lung l dng chy ca d liu. C 2 loi lung: Lung nhp (input stream): l tt c g t th gii bn ngoi c a vo my tnh, nh c t bn phm, c t tp tin... Lung xut (output stream): l tt c nhng g c gi t my tnh ra ngoi thng qua cc thit b ngoi vi, nh mn hnh, my in, tp tin, ... i vi mi lung li c cc dng bao gm: Lp System.out: Dng xut chun dng hin th kt qu trn mn hnh. Lp System.in: Dng nhp chun thng n t bn phm v c dng c cc k t d liu. Lp System.err: y l dng li chun cho php mt chng trnh a ra cc thng bo li trn mn hnh. Cc dng ny c th b i hng n nhiu ngun khc nhau. V d System.err c th a thng bo li ra mt file. Khi cn lm vic vi lung, ta khai bo khi th vin: import java.io.*; Th vin ny cho php ta lm vic vi cc lung nhp xut qua vic cung cp cc lp: FileInputStrem, FileOutputStream, FileReader, FileWriter v rt nhiu lp khc. S phn cp cc class trong gi java.io th hin qua bng sau: java.lang.Object File FileDescriptor InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream PushbackInputStream ObjectInputStream PipedInputStream SequenceInputStream OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream 74

ObjectOutputStream PipedOutputStream RandomAccessFile Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushbackReader InputStreamReader FileReader PipedReader StringReader Writer BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter PipedWriter PrintWriter StringWriter Sau y chng ta xem xt cc class quan trng thng c s dng:

II. Lp InputStream:
L mt lp tru tng nh ngha cch thc nhn d liu. C cc phng thc chnh sau: read(): c cc byte d liu t mt dng. Nu nh khng c byte d liu no, n phi ch. Khi mt phng thc phi ch, cc lung ang thc hin phi tm dng cho n khi c d liu. read(byte[]): Tr v s byte c c hay -1 nu nh c n cui dng. N gy ra ngoi l IOException nu c li xy ra. read(byte[],int,int): N cng c vo mt mng byte. N tr v s byte thc s c c cho n khi kt thc dng. N gy ra ngoi l IOException nu li xy ra. available(): Phng php ny tr v s lng byte c th c c m khng phi ch. N tr v s byte hin ti c trong dng. N khng phi l phng thc tin cy thc hin tin trnh x l u vo. close(): Phng thc ny ng dng. N dng gii phng mi ti nguyn dng s dng. Lun lun ng dng chc chn rng dng x l c kt thc. N gy ra ngoi l IOException nu li xy ra. mark(): nh du v tr hin ti ca dng. markSupported(): Tr v gi tr boolean ch ra rng dng c h tr cc kh nng mark v reset hay khng. N tr v true nu dng h tr ngc li tr v false. reset(): Phng thc ny nh v li dng theo v tr c nh ln cui cng. N gy ra ngoi l IOException nu li xy ra. 75

skip(): Phng thc ny b qua n byte dng vo. -n ch nh s byte c b qua. N gy ra ngoi l IOException nu li xy ra. Phng thc ny s dng di chuyn ti v tr c bit bn trong dng vo.

III. Lp OutputStream
L lp tru tng nh ngha cch ghi cc kt xut n dng. N cung cp mt tp cc phng thc tr gip to ra, ghi v x l kt xut cc dng. Cc phng thc bao gm: write(int): Phng thc ny ghi mt byte. write(byte[]): Phng thc ny phong to cho n khi mt byte c ghi. Dng phi ch cho n khi tc v ghi hon tt. N gy ra ngoi l IOException nu li xy ra. write(byte[], int, int): Phng thc ny ghi mng cc byte. Lp OutputStream nh ngha ba dng khc nhau ca phng thc c th ghi mt byte ring l, mt mng cc byte, hay mt on ca mt mng byte. flush(): Phng thc ny x sch dng. m d liu c ghi ra dng. N kch hot IOException nu li xy ra. close(): Phng thc ng dng. N c dng gii phng mi ti nguyn gn vi dng. N kch hot IOException nu li xy ra.

IV. Lp FileInputStream
K tha t InputStream, lp ny cho php c vo t mt tp tin di dng mt stream. Cc i tng ca lp ny c to ra nh ng dn ti file, i tng File, hoc i tng FileDescriptor lm mt i s. Lp ny c 3 phng thc khi to sau: FileInputStream(String name): Tham s l tn ca tp tin to lung. FileInputStream(File f): Tham s l i tng file to lung. FileInputStream(FileDescriptor fdObj): Tham s l i tng FileDescriptor to lung. V d: InputStream in = new FileInputStream(C:\\LETI\\JAVA\\Account.txt);

V. Lp FileOutputStream
Lp ny cung cp kh nng ghi d liu xung tp tin, c dn xut t lp cha OutputStream. C 3 phng thc khi to: FileOutputStream(String name); FileOutputStream(File f); FileOutputStream(FileDescriptor fdObj)

VI. Lp File
Lp ny c s dng truy cp cc i tng tp tin v th mc. Cc tp tin t tn theo qui c t tn tp tin ca h iu hnh. Lp ny cung cp cc phng thc thit lp cc tp tin v cc th mc. Tt c cc thao tc th mc v tp tin c thc hin thng qua cc phng thc ca lp File. Nh vy, ta dng File trong tt c cc thao tc qun l file v th mc. C 3 cch to cc i tng t lp File: 76

File(String path); File(String path, String name); File(File dir, String name); V d:File f = new File("C:\jdk1.4\bin\hello.java"); hoc File f = new File("C:\jdk1.4\bin", "hello.java"); hoc File curDir = new File("."); File f = new File(curDir, "Hello.java"); Cc phng thc: public String getName(): ly tn i tng tp tin. public String gePath(): ly ng dn ca tp tin. public String getAbsolutePath(): ly ng dn tuyt i ca tp tin. public String getParent(): ly tn th mc cha. public Boolean createNewFile(): to mt tp tin mi. public void createTempFile(String pattern, File dir): to tp tin tm thi. public void deleteOnExit(): yu cu xo tp tin khi chng trnh chm dt. public boolean canWrite(): cho bit tin c cho php ghi hay khng (true nu c). public boolean canRead(): cho bit tp tin c php c hay khng (true nu c) public void setReadOnly(): t thuc tnh ch c. public boolean isFile(): cho bit tp tin c hp l hay khng (true nu c). public boolean isDirectory(): cho bit tp tin c phi th mc hay khng (true nu c). public boolean isHidden(): kim tra xem tp tin c n hay khng (true nu c). public long length(): cho bit kch thc tp tin (byte). public boolean mkdir(): to mt th mc t i tng file, true nu thnh cng. renameTo(File dest): i tn tp tin hin ti sang tn mi. public String[ ] list(): ly danh sch cc tp tin v th mc. public String[ ] list(FilenameFilter filter): ly danh sch tp tin tho mn iu kin lc, v d *.gif. public booean delete(): xo tp tin, true nu xo thnh cng. public String toString(): tr v ng dn ca tp tin. public String toURL(): tr v i tng URL tng ng vi tp tin. Chng trnh v d: public class Test { public static void main(String args[]) { File f = new File("test"); System.out.println(f.getAbsolutePath()); // Ly ng dn tuyt i System.out.println(f.exists()); // Kim tra s tn ti } }

77

VII. Nhp xut lc


L mt kiu dng c c t vic thay i cch x l dng hin c. Cc lp, cc dng nhp xut lc ca java s gip ta lc vo/ra theo mt s cch. B lc nm gia mt dng nhp v mt dng xut. N thc hin x l mt qu trnh no trn cc byte c truyn t u vo n u ra. Cc b lc c th ghp vi nhau khi u ra ca b lc ny tr thnh u vo ca b lc kia. VII.1 Lp FilterInputStream: y l lp tru tng. N l cha ca tt c cc lp dng nhp lc. Mt dng c th c c v a kt qu cho mt dng khc. Lp FilterInputStream c thit k sao cho c kh nng kt chui nhiu b lc. thc hin iu ny chng ta dng vi tng lng nhau. VII.2 Lp FilterOutputStream Lp ny l mt dng b tr cho lp FilterInputStream. N l lp cha ca tt c cc lp dng xut lc. D liu ghi vo lp ny c th sa i theo nhu cu thc hin tc v lc v sau c chuyn ti i tng OutputStream.

VIII. Vo/ra c s dng b m


Vng m l kho lu tr d liu. Chng ta c th ly d liu t vng m thay v quay tr li ngun ban u ca d liu. Java s dng c ch nhp/xut c lp vng m tm thi lp cache d liu vo/ra ca mt dng. N gip chng trnh c/ghi lng d liu nh khng nh hng ln n hiu nng chung ca h thng. VIII.1 Lp BufferedInputStream: Lp ny t ng to ra v duy tr vng m h tr thao tc vo. Nh chng trnh c th c d liu t dng tng byte mt m khng nh hng n tc thc hin ca h thng. VIII.2 Lp BufferedOutputStream Lp ny nh ngha hai phng thc thit lp, mt cho php ch nh kch c ca vng m xut, mt s dng kch c vng m ngm nh. Lp ny nh ngha chng tt c cc phng thc ca OutputStream v khng a thm bt k phng thc mi no. Chng trnh sau y c v ghi thng tin ca i tng SinhVien theo mt format, mi sinh vin nm trn mt dng trong file: // Ke thua lop People import java.io.*; import java.util.StringTokenizer; public class SinhVien extends People { private String Lop;// Ten lop private double DiemTongKet; // Diem tong ket public final String mauda ="vang";//Hang so private int ID;// Ma so SinhVien 78

protected static int MaSo;// ma so chung de cap phat cho moi sinh vien public SinhVien(int ns,String ht,String l,double dtk) { super(ns,ht);//goi constructor cua lop cha la People Lop = l; DiemTongKet=dtk; // Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop ID=MaSo; // Tang ma so len 1 den gan cho SinhVien sau MaSo+=1; } // Phuong thuc tinh tuoi protected int TinhTuoi() { java.util.Date homnay = new java.util.Date(); return (homnay.getYear() - NamSinh +1); } // Khai bao chong phuong thuc toString() public String toString() { return String.valueOf(ID)+ "|" + String.valueOf(this.TinhTuoi()) + "|" + String.valueOf(DiemTongKet)+"|" + HoVaTen; } // Ghi thng tin sinh vin vo file public void GhiData(PrintWriter out) throws IOException { out.println(this.toString()); } // c thng tin 1 sinh vin t b m c public void DocData(BufferedReader in) throws IOException { String s = in.readLine(); // c mt dng trong b m StringTokenizer t = new StringTokenizer(s, "|"); MaSo = Integer.parseInt(t.nextToken()); NamSinh = Integer.parseInt(t.nextToken()); DiemTongKet = Double.parseDouble(t.nextToken()); HoVaTen = t.nextToken(); } // Ham main public static void main(String[] argv) { // Dat gia tr bien static, sinh vien dau tien co ma so 1 SinhVien.MaSo=1; // bien doi tuong Vector lu cc sinh vin 79

java.util.Vector sv = new java.util.Vector(5); SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5); sv.addElement(k1); // Them sinh vien vao Vector SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6); sv.addElement(k2); SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7); sv.addElement(k3); SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8); sv.addElement(k4); SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9); sv.addElement(k5); // Dung interface Enumeration de duyet cac phan tu cua Vector java.util.Enumeration enu = sv.elements(); try { PrintWriter out = new PrintWriter(new FileWriter("C:\\LETI\\JAVA\\Sinhvien.dat")); while (enu.hasMoreElements()) { // Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc SinhVien g = (SinhVien)enu.nextElement(); g.GhiData(out); } out.close(); } catch(Exception ep) {} // Doc tu file ra SinhVien[] svs = new SinhVien[5]; try { BufferedReader in = new BufferedReader(new FileReader("C:\\LETI\\JAVA\\Sinhvien.dat")); for(int i=0;i<svs.length;i++) { svs[i] = new SinhVien(0,"","",0.0); svs[i].DocData(in); } } catch(IOException ep) {} for(int i=0;i<svs.length;i++) System.out.println(svs[i].toString()); }}

IX. Lp RandomAccessFile
Lp RandomAccessFile cung cp kh nng thc hin vo/ra theo mt v tr c th bn trong mt tp tin. Trong lp ny, d liu c th c hoc ghi v tr ngu nhin thay v lin tc.

80

Lp RandomAccessFile thc hin c hai vic nhp v xut. Do vy, c th thc hin I/O bng cc kiu d liu nguyn thu. Lp ny cng h tr cc quyn c bn v c hoc ghi tp tin, iu ny cho php c tp tin theo ch ch c hoc c-ghi. i tng thuc lp RandomAccessFile c th c khi to theo hai cch: RandomAccessFile(String name, String mode); RandomAccessFile(File f, String mode); Trong mode l ch m tp tin: mode = "r" - ch ch c. mode = "rw" - ch ghi v c. V d: RandomAccessFile file = new RandomAccessFile(C:\\LETI\\JAVA\\Account.txt, "r"); Lp ny h tr mt s phng thc mi khc vi phng thc tha k t cc lp DataInput v DataOutput. Cc phng thc mi thm vo bao gm: seek( ): Thit lp con tr tp tin ti v tr c th bn trong tp tin. getFilePointer( ): Tr v v tr hin hnh ca con tr tp tin. length( ): Tr v chiu di ca tp tin tnh theo byte.

X. i tng System.in
L mt i tng c bit c to ra t lp InputStream. N gip ta c cc k t c ngi dng g vo t bn phm, ta c th s dng phng thc read() hoc kt ni vi mt lung trung gian khc.

XI. Truy cp file ch tun t


Khi lm vic vi Java, tt c u l i tng. Trong cc ng dng qun l ta thng xuyn phi c v ghi d liu v cc i tng ln cng. Cc lp ObjectInputStream v ObjectOutputStream cho php chng ta c v ghi i tng vo file. cho php mt i tng ca mt lp c th s dng vi ObjectInputStrems v ObjectOutputStreams, lp phi khai bo ci t giao din Serializable. Giao din Serializable c bit n nh l mt giao din nh km bi v bn thn n khng cha bt k mt phng thc no. Mt class ci t giao din ny c gn mt thng bo rng i tng ca lp l mt i tng Serializable. iu ny rt quan trng bi v mt i tng ObjectOutputStream s khng xut mt i tng tr khi l mt i tng Serializable. Trong mt lp ci t Serializable, lp trnh vin phi m bo rng mi bin ca lp phi c kiu Serializable hoc phi khai bo mt bin l transient b qua trong qu trnh tun t ha. Mc nh th tt c cc kiu d liu nguyn thy u l tun t ha. Vi cc kiu khng nguyn thy, phi kim tra xem nh ngha ca lp (hoc lp cha) c ci t Serializable hay khng. Sau y l mt v d v xy dng mt lp i tng khch hng cho mt ng dng ngn hng sau ghi chng vo file: import java.io.Serializable; public class AccountRecord implements Serializable { private int account; private String firstName; private String lastName; private double balance; // Ch s nm gi hng ha v dch v ca khch hng, s d ti 81

khon public AccountRecord()// constructor khng tham s { this( 0, "", "", 0.0 ); } public AccountRecord( int acct, String first, String last, double bal ) // Constructor c tham s { setAccount( acct ); setFirstName( first ); setLastName( last ); setBalance( bal ); } public void setAccount( int acct ) // t s ti khon { account = acct; } public int getAccount()// Ly s ti khon { return account; } public void setFirstName( String first ) // t gi tr cho phn h m { firstName = first; } public String getFirstName()// Ly phn h m { return firstName; } public void setLastName( String last ) // t gi tr cho tn { lastName = last; } public String getLastName()// Ly tn { return lastName; } public void setBalance( double bal ) // t gi tr cho balance { balance = bal; } public double getBalance()// Ly s d { return balance; } }

82

Chng trnh sau y s ghi cc i tng vo file C:\LETI\JAVA\Account.txt import java.io.*; public class GhiFile { ObjectOutputStream output; public void openFile() { try { output = new ObjectOutputStream(new FileOutputStream( "C:\\LETI\\JAVA\\Account.txt") ); } catch ( IOException ioException ) { System.out.print("Loi mo file"); } } public void closeFile() // Phng thc ng file { try { output.close(); System.exit( 0 ); } // Nu c li ng file catch ( IOException ioException ) { System.exit( 1 ); } } public void addRecord(AccountRecord record) // Phng thc thm 1 bn ghi vo file { try { output.writeObject( record ); output.flush(); } catch(IOException ex) { System.out.print("Loi ghi file"); } } // Hm main public static void main(String[] argvs) { AccountRecord record1= new AccountRecord( 12345,"Nguyen Van ","Hai",5.12); AccountRecord record2= new AccountRecord( 12346,"Phan Tien ","Minh",-5.12); GhiFile g = new GhiFile(); g.openFile(); 83

g.addRecord(record1); g.addRecord(record2); g.closeFile(); }} Chng trnh sau y c ra 2 bn ghi va c ghi chng trnh trn v in ra mn hnh: import java.io.*; public class DocFile { java.io.ObjectInputStream input; public void openFile() // M file { try { input = new java.io.ObjectInputStream(new FileInputStream("C:\\LETI\\JAVA\\Account.txt")); } catch(IOException e) { System.out.print("Loi mo file"); } } public void closeFile() //ng file { try { input.close(); System.exit( 0 ); } catch ( IOException ioException ) { System.exit( 1 ); } } // Phng thc c 1 bn ghi public String readFile() { String account=""; try { AccountRecord a = (AccountRecord)input.readObject(); account =String.valueOf( a.getAccount() ) + "\n " + a.getFirstName() + "\n " + a.getLastName() + "\n " + String.valueOf( a.getBalance()); } catch(Exception p){} finally {return account;}

84

} public static void main(String[] argvs) { DocFile d = new DocFile(); d.openFile(); System.out.println(d.readFile()); System.out.println(d.readFile()); d.closeFile(); }}

XII. Truy cp file nh phn


Ngoi cc cng c thao tc trn file vn bn, Java h tr c cc thao tc vi file nh phn dng cc i tng: DataOutputStream: H tr ghi file ch nh phn tc l tng byte. DataInputStream: H tr c file ch nh phn. Tt nhin l cc file vn bn cng c th c ghi ch nh phn. Chng trnh sau y copy d liu gia hai file dng .doc: import java.io.*; public class BinaryAccess { public static void main(String[] argvs) { java.io.DataOutputStream out; // Lung ra h tr ghi file nh phn java.io.DataInputStream in; // Lung vo h tr c file nh phn try { in = new java.io.DataInputStream(new FileInputStream("C:\\P.doc")); out = new java.io.DataOutputStream(new FileOutputStream("C:\\G.doc")); int bytesAvailable = in.available(); // s byte ca file if (bytesAvailable > 0) { byte[] data = new byte[bytesAvailable]; in.read(data); // c cc byte ra mt mng byte out.write(data); // Ghi mng byte ny vo mt file khc } in.close(); out.close(); } catch (Exception ex) {} }}

85

Bi tp
1. Vit mt chng trnh nhp vo mt chui t bn phm sau ghi chui ra file. 2. Cho mt file c d liu v th sinh thi hoa hu nh sau: 001, Tran Thi Mong Mo, 1.98, Ha Tay 002, Bi Th Thanh Nhn, 1.89, Ha Noi 003, Nguyen Thu Thuy, 1.70, Ha Nam 009, Phan Anh Thu, 1.78, Thanh Hoa Cc d liu ln lt m t v: M s, H v tn, chiu cao, Qu qun. Vit mt chng trnh c d liu ca file ra v gn mi dng cho mt i tng HOAHAU. 3. Vit mt chng trnh copy d liu t mt file vn bn sang mt file vn bn khc. 4. Vit chng trnh copy d liu t mt file nh GIF sang mt file nh GIF khc.

86

ti 7. X l ngoi l
Khi vit mt chng trnh ni chung v trong Java ni ring, li c th xy ra vi rt nhiu l do. Khi li xy ra, ngi s dng chng trnh mun rng chng trnh c th: Quay li trng thi an ton trc v cho php ngi dng thc hin cc cng vic khc. Ghi li cc d liu hin thi v kt thc chng trnh. Tuy nhin iu ny l rt kh khn bi li c th n do mt trong cc nguyn nhn: Ngi dng nhp d liu sai. Li thit b. Li phn cng nh thiu cng hay b nh. Trong mt on chng trnh m lp trnh vin khng th bit trc c liu c chuyn g xy ra lm cho on chng trnh gy ra li hay khng, chng ta gi l mt ngoi l (exception) nhng iu xy ra khc thng. Java cho php ngi lp trnh qun l cc li theo cch khi n xy ra, chng trnh s thc hin nhng vic do chnh lp trnh vin t ra, gi l exception handling.

I. Cc tnh hung s dng ngoi l


Vic qun l cc ngoi l nn c s dng khi: Mt phng thc khng th hon thnh nhim v ca n v mt l do rng n khng th iu khin c mi chuyn. X l cc ngoi l t mt thnh phn chng trnh cha c qun l ngoi l Trong cc d n ln, a vo cc x l ngoi l x l theo mt cch ring thng nht.

II. C s qun l ngoi l trong Java


Khi mt phng thc khng th hon thnh nhim v ca n, n c th qung, nm(throws) ra mt Exception, nu c mt Exception handler - on code x l khi li xy ra th Exception ny s b bt (catch) v c qun l(handled). C php thc hin iu ny nh sau: try { // on chng trnh c th gy ra exception } catch (<Kiu exception> <tn bin>) { // on code chy khi exception xy ra } finally { // on code lun c thc hin bt k exception c xy ra hay khng } Mt khi try c th khng c hoc c nhiu khi catch. Mi khi catch xc nh mt kiu exception m n c th bt v cha on code x l trong trng hp tng ng. try{

87

//code c th throw exceptions } catch (MalformedURLException e1) { //code x l } catch (UnknownHostException e2) { //code x l } catch (IOException e3) { //code x l } Sau khi catch cui cng, c th c hoc khng mt khi finally cha code x l bt k exception c xy ra hay khng. Mi khi try bt buc phi c mt khi catch hoc finally. Khi li xy ra, chng trnh s tm n khi catch c kiu i tng Exception ph hp thc hin. ly c thng bo t h thng v li, s dng phng thc getMessage() ca cc lp Exception, v d: e3.getMessage(); Trong mt phng thc ta c th khai bo mt mnh throws phng thc qung ra cc ngoi l. Cc ngoi l ny c qung ra bi cc lnh throw hoc vic gi mt phng thc khc trong phng thc ny. Ti im qung ra ngoi l (throw point), Java s dng c ch kt thc chng trnh thay v c ch quay tr li im xy ra ngoi l v tip tc. V d: int functionName( parameterList ) throws ExceptionType1, ExceptionType2, ExceptionType3,.. { // Thn phng thc }

III. Cu trc cy k tha cc x l ngoi l


Trong Java c hng trm lp ngoi l bt cc li tng ng nh li vo/ra file, li truy cp CSDL SQL,Cc ngoi l trong Java u k tha t lp Throwable theo cu trc nh sau:

88

Danh sch cc ngoi l thng dng trong Java Ngoi l RuntimeException ArthmeticException IllegalAccessException IllegalArgumentException ArrayIndexOutOfBoundsExeption NullPointerException SecurityException ClassNotFoundException NumberFormatException AWTException IOException FileNotFoundException EOFException NoSuchMethodException InterruptedException ngha Lp c s cho nhiu ngoi l java.lang Li v s hc, v d nh chia cho 0. Lp khng th truy cp. i s khng hp l. Li trn mng. Khi truy cp i tng null. C ch bo mt khng cho php thc hin. Khng th np lp yu cu. Vic chuyn i t chui sang s thc khng thnh cng. Ngoi l v AWT Lp cha ca cc lp ngoi l I/O Khng th nh v tp tin Kt thc mt tp tin. Phng thc yu cu khng tn ti. Khi mt lung b ngt.

IV. S dng ngoi l c kim sot


Trong phn trn bn v cch s dng cc exception bt cc li khng c kim sot. Trong phn ny chng ta s xem cch s dng ngoi l qun l cc tnh hung c th kim sot c. Cc ngoi l dng ny c khai bo phn u cc phng thc. V d trong phng thc khi to sau: public FileInputStream(String name) throws FileNotFoundException y phng thc nhn mt tham s kiu String nh l tn file, tuy nhin rt c th file khng tn ti hoc l mt file rng v khng c g c. Khi gp li nh vy, chng trnh s tm ti v tr nh ngha exception handler qun l li ny. Mt vn l lp trnh vin khng bit throws ra ngoi l no hoc khng th khai bo ht tt c cc ngoi l. Tuy nhin, c 4 tnh hung a ra ngoi l: Khi gi mt phng thc c throw mt ngoi l, chng hn nh FileInputStream. Khi ta xc nh c mt li v throws mt exception bng mt lnh throw.

89

Khi vit mt chng trnh b li, chng hn a[-1] = 0, s dn n vic kch hot mt ngoi l, chng hn y l ArrayIndexOutOfBoundsException. Khi mt li bn trong h thng nh trong JVM hoc cc th vin ng. Mt phng thc cn khai bo ngoi l ph hp: class MyAnimation { ... public Image loadImage(String s) throws IOException { ... } } Phng thc c th throws nhiu ngoi l nu cn: class MyAnimation { ... public Image loadImage(String s) throws EOFException, MalformedURLException { ... } } Cc ngoi l bt li ni b ca Java thng khng nn c khai bo, l cc ngoi l k tha t lp Error v chng vt khi tm kim sot ca chng ta. i vi cc ngoi l khng c kim sot, chng k tha t lp RuntimeException cng vy, ta khng nn khai bo chng. V d: class MyAnimation { ... void drawImage(int i) throws ArrayIndexOutOfBoundsException // Khng ph hp { ... } } i vi cc ngoi l dng RuntimeException, nu chng ta c k hoch khai bo n th tt nht l tm cch khc phc khng cho chng xy ra.

V. Xy dng mt ngoi l
Chng ta c th t xy dng mt ngoi l throws trong nhng trng hp c th. Cc class ngoi l ny c k tha t lp Exception hoc lp con ca n nh IOException chng hn. V d: class FileFormatException extends IOException { public FileFormatException() {} public FileFormatException(String gripe) { super(gripe);

90

} } Sau , ta c th s dng ngoi l ny trong chng trnh: String readData(BufferedReader in) throws FileFormatException { ... while (. . .) { if (ch = = -1) // im cui file { if (n < len) throw new FileFormatException(); } ... } return s; }

VI. Bi tp
1. Vit chng trnh c mt file trn a v in ra mn hnh. Ch dng cc ngoi l kim sot tt c cc tnh hung c th. 2. Khai bo mt lp ngoi l kim sot tnh hung im mt sinh vin vt qu 10 hay tui ca sinh vin vt qu 100 trong ng dng qun l sinh vin ti Lp trnh hng i tng trong Java. 3. Vit chng trnh nhp mt s nguyn t bn phm. Bt ngoi l khi ngi dng nhp vo k t hoc s thc c phn thp phn.

91

ti 8. X l cc s kin trong Java


I. Khi nim v c s x l s kin
Bt k chng trnh c giao din ha no thng h tr vic kch hot cc s kin t con chut hoc bn phm. Mi trng iu hnh s gi cc s kin ny ti chng trnh ang chy. Lp trnh vin c hon ton quyt nh iu g s xy ra khi cc s kin ny c kch hot. Trong Java s dng mt cch tip cn da trn cc khi nim: - Cc ngun ca s kin (event source). - Cc b lng nghe s kin (event listener). Cc ngun s kin chnh l cc i tng iu khin, chng c cc phng thc lp trnh vin ng k cc b lng nghe cho chng. Khi mt s kin xy ra i vi mt ngun s kin, n s gi thng bo ny ti tt c cc b lng nghe s kin c ng k cho s kin . i vi mt ngn ng OOP nh Java th ton b thng tin v s kin c ng gi trong mt lp event. Tt c cc lp event u dn xut t lp java.util.EventObject. Mi loi s kin tng ng vi mt lp dn xut, chng hn nh ActionEvent v WindowEvent. Sau y l cy phn cp ch s k tha gia cc lp s kin trong Java:

92

Cc s kin trn c gi cho cc i tng lng nghe tng ng nh: ActionListener MouseMotionListener, v.v...Cc giao din lng nghe s kin bao gm: AdjustmentListener MouseWheelListener FocusListener WindowListener ItemListener WindowFocusListener KeyListener WindowStateListener MouseListener Cc ngun s kin khc nhau c th pht sinh cc s kin khc nhau. V d mt button (nt bm) th pht sinh s kin ActionEvent trong khi mt ca s li pht sinh s kin WindowEvent. Mi loi s kin cng c giao din lng nghe tng ng. Tm li, mt s kin c qun l da trn cc khi nim: 1. Mt i tng lng nghe l mt biu hin ca mt lp c ci t giao din lng nghe s kin 2. Mt ngun s kin l mt i tng m c th ng k cc i tng lng nghe v gi cho chng cc i tng s kin. 3. Ngun s kin gi i tng s kin ti tt c cc i tng lng nghe c ng k cho s kin . 4. i tng lng nghe s s dng thng tin trong cc i tng s kin phn ng vi cc s kin . C php ng k cc i tng lng nghe cho cc ngun s kin theo c php sau: <ngun s kin>.add<s kin>Listener(<i tng lng nghe s kin>) V d: ActionListener listener = . . .; // i tng lng nghe JButton button = new JButton("Ok"); // Ngun s kin button.addActionListener(listener); // ng k i tng lng nghe s kin Trong on code trn, vn cn li l i tng lng nghe s kin phi c mt phng thc nhn v s kin t ngun s kin ng k n v x l. y, i tng listener phi thuc mt lp c ci t giao din ActionListener. Trong giao din ny c khai bo mt phng thc actionPerformed nhn v mt s kin ActionEvent: class MyListener implements ActionListener { ... public void actionPerformed(ActionEvent event) { // on m x k s kin t y ... } } Bt c khi no ngi dng click chut vo i tng JButton trn mn hnh, mt s kin ActionEvent c pht sinh v gi cho i tng lng nghe listener. i tng ny c ci t mt phng thc x l s kin l actionPerformed, ly i s l i tng ActionEvent nhn c. C th c nhiu b lng nghe c ng k cho mt ngun s kin, khi s kin cng c gi ti tt c cc b lng nghe v ti phng thc actionPerformed ca chng. S sequence cho on code trn nh sau:

93

Sau y l mt v d v x l s kin click cho 3 i tng Jbutton: Mt Button c to ra nh sau bng cch gi constructor ca JButton vi mt chui nhn hoc mt nh hay c hai: JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton(new ImageIcon("blue-ball.gif")); Thm 3 Button vo 1 panel nh sau: Class ButtonPanel extends JPanel { public ButtonPanel() { JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton("Blue"); JButton redButton = new JButton("Red"); add(yellowButton); add(blueButton); add(redButton); } }

94

By gi chng ta nh nghacc b lng nghe cho cc Button ny gi l ColorAction nh sau: public class ColorAction implements ActionListener { public ColorAction(Color c) { backgroundColor =c; } public void actionPerformed(ActionEvent e) { setBackground(backgroundColor); // Thay i mu nn ca panel khi Button c click } private Color backgroundColor; } Mi i tng Button c ng k cho b lng nghe ny: Class ButtonPanel extends JPanel { public ButtonPanel() { JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton("Blue"); JButton redButton = new JButton("Red"); add(yellowButton); add(blueButton); add(redButton); ColorAction yellowAction = new ColorAction(Color.Yellow); ColorAction blueAction = new ColorAction(Color.Blue); ColorAction redAction = new ColorAction(Color.Red); yellowButton.addActionListener(yellowAction); blueButton.addActionListener(blueAction); redButton.addActionListener(redAction); } } Mt vn t ra l phng thc setBackground() khng c nh ngha trong lp ColorAction m ch c nh ngha cho lp Panel. Gii php y l a lp ColorAction thnh lp ni ca lp ButtonPanel, khi trong lp ColorAction, ta c th truy cp cc phng thc ca lp Panel (c ButtonPanel k tha) nh setBackground chng hn. Class ButtonPanel extends JPanel { public ButtonPanel() { JButton yellowButton = new JButton("Yellow"); JButton blueButton = new JButton("Blue");

95

JButton redButton = new JButton("Red"); add(yellowButton); add(blueButton); add(redButton); ColorAction yellowAction = new ColorAction(Color.Yellow); ColorAction blueAction = new ColorAction(Color.Blue); ColorAction redAction = new ColorAction(Color.Red); yellowButton.addActionListener(yellowAction); // ng k b lng nghe s kin blueButton.addActionListener(blueAction); redButton.addActionListener(redAction); } private class ColorAction implements ActionListener { public ColorAction(Color c) { backgroundColor =c; } public void actionPerformed(ActionEvent e) { setBackground(backgroundColor); // Thay i mu nn ca panel khi Button c click } private Color backgroundColor; } } Chng trnh sau y kim tra s thc hin p ng cc s kin va thit k trn: import javax.swing.JFrame; public class testPanel extends JFrame { public testPanel() { ButtonPanel pn = new ButtonPanel(); this.add(pn); } public static void main(String[] argvs) { testPanel p = new testPanel(); p.setSize(300,400); p.setVisible(true); } }

96

Thng thng, cc lp lng nghe s kin c th c ci t ngay trong phng thc addActionListener nh sau: yellowButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { setBackground(Color.YELLOW); } }); Lm nh vy ta khng cn thit k ring mt lp ColorAction.

II. Truy cp thng tin s kin


Mt phng php khc lp trnh s kin l gn cho tt c cc i tng ngun s kin chung mt i tng lng nghe. Ty theo thng tin v s kin nhn c, phng thc actionPerformed s c s hnh x khc nhau. Mun vy, lp cha cc ngun s kin phi ci t giao din ActionListener. import javax.swing.*; import java.awt.event.*; public class ButtonPanel extends JPanel implements ActionListener { JButton yellowButton; JButton blueButton; JButton redButton; public ButtonPanel() { yellowButton = new JButton("Yellow"); blueButton = new JButton("Blue"); redButton = new JButton("Red"); add(yellowButton); add(blueButton); add(redButton); yellowButton.addActionListener(this); blueButton.addActionListener(this); redButton.addActionListener(this); } public void actionPerformed(ActionEvent event) { if (event.getSource()==yellowButton) setBackground(Color.YELLOW); if (event.getSource()==redButton) setBackground(Color.RED); if (event.getSource()==blueButton) setBackground(Color.BLUE); } } Trong v d trn, bn thn lp component ButtonPanel ng vai tr l lp lng nghe s kin v n c ci t giao din ActionListener. Do , khi ng k i tng lng nghe cho cc Button, ta ch vic s dng bin this, i din cho i tng ngm nh ca chnh lp ButtonPanel. Cc i tng Button by gi cng phi khai bo l bin thnh phn ca lp v

97

chng c truy cp trong 2 phng thc khc nhau. Tuy nhin phng php ny s tr nn kh dng khi trn panel c nhiu i tng ngun s kin.

III. X l cc s kin trn window


Phn trn cho thy cch thc chng ta lm vic vi cc ngun s kin l cc i tng nm trong mt window. Phn ny ta s xem xt cc s kin xy ra i vi bn thn mt window. Mun bt cc s kin ca window, ta cng qua cc bc cn bn sau: WindowListener listener = new ..... frame.addWindowListener(listener); Trong frame l mt i tng ca lp JFrame, l i tng ngun s kin pht sinh cc s kin WindowEvent. i tng listener bt buc phi thuc mt lp c ci t giao din WindowListener. Cu trc ca giao din ny nh sau: public interface WindowListener { void windowOpened(WindowEvent e); void windowClosing(WindowEvent e); void windowClosed(WindowEvent e); void windowIconified(WindowEvent e); // thu nh ca s void windowDeiconified(WindowEvent e); void windowActivated(WindowEvent e); void windowDeactivated(WindowEvent e); } Do cc lp ci t giao din ny phi khai bo nh ngha tt c cc phng thc trn. Tuy nhin, ta ch vit code cho phng thc no ta x l m thi, v d: class Terminator implements WindowListener { public void windowClosing(WindowEvent e) { System.exit(0); } public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} }

IV. Cc lp thch nghi


Ta thy rng vic khai bo y 7 phng thc, c nhng phng thc khng x l g c lm cho chng trnh khng c ti u. Gii php y s l nh ngha mt lp trung gian, khai bo ci t giao din WindowListener vi y 7 phng thc nhng cc phng thc ny cng khng lm g c. Cc lp mun ci t ni dung cho mt s kin ch vic khai bo k tha lp ny v nh ngha chng phng thc cn thit. Cc lp c vai tr trung gian nh vy

98

gi l cc lp thch nghi. Vi mi giao din lng nghe, ta c mt lp thch nghi tng ng. V d: WindowListener c lp thch nghi WindowAdapter, MouseListener c MouseAdapter. Cc lp thch nghi thng dng l: FocusAdapter MouseMotionAdapter KeyAdapter WindowAdapter MouseAdapter class Terminator extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } Vn l cc lp window thng phi khai bo k tha t JFrame ri nn khng th khai bo k tha thm lp WindowAdapter. Lc ny, k thut nh ngha lp ni nc danh c pht huy: frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent event) { System.exit(0); } public void windowIconified(WindowEvent e) {System.exit(0);} } ); on code ny thc hin cc cng vic sau: 1. nh ngha mt class nc danh k tha lp WindowAdapter. 2. Thm 2 phng thc windowClosing v windowIconified cho lp nc danh . 3. K tha 5 phng thc cn li t WindowAdapter. 4. To ra mt i tng ca lp , i tng cng khng c tn. 5. Gi i tng ny cho phng thc addWindowListener. Ta c th nh ngha chng nhiu hn mt phng thc ca WindowAdapter. Tt nhin l khng phi khi no ta cng phi s dng lp ni nc danh. Mt cch lm khc l khai bo mt lp (thng l lp ni) dng nh class Terminator trn, sau ng k lng nghe s kin cho frame m khng cn mt i tng c tn r rng ca Terminator: frame.addWindowListener(new Terminator()); kt thc ti ny ta lit k cc phng thc x l cho cc loi s kin nh bng sau: Interface ActionListener Methods actionPerformed Parameter/Accessors ActionEvent

Ngun s kin AbstractButton JComboBox JTextField Timer

getActionCommand

99

Interface

Methods

Parameter/Accessors

Ngun s kin

getModifiers

AdjustmentListener

adjustmentvalueChanged AdjustmentEvent

JScrollbar

getAdjustable getAdjustmentType getValue AbstractButton JComboBox

ItemListener

ItemstateChanged

ItemEvent

getItem getItemSelectable getStateChange Component

FocusListener

FocusGained focusLost keyPressed keyReleased keyTyped

FocusEvent

isTemporary Component

KeyListener

KeyEvent

getKeyChar getKeyCode getKeyModifiersText getKeyText isActionKey Component

MouseListener

mousePressed mouseReleased mouseEntered mouseExited mouseClicked

MouseEvent

getClickCount getX getY getPoint TRanslatePoint Component

MouseMotionListener

mouseDragged mouseMoved mousewheelMoved

MouseEvent

MouseWheelListener

MouseWheelEvent

Component

100

Interface

Methods

Parameter/Accessors

Ngun s kin

getWheelRotation getScrollAmount Window

WindowListener

windowClosing windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated

WindowEvent

getWindow

WindowFocusListener windowGainedfocus windowlostFocus WindowStateListener WindowStateChanged

WindowEvent

Window

getOppositeWindow Window

WindowEvent

getOldState getNewState

V. X l cc s kin chut
Cc s kin vi chut c x l bi giao din MouseListener. Khi mt ngun s kin c kch hot bi vic click chut, cc phng thc x l cho cc s kin tng ng c lit k trong bng trn, c bit hay dng l mouseClicked(). Thng thng ta cng khng ci t x l cho tt c cc s kin ny nn ta khng ci t giao din MouseListener m khai bo mt lp ni nc danh k tha t lp thch nghi MouseAdapter. Gi s c mt i tng JFrame tn l frame, sau y l mt v d qun l s kin click chut trn n: frame. addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) // Mac dinh la chuot trai { // Kiem tra neu la chuot phai duoc click if( (e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK) // hien thi mot popup menu tai vi tri click jp.show(getContentPane(),e.getX(),e.getY()); } } ); Tham kho thm ti: http://java.sun.com/docs/books/tutorial/uiswing/events/handling.html v http://java.sun.com/docs/books/tutorial/uiswing/events/mouselistener.html

101

Bi tp
1. Vit chng trnh x l s kin chut click trn cc Botton, nu l chut tri th thng bo l Bn va click chut trai, nu l chut phi th thng bo Bn va click chut phi. 2. Vit chng trnh sau khi chn mt Button trn mn hnh, nhn phm x th chng trnh kt thc.

102

ti 9. Applet
Applet l mt trong nhng k thut vt tri ca Java so vi cc ngn ng khc. Mt Applet l mt chng trnh Java c nhng vo trong cc trang web, n ng mt v tr c lp bn cnh cc phn khc ca trang web.

I. Xy dng mt Applet n gin


1. Son tho mt tp c tn Hello.java nh sau: import java.applet.Applet; //khai bo th vin import java.awt.Graphics; //Khai bo ho public class Hello extends Applet { //ci t phng thc cho Applet public void paint(Graphics g){ g.drawString("Hello!", 50, 25); } 2. Bin dch tp Hello.java 3. Son tho mt trang HTML c tn hello.htm <html><body> <applet> <applet code="Hello.class" width=150 height=25> </applet> </body></html> 4. t file Hello.class v hello.htm vo trong cng mt th mc 5. M file hello.htm. Tuy nhin cc applet c th chy c, n cn mt JVM trn my cc b. c c JVM cho cc trnh duyt ta cn ci phin bn Java ln my tnh cc b v tch hp vo trnh duyt nh mt plug-in. Trong cc phin bn Java gn y, ngi lp trnh c th s dng th vin swing nm trong gi javax.swing c c giao din GUI thng nht trn mi h thng. Cc lp trong swing c tn gi khc so vi cc lp trong awt bi thm k t u tin J.

II. Cu trc c bn v vng i ca mt Applet


Mt chng trnh Applet y s bao gm cc thnh phn nh sau: import java.applet.Applet; public class myApplet extends Applet{ public void init(){ ...... } public void start(){ ...... } public void stop() { ...... } public void destroy() { ...... } .... //Cc phng thc khc } Nu dng JApplet th ta c khai bo phn u nh sau: import javax.swing.JApplet; public class myApplet extends JApplet{}

103

Vng i ca mt Applet c nh du bi cc s kin din ra mi giai on, lp trnh vin cn nm c ngha ca tng giai on c th vit code iu khin Applet: 1. Giai on init: Thc hin cc cng vic khi to mt Applet. Giai on ny c bt u ngay sau khi th <param> nm trong th <applet> c x l. Cc hnh ng nh thm cc thnh phn giao din ngi dng GUI c thc hin y. 2. Giai on start: c thc hin ngay sau khi giai on init c thc hin xong. N cng c gi bt c khi no ngi dng chuyn sang mt trang web khc ri quay li trang c applet. Do , code nm trong start c th c thc hin nhiu ln trong khi code trong init ch c thc hin 1 ln. 3. Giai on stop: c thc hin khi ngi dng ri khi trang web cha applet. Do , code nm trong stop cng c th c thc hin nhiu ln. 4. Giai on destroy: c thc hin khi ngi s dng tt trnh duyt. Khi vit mt applet, chng ta khng phi khi no cng ci t y 4 phng thc m ty theo nhu cu. V d sau xy dng mt applet cho php v lin tip bt u t v tr gia applet. import java.applet.*; import java.awt.*; import java.awt.event.*; public class AppletSample extends Applet { Point curentPoint; // Lu ta im hin ti public void init() { curentPoint = new Point(this.getWidth()/2,this.getHeight()/2); this.setBackground(Color.CYAN); // t mu nn ca applet } public void start() { this.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { drawOnApplet(curentPoint,e.getPoint()); curentPoint = e.getPoint(); } } ); } public void drawOnApplet(Point p1, Point p2) { Graphics g = this.getGraphics(); g.drawLine(p1.x,p1.y,p2.x,p2.y); } }

104

III. An ninh v kh nng ca Applet


V applet c download t xa v thc hin trn my tnh c b nn vn v an ninh c quan tm c bit. Cc nguyn tc v an ninh ca mt applet l: Applet khng bao gi thc hin mt chng trnh ca my cc b. Applet khng th giao tip vi cc my tnh khc trn mng tr my tnh m n c download v. Applet khng th c v ghi d liu ln my tnh cc b Applet khng th tm thy thng tin g v my tnh cuc b, tr cc thng tin nh phin bn Java, tn v phin bn h iu hnh, k t phn tch file, ng dn. Applet khng th tm thy cc thng tin c nhn nh email, password, Tt c cc ca s trnh duyt c applet c ti v u c thng bo. Nhng yu cu v an ninh ca applet l rt quan trng. Trong mt s trng hp ta c th cu hnh applet c tin cy v c th truy cp vo my tnh cc b ging nh mt chng trnh ang chy trn my tnh . Applet cng c nhng kh nng nh: To kt ni n my ang chy n. Applet d dng dng cc siu vn bn hin th. C th gi n cc phng thc ton cc ca cc applet khc trn cng trang web. Applet c th giao tip vi cc applet khc trn trang web cng nh vi cc i tng khc trn trang web thng qua c ch ring. Cc applet c np t h thng tp tin cc b s khng b cc gii hn ca cc applet c np t mng xung. Khng nht thit l cc applet s ngng li khi ta thot khi cc trang web cha n.

IV. ng dng Applet vi ca s Popup


Vi Applet chng ta hon ton c th c thm cc ca s pop-up m rng khng gian lm vic. Sau y l mt Japplet c th m mt Frame mi. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PopupCalculatorApplet extends JApplet { public void init() { // To mt frame vi mt ca s panel final JFrame frame = new JFrame(); frame.setTitle("Calculator"); frame.setSize(200, 200); // Thm mt Button n/ hin frame pop-up JButton calcButton = new JButton("Calculator"); add(calcButton); calcButton.addActionListener(new ActionListener() {

105

public void actionPerformed(ActionEvent event) { frame.setVisible(!frame.isVisible()); } }); } }

V. Cc th HTML ca Applet
Mt khai bo applet trong trang HTML thng c dng: <applet code="NotHelloWorldApplet.class" width="300" height="100"> Thong tin duoc hien thi khi applet khong hien thi </applet> Sau y ta s tm hiu cc thuc tnh ca applet: Cc thuc tnh v v tr: height: Chiu cao ca applet. Cc applet khng th thay i kch thc khi chy. width: Chiu rng ca applet align: Xc nh v tr ca applet so vi cc vn bn xung quanh n. Cc gi tr ca align c th l: left, right, middle, top, texttop, absmiddle, baseline, bottom, absbottom, vspace v hspace. Cc thuc tnh v chng trnh ngun- code: code : Thuc tnh ny cho bit tn ca class cha chng trnh applet. Tn ny l tng i so vi gi tr codebase hoc vi th mc hin hnh nu khng c codebase. ng dn phi ph hp vi ng dn gi ca class applet. V d: nu applet c tn MyApplet.class c t trong gi com.mycompany th ng dn phi l: code="com/mycompany/MyApplet.class". hoc: code="com.mycompany.MyApplet.class" cng c chp nhn. - codebase: L mt thuc tnh ty chn xc nh ng dn tuyt i ni cha class gi tr code. archive: Cha tn cc gi chng trnh hoc ti nguyn khc c ti v km theo applet. Cc gi chng trnh c nn dng file JAR v c t cch nhau bi du ,. V d: <applet code="CalculatorApplet.class" archive="CalculatorClasses.jar,corejava/CoreJavaClasses.jar" width="100" height="150"> object: Cha tn file c tun t ha ca mt applet. name: Tn ca applet. Trong cc trnh duyt ca Netscape hot Windows u cho php applet giao tip vi cc i tng javascript khc trn trang web. Khi applet cn c tn truy cp. Ngoi ra Java cho php ta nh ngha cc tham s cho applet thng qua cc th <param> V d: <applet code="FontParamApplet.class" width="200" height="200"> <param name="font" value="Helvetica"/> <param name="size" value="24"/>

106

</applet> Khi trong chng trinh applet, ta c th ly ra s dng: public class FontParamApplet extends JApplet { public void init() { String fontName = getParameter("font"); int fontSize = Integer.parseInt(getParameter("size")); ... } }

VI. Cc phng thc, lp trnh ha v bt s kin ca applet


public void paint(Graphics g) {...}: L phng thc hin th c bn, thng cc applet dng paint() biu din cc hot ng ca mnh trn trang web. public void update(Graphics g) {...}: l phng thc ta dng sau khi thc hin pain() nhm lm tng hiu qu v. Ngoi ra Applet cn tha hng cc phng thc t lp AWT. Phng thc repaint() c dng khi ca s cn cp nht li. Phng thc ny ch cn mt tham s l i tng ca lp Graphics. getDocumentBase(): cho bit a ch dng URL ca th mc cha tp tin HTML cha applet. getCodeBase(): Cho bit a ch dng URL ca th mc cha tp tin .CLASS ca applet. getImage(URL url, String name): tr v mt i tng nh hin th trn nn. getLocale(): Xc nh v tr applet. getAudioClip(URL url, String name): cho i tung audio. showStatus(String st): hin th xu st trn thanh trang thi. drawChars(char array[ ], int offset, int length, int xCoor, int yCoor): xut cc k t. Ch thch cc tham s: array: Mng cc k t; offset: V tr bt u, ni cc k t c v.; length: S cc k t cn c v; xCoor: To X, ni cc k t cn c v; yCoor: To Y, ni cc k t cn c v. drawBytes(byte array[ ], int offset, int length, int xCoor, int yCoor): xut cc byte ra.Trong array: Mng cc byte.;V tr offset hay v tr bt u; length: S byte cn v; xCoor: To X; yCoor: To Y. drawLine(int x1, int y1, int x2, int y2): V ng thng t A(x1, y1) n B(x2, y2). drawOval(int xCoor, int yCoor, int width, int height): V ng oval. fillOval(int xCoor, int yCoor, int width, int height): V hnh oval c.Trong : width l Chiu rng ca hnh, height l Chiu cao ca hnh. drawRect(int xCoor, int yCoor, int width, int height): V hnh ch nht. fillRect(int xCoor, int yCoor, int width, int height): V hnh ch nht c. drawRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int archeight): V hnh ch nht c bo gc.

107

fillRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int archeight): v hnh ch nht bo gc c. Trong : arcwidth: lm trn gc tri v gc phi ca hnh ch nht. archeight: lm trn gc trn nh v gc y ca hnh ch nht. V d, arcwidth = 20 c ngha l hnh ch nht c lm trn cnh tri v cnh phi mi cnh 10 pixel. draw3Drect(int xCoord, int yCoord, int width, int height, boolean raised): V hnh ch nht 3D. drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): V hnh cung. fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): V hnh cung c. Trong : xCoord: To x; yCoord: To y. width: Chiu rng ca cung c v; height: Chiu cao ca cung c v. arcwidth: Gc bt u; archeight: rng ca cung (gc ca cung) so vi gc ban u. drawPolyline(int xArray[ ], int yArray[ ], int totalPoints): V nhiu ng thng Trong : xArray: Mng lu tr to x ca cc im; yArray: Mng lu tr to y ca cc im; totalPoints: Tng s im cn v. setFont(new Font(Times Roman, Font.BOLD, 15)): t Font cho ch, (Font.BOLD, Font.PLAIN, Font.ITALIC) drawPolygon(int x[ ], int y[ ], int numPoints):V a gic. fillPolygon(int x[ ], int y[ ], int numPoints): V a gic c. Trong : x[ ]: Mng lu tr to x ca cc im; y[ ]: Mng lu tr to y ca cc im; numPoints: Tng s im cn v; setColor(Color c): t mu v. Bng mt s mu c bn: Color.white Color.orange Color.lightgray Color.red Color.blue Color.cyan Color.yellow Color.black Color.gray Color.darkgray Color.green Color.pink Color.magenta

108

ti 10. Lp trnh giao din ha GUI


I. Gii thiu AWT
Abstract Windows Toolkit AWT: L th vin ca Java cung cp cho lp trnh vin cc gii php giao din ngi dng ho (Graphical User Interface - GUI) thn thin. Mt giao din ngi dng c hnh thnh t cc phn t ca GUI. Mt phn t GUI c thit lp bng cch s dng cc th tc: 1. To i tng. 2. Xc nh s xut hin ban u ca i tng. 3. Ch ra n nm u. 4. Thm phn t vo giao din trn mn hnh. lm vic vi cc i tng GUI chng ta cn nhp gi java.awt.*. AWT cung cp cc thnh phn khc nhau to GUI hiu qu, cc thnh phn ny c th l: Vt cha (Container). Thnh phn (Component). Trnh qun l cch trnh by (Layout manager). ho (Graphics) v cc tnh nng v (draw). Phng ch (Font). S kin (Event). T phin bn 1.4, Java pht trin mt th vin m rng swing mi vi a s cc lp GUI k tha t AWT nhng c kh nng di ng tt hn. Cc lp GUI trong swing c thm tin t J so vi cc lp trong AWT. Sau y, chng ta s xt cc thnh phn GUI trong swing. S phn cp tha k cc i tng GUI trong swing nh sau:

109

II. Vt cha (Container)


L vng m ta c th t cc thnh phn (component) ca giao din. Mt vt cha c th cha nhiu phn t. Vt cha thng c s dng l: JPanel - khung cha n gin nht, nhm cc i tng con li v sp xp theo cch thch hp. JFrame - l mt ca s nh mi ng dng ca windows, to cc ng dng windows. JDialogs - l ca s nhng khng y chc nng nh Frame, n l ca s hp thoi a ra nhng li thng bo. JScrollPanel - khung cha nh Panel nhng c hai thanh trt. II.1 JFrame To i tng khung cha JFrame bng phng thc khi to: void JFrame(); To Frame vi tiu bn trn: void JFrame(String FrameTitle); V d: JFrame frame1 = new JFrame(); JFrame frame2 = new JFrame("Cua so Frame"); import javax.swing.*; public class FrameSample { public static void main(String[] argvs) { JFrame f = new JFrame(); f.setSize(400,400); f.setVisible(true); } } Mt s phng thc hay s dng: t li kch thc cho JFrame: frame1.setSize(int width, int height); a ca s hin ra mn hnh: frame1.show(); frame1.setVisible(boolean b); trong : b = true cho hin th, b = false cho n. B hon ton i tng JFrame: frame1.dispose(); Thay i tiu cho JFrame: frame1.setTitle(String newTitle); Ly tiu ca JFrame: public String getTitle(); Co dn JFrame: public void setResizable(boolean b); trong : b = true th Frame c th thay i kch thc, b = false th khng i. Xc nh JFrame ang tnh trng no: public boolean isResizable(); Thay i biu tng JFrame: public setIconImage(Image img); II.2 JPanel JPanel khng th nhn thy trc tip, n l i tng dng cha cc thnh phn GUI trn mn hnh. Do chng ta cn gn JPanel vo i tng no nh: JFrame, JApplet, ... To khung cha JPanel bng phng thc khi to: JPanel panel1 = new JPanel(); V d sau to mt i tng JPanel v t vo n mt i tng nt bm JButton. import javax.swing.*; 110

public class FrameSample { public static void main(String[] argvs) { JFrame f = new JFrame(); JPanel p = new JPanel(); p.add(new JButton("OK")); f.add(p); // gn JPanel vo JFrame f.setSize(400,400); f.setVisible(true); } }

111

II.3 JDialog Nh JFrame, nhng t chc nng hn, cn c gi l popup-window. Ta c th to JDialog di hai hnh thc: modal: l ca s JDialog khi thc hin s kho cht cc ca s khc. Ca s ny thng yu cu mt tc v no cn phi hon thnh ngay. non-modal: ngc li vi modal, ca s ny thch ng vi cc thao tc mang tnh tu bin. Cch to khung cha JDialog t phng thc khi to: public JDialog(JFrame parentWindow, boolean isModal); trong : isModal - quyt nh xem JDialog c to ra dng no: isModal = true cho modal cn isModal = false cho non-modal. V d: JDialog myDialog = new JDialog(myWindow, true) To JDialog c tiu nh trc: public JDialog(Frame parentWindow, String title, boolean isModal) JDialog khng th gn vi Applet, mun a ra mt JDialog t JApplet ta phi to ra mt JFrame gi to. a i tng JDialog ra mn hnh bng phng thc show(). Giu ca s JDialog ta dng phng thc: hide(). n hin JDialog ta cn c phng thc: setVisible(boolean). Cc c im thng s dng vi i tng JDialog th hin tng t vi JFrame. Ly v thay i kch thc JDialog: public setResizable(boolean), boolean isResizable() t v ly tiu ca JDialog: void setTitle(String), String getTitle(); Xc minh mt JDialog ang thuc dng no ta gi phng thc: public boolean isModal() Chng trnh sau y s n hoc hin mt JDialog mi khi nhn vo mt nt bm: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class FrameSample extends JFrame { private JDialog d; public FrameSample() // Constroctor { d = new JDialog(this,"Day la Jdialog",false); d.setSize(100,100); JPanel p = new JPanel(); JButton b = new JButton("Xem/Tat mot JDialog"); b.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { d.setVisible(!d.isVisible()); } } );

112

p.add(b); add(p); } public static void main(String[] argvs) { FrameSample fs = new FrameSample(); fs.setSize(400,400); fs.setVisible(true); } } II.4 JScrollPane y khng phi l mt ca s nhng c tnh cht nh khung cha JPanel dng cha cc i tng. Tnh cht khc l khi i tng n cha qu ln th JScrollPane s xut hin thanh trt ng v ngang hai bn vin ta c th xem c ton b. JScrollPane c ng dng trong cc danh sch chn hay cc vng nhp vn bn.

III. Gii thiu v cc thnh phn GUI c bn


Jlabel: Ch mt vng hin th vn bn hoc cc icon. JtextField: Ch mt i tng cho php nhp d liu t bn phm. JButton: i tng nt bm JcheckBox: i tng nt chn. JcomboBox: i tng ComboBox Jlist: Danh sch JPanel: Ni t cc thnh phn GUI ni trn.

III.1 Nt nhn Cch to nt nhn Ta gi phng thc khi dng: public Button(String label) label l tn nhn ca nt nhn V d: Button nutOK = new Button("OK"); nt nhn vo Applet hay ca s chng trnh bng lnh: add(nutOK); i tn nhn cho nt nhn ta gi phng thc public void setLabel(String newLabel). xem tn nhn hin ti ca nt nhn, ta gi phng thc public String getLabel() V d: Button nutOK = new Button(); nutOK.setLabel("OK"); S dng nt nhn Khi kch chut vo nt nhn s thc hin mt cng vic no . Vn ny chng ta xem xt trong phn x l cc s kin III.2 Nhn (Label) To nhn khng c ni dung g: public Label() hoc to nhn c ni dung: public Label(String nameLabel). hoc thm ch cn l: pubic Label(String name, int align) Mt s phng thc hay s dng: setText(String nameLabel): t li ni dung mi cho nhn. Label.CENTER, Label.LEFT, Label.RIGHT: nhng gi tr cn l. 113

Ly ni dung hin hnh ca nhn: public String getText(); Xem nhn ang c cn l ch no: public int getAlignment(); Thit lp li ch cn l: public void setAlignment(int IlligalArgumentException Sau y l v d s dng JLabel: // Minh ha v JLabel // Nhp cc gi th vin import java.awt.*; import java.awt.event.*; // Gi Java m rng import javax.swing.*; public class LabelTest extends JFrame { private JLabel label1, label2, label3; // To giao din GUI public LabelTest() { super( "Testing JLabel" ); // Contructor ca JFrame // Ly i tng pane ca mt JFrame Container container = getContentPane(); container.setLayout( new FlowLayout() ); // constructor ca JLabel label1 = new JLabel( "Label with text" ); label1.setToolTipText( "This is label1" ); // hin th khi di chut n container.add( label1 ); // thm vo container

align)

throws

// To Jlabel vi icon hoc text Icon bug = new ImageIcon( "bug1.gif" ); label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT ); label2.setToolTipText( "This is label2" ); container.add( label2 ); // JLabel khng tham s label3 = new JLabel(); label3.setText( "Label with icon and text at bottom" ); label3.setIcon( bug ); label3.setHorizontalTextPosition( SwingConstants.CENTER ); label3.setVerticalTextPosition( SwingConstants.BOTTOM ); label3.setToolTipText( "This is label3" ); container.add( label3 ); setSize( 275, 170 ); setVisible( true ); } 114

// hm main public static void main( String args[] ) { LabelTest application = new LabelTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }

III.3 Nt nh du (checkbox) Mt nt nh du c hai phn: nhn v du biu hin trng thi. Ta c th to nt nh du theo 5 phng thc khi dng: public Checkbox(): to nh du khng c nhn. public Checkbox(String cbLabel): to nh du vi mt nhn cbLabel gn km. public Checkbox(String cbLabel, boolean state): To nh du vi mt nhn cbLabel gn km vi trng thi ban u ca . public Checkbox(String cbLabel, boolean state, CheckboxGroup g); public Checkbox(String cbLabel , CheckboxGroup g, boolean state): dng to nh du c nhn vi trng thi nh du ban u, nt to ra c nhm trong nhm g. Nhm cc nh du tr thnh nt chn. Kim tra v thit lp trng thi: kim tra mt c c nh du khng ta dng phng thc: public boolean getState(); Nu mun thit lp trng thi, ta dng phng thc: setState(boolean state). X l tnh hung khi nh du thay i trng thi: lng nghe nh du, ta dng phng thc: addItemListener(ItemListener L) loi b lng nghe ta dng phng thc: removeItemListener(ItemListener L)

115

// Java core packages import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*; public class CheckBoxTest extends JFrame { private JTextField field; private JCheckBox bold, italic; // Thit lp GUI public CheckBoxTest() { super( "JCheckBox Test" ); // ly pane Container container = getContentPane(); container.setLayout( new FlowLayout() ); // t nhp v font ch field = new JTextField( "Theo di font ch thay i", 20 ); field.setFont( new Font( "Serif", Font.PLAIN, 14 ) ); container.add( field ); // to i tng checkbox bold = new JCheckBox( "Bold" ); container.add( bold ); italic = new JCheckBox( "Italic" ); container.add( italic ); // ng k i tng lng nghe CheckBoxHandler handler = new CheckBoxHandler(); bold.addItemListener( handler ); italic.addItemListener( handler ); setSize( 275, 100 ); setVisible( true ); } // execute application public static void main( String args[] ) { CheckBoxTest application = new CheckBoxTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // Lp ni lng nghe s kin private class CheckBoxHandler implements ItemListener { private int valBold = Font.PLAIN; private int valItalic = Font.PLAIN; // p ng s kin chn public void itemStateChanged( ItemEvent event ) { // x l chn ch m if ( event.getSource() == bold ) if ( event.getStateChange() = = ItemEvent.SELECTED ) valBold = Font.BOLD; else valBold = Font.PLAIN; 116 // Chn ch nghing if ( event.getSource() == italic )

III.4 Nt chn (radio button) To nt chn: y l trng hp c bit ca nh du. Ta to ra nh du v t n vo mt nhm, ta c phng thc sau: public CheckboxGroup(); Vi mt nhm cc nt ta c th ly ra i tng hin ti ang c chn bng cch gi phng thc getSelectedCheckbox(). t la chn ta dng: setSelectedCheckbox(). Cch s dng nt chn: Ta to mt i tng giao tip ItemListener lng nghe tnh hung. Phng thc getItemSelectable s tr v i tng ni m tnh hung pht sinh: public ItemSelectable getItemSelectable(); Phng thc getItem ca i tng ItemEvent s cho ta bit gi tr nt chn: public Object getItem(); Sau y l v d v s dng chn: // ng k i tng lng nghe cho mi chn radio RadioButtonHandler handler = new RadioButtonHandler(); plainButton.addItemListener( handler ); boldButton.addItemListener( handler ); italicButton.addItemListener( handler ); boldItalicButton.addItemListener( handler ); // Nhm cc li radioGroup = new ButtonGroup(); radioGroup.add( plainButton ); radioGroup.add( boldButton ); radioGroup.add( italicButton ); radioGroup.add( boldItalicButton ); V bt cc s kin cng tng t nh du. III.5 Hp thoi Combo Java h tr hp thoi Combo thng qua i tng ca class JComboBox. y l mt danh sch x xung, a ra mt danh sch cc mc v ta ch c chn 1 mc trong . JComboBox cng pht sinh s kin ItemEvent ging nh JRadioButton v JCheckBox. Chng trnh sau y minh ha vic s dng JComboBox vi cc phn t l cc nh GIF. // Java core packages import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*; public class ComboBoxTest extends JFrame { private JComboBox imagesComboBox; private JLabel label; private String names[] = { "bug1.gif", "bug2.gif", "travelbug.gif", "buganim.gif" };

117

private Icon icons[] = { new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]), new ImageIcon(names[3])}; // Thit lp GUI public ComboBoxTest() { super( "Testing JComboBox" ); // t layout Container container = getContentPane(); container.setLayout( new FlowLayout() ); // khi to combo imagesComboBox = new JComboBox( names ); imagesComboBox.setMaximumRowCount( 3 ); imagesComboBox.addItemListener( new ItemListener() { // bt s kin public void itemStateChanged( ItemEvent event ) { // liu c phn t c chn if ( event.getStateChange() == ItemEvent.SELECTED ) label.setIcon( icons[imagesComboBox.getSelectedIndex() ] ); } } ); container.add( imagesComboBox ); // t mt JLabel hin thi ImageIcons tng ng label = new JLabel( icons[ 0 ] ); container.add( label ); setSize( 350, 100 ); setVisible( true ); } // hm main public static void main( String args[] ) { ComboBoxTest application = new ComboBoxTest(); aplication.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }} III.6 Danh sch (Lists) Lp List cho php ta to mt danh sch cc phn t cho ta la chn To mt danh sch:

118

Phng thc khi dng mc nh: public List(). vd: List list = new List(); hoc ch nh bao nhiu phn t s c hin th cng mt lc trong danh sch: public List(int rows) hoc to mt danh sch cho php la chn nhiu phn t cng mt lc: public List(int rows, boolean multiMode) S dng danh sch chn: a tng phn vo danh sch bng lnh add(String item).vd: list.add("Mau do"); Chn mt phn t vo danh sch bng phng thc add(String item, int index), index l v tr phn t m ta mun chn. Thay th mt phn t v tr pos bng phn t mi: replaceItem(String newItem, int pos) vd: list.replaceItem("Xanh", 4); Loi b mt phn t trong danh sch ta dng phng thc remove(int pos). Loi b ht danh sch: removeAll(). Tr v v tr ca phn t c chn, nu khng c phn t no c chn th gi tr s l -1: getSelectedIndex(). Nu c chn nhiu th dng: int[] getSelectedIndex() Ly ra phn t c chn: getSelectedItem(). Chn nhiu th dng: String[] getSelectedItem(). chn mt phn t m ta bit v tr: select(int index) Nu phn t ang trng thi chn chuyn sang trng thi bnh thng: deselect(int index) Trng thi ca mt phn t: isSelected(int index) Chuyn ch n chn sang a chn: setMultiplesSelections(boolean bl) Cho bit mt danh sch l n chn hay a chn: boolean isMultipleMode(). S dng i tng danh sch: Ci t giao tip ItemListener to i tng bit lng nghe s thay i trng thi ca cc phn t trong danh sch. S dng i s ItemEvent trong phng thc itemStateChange bit c ch s ca phn t ang thay i trng thi. x l c tnh hung nhp i chut, ta ci t giao tip ActionListener v gn n vo danh sch. Phng thc getActionCommand() trong ActionEvent s tr v tn ca phn t b nhp. // Java core packages import java.awt.*; // Java extension packages import javax.swing.*; import javax.swing.event.*; public class ListTest extends JFrame { private JList colorList; private Container container; private String colorNames[] = { "Black", "Blue", "Cyan", "Dark Gray", "Gray", "Green", "Light Gray", "Magenta", "Orange", "Pink", "Red", "White", "Yellow" }; private Color colors[] = { Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow }; 119

// Thit lp GUI public ListTest() { super( "List Test" ); // ly layout container = getContentPane(); container.setLayout( new FlowLayout() ); // To danh sch colorList = new JList( colorNames ); colorList.setVisibleRowCount( 5 ); // Khng cho chn nhiu colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION ); // thm mt JScrollPane cha danh sch container.add( new JScrollPane( colorList ) ); // t lng nghe s kin colorList.addListSelectionListener( new ListSelectionListener() { public void valueChanged( ListSelectionEvent event ) { container.setBackground( colors[ colorList.getSelectedIndex() ] ); } } ); setSize( 350, 150 ); setVisible( true ); } // hm main public static void main( String args[] ) { ListTest application = new ListTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }} III.7 vn bn (text field) v vng vn bn (text areas) To vn bn: Khi to mt vn bn khng xc nh kch thc: public TextField(); To mt vn bn hin th ti thiu numCols k t: public TextField(int numCols); To mt vn bn vi ni dung l mt chui cho trc: public TextFiled(String initText); To vn bn kt hp: public TextField(String initText, int numCols); 120

To vng vn bn: To vng vn bn rng, kch thc bt k: public TextArea(); To mt vng vn bn vi ni dung cho trc: public TextArea(String initiaText); To mt vng vn bn vi s ct v s dng nh trc: public TextArea(int rows, int cols); To mt vng vn bn vi s dng s ct v ni dung cho trc: public TextArea(String st, int rows, int cols) c im chung ca cc thnh phn vn bn: Hai lp ny c dn xut t lp TextComponent Mun a ni dung vn bn vo cc i tng ny ta s dng phng thc setText: public void setText(String newText); Ly ni dung vn bn trong cc i tng: public String getText(); Ly ni dung vn bn c nh du: public String getSelectedText(); xc nh xem v tr nh du khi vn bn bt u v kt thc u: public int getSelectionStart(); //u public int getSelectionEnd(); //cui nh du ton b vn bn: public void selectAll(); Cho php son tho c: public void setEditable(boolean canEdited); canEdited = false: ch c. canEdited = true: thm, s c. Xc nh i tng ang trang thi no: public boolean isEditable(); c im ring ca TextField: t k t hin th cho k t nhp vo: public void setEchoChar(Char ch); v d: myTextField.setEchoChar('*'); //m mKhu Xc nh xem k t lm k t hin th: public char getEchoChar(); Xc nh chiu di ca vn bn theo k t: public int getColums(); c im ring ca i tng TextArea: a thm mt dng vn bn vo i tng: public void appendText(String newText); Chn mt chui vn bn vo v tr bt k: public void insertText(String newText, int pos); Xc nh kch thc hin th: public int getRows(); public int getColums(); S dng i tng TextField v TextArea: Mun ly ni dung vn bn ca i tng, ta thit lp ActionListener gn i tng x l s kin vo vn bn TextField. Khi ngi dung nhn Enter th tnh hung c gi. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TextFieldTest extends JFrame { private JTextField textField1, textField2, textField3; private JPasswordField passwordField; // Thit lp giao din GUI public TextFieldTest() { super( "Testing JTextField and JPasswordField" ); // constructor ca JFrame Container container = getContentPane(); container.setLayout( new FlowLayout() );

121

// nhp vi kch thc mc nh textField1 = new JTextField( 10 ); container.add( textField1 ); // nhp vi vn bn c sn textField2 = new JTextField( "Enter text here" ); container.add( textField2 ); // nhp khng cho php nhp, ch hin th thng tin textField3 = new JTextField( "Uneditable text field", 20 ); textField3.setEditable( false ); container.add( textField3 ); // nhp password passwordField = new JPasswordField( "Hidden text" ); container.add( passwordField ); // ng k b lng nghe s kin TextFieldHandler handler = new TextFieldHandler(); textField1.addActionListener( handler ); textField2.addActionListener( handler ); textField3.addActionListener( handler ); passwordField.addActionListener( handler ); setSize( 325, 100 ); setVisible( true ); } // hm main public static void main( String args[] ) { TextFieldTest application = new TextFieldTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // Lp ni cho b lng nghe s kin private class TextFieldHandler implements ActionListener { // phng thc x l s kin public void actionPerformed( ActionEvent event ) { String string = ""; // khi ngi dng n enter if ( event.getSource() == textField1 ) string = "textField1: " + event.getActionCommand(); // user pressed Enter in JTextField textField2 else if ( event.getSource() == textField2 ) string = "textField2: " + event.getActionCommand();

122

// user pressed Enter in JTextField textField3 else if ( event.getSource() == textField3 ) string = "textField3: " + event.getActionCommand(); // user pressed Enter in JTextField passwordField else if ( event.getSource() == passwordField ) { JPasswordField pwd = ( JPasswordField ) event.getSource(); string = "passwordField: " + new String( passwordField.getPassword() ); } JOptionPane.showMessageDialog( null, string ); // Hin th ca s thng bo } } }

III.8 Thanh trt (Scrollbar) Ta c th t thanh trt cc gi tr gii hn ti thiu (min) v ti a (max) cng vi v tr hin ti trn thanh trt. Khi ngi dng kch chut vo mi tn hai u th tnh hung line ny sinh, thanh trt s t ng cng thm hay tr i mt n v. Tnh hung page ny sinh khi ngi dng kch chut vo khong gia thanh trt, v tr hin hnh s thay i. Tnh hung absolute ny sinh khi ngi dng nm vo v tr hin hnh ca thanh trt v ko n i. i tng Scrollbar ch chu trch nhim di chuyn v cung cp cho ta gi tr thay i. To thanh trt: Phng thc khi to: public Scrollbar(); To thanh trt ng hay ngang ta dng: public Scrollbar(int orienttation); orienttation nhn gi tr Scrollbat.VERTICAL - cho ng, Scrollbar.HORIZONTAL cho nm ngang. To thanh trt c y thng s ban u: public Scrollbar(int orienttation, int pos, //v tr khi u int pageUnit, //bc nhy int minValue, //gi tr min int maxValue); //gi tr max Mt s phng thc hay dng: Thay i gi tr tng gim (mc nh l 1): public void setUnitIncrement(int increment); Mun bit hin thi tng gim bao nhiu: public int getUnitIncrement() Ch nh con s khi tnh hung page xy ra: pubic void setBlockIncrement(int b); Mun bit hin thi n v thay i l bao nhiu: public int getBlockIncrement(); Ly gi tr ln nht v nh nht: public int getMaximum(); public int getMinimum(); t li v tr hin hnh cho thanh trt: public void setValue(int newPos); Cho ta v tr hin hnh: public int getValue(); Mun bit thanh trt ng hay ngang: public int getOrientation() tr v gi tr l mt trong hai hng s Scrollbar.VERTICAL v Scrollbar.HORIZONTAL.

123

Thit lp li cc thng s cho thanh trt: public void setValues(int position, int pageUnit, int minimum, int maximum); v d: myScrollbar.setValues(75, 10, 0, 500); S dng thanh trt: Ta nh i tng x l tnh hung x l: public void adjustmentValueChanged(AdjustmentEvent evt); C 3 trng thi: line, page v absolute. Ta s dng hm getAdjustmentType() xc nh xem tnh hung no ang xy ra. AdjustmentEvent.UNIT_INCREMENT: tnh hung line xy ra, v tr thanh trt tng 1 n v. AdjustmentEvent.UNIT_DECREMENT: tnh hung line xy ra, v tr thanh trt gim 1 n v. AdjustmentEvent.BLOCK_INCREMENT: tnh hung page xy ra, v tr hin hnh tng 1 v. AdjustmentEvent.Track: tnh hung absolute xy ra, ta ly v tr thanh trt bng hm getValue().

IV. Thnh phn Menu


Lp JMenuBar ci t thanh thc n v trong c th cha cc thc n pull-down. Cc JMenuBar c to ra gn vo mt ca s JFrame bng mt lnh gi: JMenuBar menuBar = new JMenuBar(); JFrame frm = new JFrame(Day la mot Frame); frm.setJMenuBar(menuBar); // MenuBar ny cha c phn t no Sau khi c MenuBar, ta cn thm vo cc JMenu l cc mc trn thanh Menu, khi ngi dng chn vo s s xung danh sch cc mc chn khc. JMenu file = new JMenu(File); Ta t cho n mt phm tt, v d l F khi n Alt + F th JMenu ny c kch hot: file.setMnemonic('F'); Sau th thm n vo JMenuBar: menuBar.add(file); By gi l lc ta ci t cc mc chn trong mt JMenu. Java dng lp JMenuItem nh ngha tng mc ca thc n. JMenuItem open = new JMenuItem(Open,O); y ta gi mt constructor vi mt tham s l nhn ca mc chn, mt tham s l k t phm tt. Sau ta add vo JMenu: file.add(open); Nu ta cn biu din cc dng k ngang phn tch cc mc chn th ta c th gi phng thc addSeparator() ca mt i tng JMenu: file.addSeparator(); Lp JPopUpMenu biu din cho thc n pop-up. Nhng thc n ny c th xut hin bt c v tr no trong ca s hin ti. Lp JCheckBoxMenuItem cha cc mc c chn kim tra trong cc mc thc n. To thanh trnh n: JMenuBar myMenubar = new JMenuBar(); t trng thi cho mi mc chn s dng enable() hoc disable(): Vi d: openItem.enable(); //c chn openItem.disable(); //m mc chn Ta c th dng ng phn cch tch cc mc chn:

124

FileMenu.addSeparator(); To mc chn c cha menu con khc, ta to mt menu bnh thng ri a vo menu c. V d: //to mc chn c menu con JMenu printItem = new JMenu("Print"); //to cc mc chn cho menu con printItem.add("Print preview"); printItem.add("to preview"); //a mc chn c menu con vo menu chnh FileMenu.add(printItem); To mt mc chn c kh nng nh du (check Item), mt du kim tra (check mark) s hin bn tri mc chn: Mc nh du: CheckboxMenuItem Autosave = new CheckboxMenuItem("Auto save"); FileMenu.add(Autosave); Xc nh xem mc chn Autosave ang trng thi no, ta dng: Autosave.getState(); Khi s dng, mc chn tng tc v nhn c s kin ta cn ci t giao din ActionListener v gn vo tng mc chn. Sau y l mt v d xy dng mt JFrame vi thanh menu v cc mc chn trong c ci t x l cc s kin. import javax.swing.*; import java.awt.*; import java.awt.event.*; class MenuBarSample extends JFrame { //Khai bao mot hop thoai JOptionPane op = new JOptionPane(); // Khai bao mot thuc don pop-up JPopupMenu jp; public MenuBarSample() { // Lay ve doi tuong chua cua Frame hien tai Container pane = this.getContentPane(); // Dat kieu trinh bay pane.setLayout(new FlowLayout(FlowLayout.LEADING)); // Khai bao mot thanh menu JMenuBar menuBar= new JMenuBar(); // Khai bao muc File trong thanh menu JMenu menuFile= new JMenu("File");menuBar.add(menuFile); // Dat ky tu kich hoat tat cung Alt menuFile.setMnemonic('F'); // Khai bao mot muc chon voi phim tat O JMenuItem fileOpen = new JMenuItem("Open",'O'); // Them muc chon vao muc File menuFile.add(fileOpen); // Them mot muc chon khac voi phim tat N menuFile.add(new JMenuItem("New",'N')); // Them dong ngan cach 125

menuFile.addSeparator(); // Them mot muc chon co ten Save menuFile.add("Save"); // Xu ly su kien chon muc Open fileOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { // Hien thi thong bao, getContentPane() de lay Container cua Frame op.showMessageDialog(getContentPane(),"Ban vua chon Open"); } } ); // Xu ly su kien chon New menuFile.getItem(1).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { op.showMessageDialog(getContentPane(),"Ban vua chon New"); } } ); // Xu ly su kien chon Save menuFile.getItem(3).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { op.showMessageDialog(getContentPane(),"Ban vua chon Save"); } } ); // Khai bao mot muc chon kieu checkbox JCheckBoxMenuItem chk = new JCheckBoxMenuItem("is editting"); // Them phan xu ly su kien chon hay khong chon cho no chk.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // Lay ve doi tuong nguon su kien va ep kieu JCheckBoxMenuItem ck = (JCheckBoxMenuItem)e.getSource(); if (ck.isSelected()) //Neu duoc chon op.showMessageDialog(getContentPane(),"Ban vua chon is editting"); else // Neu khong duoc chon op.showMessageDialog(getContentPane(),"Ban vua bo chon is editting"); } } ); // Them muc chon checkbox vao menu File menuFile.add(chk); 126

// Dat thanh Menu cho Frame la doi tuong menuBar this.setJMenuBar(menuBar); // Cap phat bo nho cho popup menu jp = new JPopupMenu("Popup"); jp.add("Create"); jp.addSeparator(); jp.add("New Document"); this.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if( (e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK) jp.show(getContentPane(),e.getX(),e.getY()); } } ); } public static void main(String[] argvs) { MenuBarSample m = new MenuBarSample(); m.setSize(300,400); m.setVisible(true); } }

V. B qun l cch trnh by (Layout Manager)


Dng sp xp ch v nh v cho cc i tng GUI. C 5 cch trnh by: FlowLayout: sp xp cc i tng t tri qua phi v t trn xung di. Cc i tng gi nguyn kch thc. GridLayout: to mt khung li v hnh vi cc bng nhau, cc i tng s t va kch thc vi cc . BorderLayout: Cc i tng c t theo ng vin ca khung cha theo cc cnh West, East, South, Nort v Center. CardLayout: Cc i tng c t va vn vi khung cha v nm chng ln nhau nh cc l bi. GridBadLayout: cc i tng trong khung cha cng c a vo cc ca mt khung li v hnh, kch thc cc i tng khng nht thit phi va mt . Mun p dng ta to ra i tng trn ri chuyn n cho khung cha. V du: FlowLayout objectsLayout = new FlowLayout(); myWindow.setLayout(objectsLayout); hay c th vit gn hn: myWindow.setLayout(new FlowLayout());

127

V.1 Cch trnh by FlowLayout: To i tng FlowLayout, ta s dng phng thc: public FlowLayout(); hoc ch nh lun cch cn l bng phng thc khi to: public FlowLayout(int align); align l FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER hoc ch ra khong cc gia cc i tng trn cng mt hng: public FlowLayout(int align, int hgap, int vgap); V.2 Cch trnh by GridLayout: Phng thc khi to: public GridLayout(int Rows, int Cols); V d: GridLayout layout = new GridLayout(3, 2); Xc nh khong cch gia cc i tng qun l: public GridLayout(int Rows, int Cols, int hgap, int vgap); V.3 Cch trnh by BorderLayout i tng c t theo ng vin khung cha, theo cc cnh ca khung. To b qun l kiu BorderLayout: public BorderLayout(); V d: myWindow.setLayout(new BorderLayout()); Khi a i tng vo khung cha, ta phi nh hnh trc i tng t u: myWindow.add("North", new Button("on Top")); c 5 kiu: "North", "South", "West", "East", "Center".

VI. Cc hp thoi
VI.1 Hp thoi thng bo Khi cn a ra thng bo hay hi ngi dng mt vn g v nhn v cu tr li, ta dng hp thoi thng bo. Java h tr lp JOptionPane ta thc hin cng vic ny. Lp JOptionPane c 4 phng thc tnh sau: Tn phng thc Gi tr tr v ngha showMessageDialog Khng c showConfirmDialog S int showOptionDialog showInputDialog S int Chui Hin th mt thng bo v i n OK Hin th thng bo v i xc nhn Ok hay Cancel Hin th thng bo v nhn v tr li t mt danh sch chn Hin th thng bo v nhn v mt dng do user nhp vo

icon hin th ph thuc vo loi thng bo: ERROR_MESSAGE : Thng bo li INFORMATION_MESSAGE : Thng tin WARNING_MESSAGE :Cnh bo QUESTION_MESSAGE: Hi 128

PLAIN_MESSAGE: Gii thch Cc hng s ny c truy cp qua JOptionPane. V d: int selection = JOptionPane.showConfirmDialog(parent, "Message", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); if (selection == JOptionPane.OK_OPTION) . . .

"Title",

VI.2 Hp thoi chn File Khi vit ng dng ta gp cc tnh hung m file c hoc ghi. Swing h tr mt lp JFileChooser ta thc hin cng vic ny. Hai phng thc quan trng l: - showOpenDialog: hin th hp thoi chn m file - showSaveDialog: hin th hp thoi chn ghi file Sau y l cc bc lm vic vi hp thoi chn file: 1- To mt i tng JFileChooser: JFileChooser chooser = new JFileChooser(); 2- t th mc cho hp thoi: chooser.setCurrentDirectory(new File(".")); 3- Nu nh chn trc mt file, c th t: chooser.setSelectedFile(new File(filename)); 4- cho php chn nhiu file: chooser.setMultiSelectionEnabled(true); 5- Nu mun gii hn kiu file, dng b lc file. dng c b lc file ta phi thit k mt lp k tha t lp javax.swing.filechooser.FileFilter. V d b lc file Gif: public class GifFilter extends FileFilter { public boolean accept(File f) { return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory(); } public String getDescription() { return "GIF Image"; } } Sau gn cho hp thoi: chooser.setFileFilter(new GifFilter()); 6- Mc nh th ch cho php chn file, nu mun cho php chn th mc dng phng thc: setFileSelectionMode() vi cc tham s: JFileChooser.DIRECTORIES_ONLY hoc JFileChooser.FILES_AND_DIRECTORIES. 7- Hin th hp thoi bng lnh gi: int result = chooser.showOpenDialog(parent); hoc int result = chooser.showSaveDialog(parent); Cc gi tr tr v l JFileChooser.APPROVE_OPTION, JFileChooser.CANCEL_OPTION, or JFileChooser.ERROR_OPTION 8- Ly v file hoc cc file c chn dng: getSelectedFile() hoc getSelectedFiles(). Neus ch mun ly tn file th ta dng phng thc getPath(). String filename = chooser.getSelectedFile().getPath();

129

VI.3 Hp thoi chn mu Swing h tr lp JColorChooser ngi dng chn mu. C php s dng nh sau: Color selectedColor = JColorChooser.showDialog(parent,title, initialColor); Khi lm vic vi hp thoi chn mu ta cn cung cp: - parent: mt companent cha; - title: Tiu hp thoi; - ch hp thoi modal hay modeless; - mt i tng chn mu - b lng nghe cho nt bm Ok v Cancel. chooser = new JColorChooser(); dialog = JColorChooser.createDialog(parent,"Background Color", false /* not modal */, chooser, new ActionListener() // Lng nghe cho OK { public void actionPerformed(ActionEvent event) { setBackground(chooser.getColor()); } }, null /* Khng c lng nghe cho Cancel */);

Bi tp
1. Hy thit k mt giao din c ni dung nh sau:

2. Hy lp trnh x l s kin click chut phi ln nn ca s s hin mt menu Popup. 3. Vit chng trnh gii phng trnh bc 2 vi giao din GUI. Yu cu chng trnh c cc nhp cc h s a, b, c v cho php xem kt qu. Trng hp khng c nghim s hin th mt hp thoi thng bo chng trnh v nghim. 4. Vit chng trnh trnh by mt mn hnh nh sau:

130

131

ti 11. Threading
Java l ngn ng thng dng duy nht h tr cho lp trnh vin cc gii php lp trnh song song. Lp trnh vin xc nh s lng cc thread c chy trong chng trnh v chng c thc hin song song vi nhau nhng giai on no. Kh nng ny ca Java gi l tnh a lung.

I. Khi nim thread


I.1 Khi nim Thread lung ch mt n v chng trnh c th tch khi cc phn khc ca chng trnh thc hin song song vi cc phn khc tng khong thi gian hoc trong ton b qu trnh n thc hin. Trong mi chng trnh Java, c mt lung chnh c bt u bng vic gi hm main(), cc lung khc c th pht sinh t lung chnh ny. Cc cu lnh trong hm main() nu khng c a vo mt lung ring th s c thc hin tun t. I.2. Lp Thread Lp Thread trong gi java.lang c mt s constructor: Public Thread (<tn thread>) Public thread(): Khi ny thread s c tn l Thread_1, Thread_2,. Cc cng vic ca mt thread c t trong phng thc run(). Phng thc ny c th c khai bo chng trong lp khai bo k tha Thread hoc khai bo ci t giao din Runable. Ngi lp trnh bt u mt thread bng cc gi phng thc start(), phng thc start() sau s gi run(). Sau khi start() thc hin xong, n tr v iu khin cho chng trnh gi n. Do , chng trnh gi n v thread c thc hin mt cch ng thi. Phng thc start() s nm ra mt ngoi l IllegalThreadStateException nu thread cn bt u bt u ri. Phng thc tnh sleep ca Thread c gi vi mt tham s xc nh rng mt thread ang chy s dng li trong bao lu theo n v phn nghn giy. Trong khi mt thread sleep, n s khng tiu tn ti nguyn CPU v thread khc c th chy. Phng thc interrupt() c gi ngt mt thread. Phng thc ny tr v true nu ngt thnh cng. Phng thc isInterrupted() dng kim tra xem thread c b ngt hay khng. Phng thc isAlive() tr v true nu start() c gi v phng thc run() vn ang thc hin. Phng thc setName() t tn cho mt thread, getName() ly tn mt thread. Phng thc toString() tr v tn phng thc, u tin v nhm ca thread. Phng thc static currentThread() tr v tham chiu ti thread hin hnh ang thc hin. Phng thc joint i (wait) mt phn hi ca mt thng ip c gi i trc khi thc hin thread. I.3 Cc bc to mt thread Sau y l cc bc n gin thc hin mt nhim v trong mt thread ring: 132

1. Khai bo mt lp c ci t giao din Runable vi phng thc run() c nh ngha: class MyRunnable implements Runnable { public void run() { // code thc hin } } 2. To mt i tng ca lp Runnable r = new MyRunnable(); 3. To mt i tng Thread t i tng Runable trn: Thread t = new Thread(r); 4. Gi phng thc start() t.start(); Mt thread cng c th c to ra bng cch xy dng mt lp con ca lp Thread: class MyThread extends Thread { public void run() { // code ca thread } } Sau ta cng lm theo cc bc 2,3 v 4 thc hin thread.

II. Cc trng thi ca thread.


Trng thi born: Khi thread cha gi start(). Trng thi ready: Khi phng thc start() c gi. Trng thi running: Mt Thread trng thi ready c quyn u tin cao nht s c chuyn sang trng thi ny. Trng thi dead: Khi mt Thread ngng hoc hon thnh nhim v ca n. Ngoi ra, mt thread running cng c th b chn (blocked) trong cc thao tc vo ra. Lc ny n cng khng s dng ti nguyn CPU. Trng thi sleep: Khi Thread gi phng thc sleep. Nu ang trng thi sleep m gi phng thc interrupt(), tread s thot khi trng thi sleep v chuyn sang trng thi ready. Sau y l s trng thi ca mt thread.

133

Khi mt thread ang chy gi phng thc wait(), thread s ri vo mt trng thi wait i mt i tng m n gi.

III. Cc thuc tnh ca thread


III.1 u tin ca thread Mi Thread c mt u tin. Mc nh th thread tha k u tin t thread cha ca n- l thread gi n. Ta c th tng hoc gim u tin ca bt k thread no vi phng thc setPriority() bng mt gi tr nm gia MIN_PRIORITY(1) v MAX_PRIORITY (10). Trnh t thc hin ca cc thread theo u tin ca n c minh ha nh sau:

134

Cc thread c u tin cng cao th kh nng thc hin cng cao. Cc thread c cng u tin s c xp vo mt hng i. III.2 Nhm thread Cc thread c th c a vo cng mt nhm c th ng thi lm vic vi c nhm thread ny. Khai bo mt nhm Thread: String groupName = . . .; ThreadGroup g = new ThreadGroup(groupName) Sau , vi mi thread c to ra ta dng constructor c khai bo nhm thread: Thread t = new Thread(g, threadName); kim tra xem c thread no trong nhm g cn hot ng khng, ta dng phng thc: g. activeCount(); ngt tt c cc thread trong nhm g ta gi: g.interrupt(); III.3 Qun l cc ngoi l ca thread Phng thc run() khng th nm ra mt ngoi l c kim sot m b kt thc bi mt ngoi l khng kim sot c mi khi c li. Khng c mnh catch no c thc hin m

135

thay vo , trc khi thread b dead, ngoi l ny s c gi cho mt b x l ngoi l khng c kim sot. B x l ny phi thuc mt lp c ci t giao din Thread.UncaughtExceptionHandler ch vi 1 phng thc: void uncaughtException(Thread t, Throwable e); T phin bn Java 1.5, ta c th ci b x l ngoi l cho bt c thread no bng phng thc: setUncaughtExceptionHandler(). Mgoaif ra ta c th ci b x l ngoi l mc nh cho tt c cc thread bng cch gi phng thc setDefaultUncaughtExceptionHandler ca lp Thread. Nu khng ci b x l ngoi l cho mt thread th mc nh l null. Tuy nhin, cc thread ring li ph thuc vo b x l ca nhm thread cha n. Khi ny, phng thc uncaughtException s lm cc vic sau: 1- Nu nhm thread c ci t uncaughtException th phng thc c gi. 2- Ngc li, nu phng thc Thread.getDefaultExceptionHandler tr v mt b x l khng phi l null th b x l ny c gi. 3- Nu l null, nu Throwable l mt i tng ca TheadDead, khng c g xy ra. 4- Nu khng, tn ca thread v stack trace c gi ti System.err v a ra mn hnh.

IV. iu khin cc thread


Sau khi khi ng c mt thread ri, vn tip theo s l iu khin thread. IV.1 Interrupt mt thread Khi s dng phng thc Thread.sleep(int) th chng trnh thng phi bt cc ngoi l x l. L do l thread b dng li trong mt khong thi gian lu v trong khong thi gian n khng th t nh thc n c. Tuy nhin, nu mt thread cn phi c nh thc sm hn, ta c th ngt n dng phng thc interrupt(). public class SleepyHead extends Thread { // Phng thc c chy khi thread khi ng ln u public void run() { System.out.println ("Thread ang ng. Hy nh thc n"); try { // Ng trong 8 ting Thread.sleep( 1000 * 60 * 60 * 8 ); System.out.println (" l mt gic ng tra"); } catch (InterruptedException ie) { System.err.println ("Ch mi c hn 5 pht thi...."); } } // Phng thc main to v bt u thread public static void main(String args[]) throws java.io.IOException {

136

// To mt thread Thread sleepy = new SleepyHead(); // bt u thread sleepy.start(); // Nhc ngi dng dng thread System.out.println ("Nhn Enter ngng thread"); System.in.read(); // Ngt thread sleepy.interrupt(); }} Cch thc hin y l gi mt thng ip t mt thread khc nh thc mt thread ang ng. y, thread chnh- hm main- s i cho ngi dng n enter, sau gi mt thng ip ngt ti thread ang ng. IV.2 Dng mt thread i khi ta mun mt thread dng li trc khi nhim v ca n hon thnh. Mt thread (gi l thread iu khin) c th gi mt thng ip dng ti mt thread khc bng vic gi phng thc Thread.stop(). iu ny yu cu thread iu khin phi gi mt tham chiu ti thread mun dng. public class StopMe extends Thread { // Phng thc c thc hin khi thread khi ng ln u public void run() { int count = 1; System.out.println ("Thread m!"); for (;;) { // In ra bin count v tng gi tr cho n System.out.print (count++ + " "); // Ng na giy try { Thread.sleep(500); } catch (InterruptedException ie) {} }} // phng thc main public static void main(String args[]) throws java.io.IOException { // To v bt u thread Thread counter = new StopMe(); counter.start(); // Nhc ngi dng System.out.println ("Nhn Enter dng m"); System.in.read(); // Dng thread counter.stop(); }}

137

IV.3 Tm dng v phc hi mt thread Cc phng thc suspend() dng tm dng mt thread trong khi resume() dng tip tc mt thread b suspend. Tuy nhin s dng cc thread ny rt hay gy ra tnh trng deadlock do thread b suspend ang chim gi mt ti nguyn v khng gii phng trong khi nhiu thread khc c th ang i s dng ti nguyn . IV.4 Gii phng thi gian cho CPU Khi mt thread ri vo trng thi i mt s kin xy ra hoc i vo mt vng m lnh m nu gii phng thi gian cho CPU s nng cao hiu qu ca h thng. Trong trng hp ny, thread nn gii phng thi gian h thng hn l dng sleep() ngh trong thi gian di. lm iu ny ta dng phng thc static yield() ca Thread gii phng thi gian CPU cho thread hin thi. Ta khng th gii phng thi gian CPU ca bt k thread no m ch i vi thread hin thi. IV.5 i mt thread kt thc cng vic i khi ta cn i cho mt thread kt thc mt cng vic no nh gi mt phng thc hay c mt thuc tnh thnh phn,Ta dng phng thc isAlive() xc nh thread cn chy khng. Tuy nhin, nu thng xuyn dng phng thc ny kim tra sau dng sleep() hoc yield() th hiu qu s dng CPU s rt thp. Mt cch hiu qu l gi phng thc joint() i mt thread kt thc cng vic. public class WaitForDeath extends Thread { // Phng thc run() public void run() { System.out.println ("thread chun b ngh...."); // Ngh trong 5 giy try { Thread.sleep(5000); } catch (InterruptedException ie) {} } // phng thc main public static void main(String args[]) throws java.lang.InterruptedException { // To thread Thread dying = new WaitForDeath(); dying.start(); // Nhc user System.out.println ("i cho thread kt thc"); dying.join(); System.out.println ("Thread dng");}}

138

V. ng b thread
Trong hu ht cc chng trnh a lung, cc thread c th cn phi truy cp n cng mt i tng. iu g xy ra nu c hai thread cng truy cp n i tng v lm thay i thuc tnh i tng. Kt qu c th l cc thread b nh hng ln nhau v khng t c kt qu mong mun. Tnh trng ny gi l ua tranh. V.1 Tnh trng ua tranh Trong phn tip theo, chng ta m phng mt ngn hng c rt nhiu ti khon khch hng. Chng ta th thit k mt chng trnh chuyn tin ngu nhin gia cc ti khon. Mi ti khon c mt thread ring. Mi giao dch thc hin vic chuyn tin t account sang mt account ngu nhin khc. Ta c mt class Bank vi phng thc transfer chuyn tin. Nu account chuyn khng tin, giao dch kt thc ngay. public void transfer(int from, int to, double amount) { System.out.print(Thread.currentThread()); accounts[from] -= amount; System.out.printf(" %10.2f from %d to %d", amount, from, to); accounts[to] += amount; System.out.printf(" S d: %10.2f%n", getTotalBalance()); } Sau y l on code cho class transferRunnable: class TransferRunnable implements Runnable { ... public void run() { try { int toAccount = (int) (bank.size() * Math.random()); double amount = maxAmount * Math.random(); bank.transfer(fromAccount, toAccount, amount); Thread.sleep((int) (DELAY * Math.random())); } catch(InterruptedException e) {} } } Khi chng trnh chy, ta khng bit c trong mi ti khon cn bao nhiu tin nhng tng s tin ca tt c cc ti khon l khng i. Chng trnh trn chy v khng bao gi dng li, ta phi n Ctrl + C dng n. Tuy nhin, trong mt s tnh hung chng trnh trn c th gy li v in ra tng s tin khc nhau, l khi c nhiu hn mt ti khon cng chuyn tin n mt ti khon khc, tc l cng thc hin cu lnh: account[to] += amount;

139

Gi s y l mt hnh vi n v (atomic- hnh vi ch chim mt thao tc thc hin lnh ca CPU), khi mi thread s thc hin php tnh ny mt cch tun t m khng gy nh hng v trong mt thi im, CPU cng ch phc v c cho mt thread. Tuy nhin, php tnh ny li khng phi l atomic, cng vic c th phi lm l: 1- Load gi tr account[to] vo thanh ghi 2- Cng vi account 3- Load kt qu ngc tr li cho account[to] Gi s c 2 thread l thread_1 v thread_2 cng thc hin n dng lnh ny. Thread_1 thc hin xong bc 1 v 2 th b ngt, sau thread_2 s thc hin cu lnh trn vi y 3 bc tc l account[to] b thay i gi tr. Tip theo, thread_1 thc dy v lm tip bc 3, account[to] lc ny ghi gi tr do thread_2 cp nht. iu ny dn ti vic tng s tin b thay i, phn tin do thread_2 chuyn cho account[to] b mt. V.2 Kha i tng Trong v d trn, nu ta m bo rng phng thc transfer() c thc hin thnh cng trc khi thread b ngt th s khng c vn g xy ra. C ngha l, trong mt thi im s ch c mt thread c truy cp vo mt on m lnh no . T phin bn Java 5.0 c h tr hai c ch bo v mt khi lnh khi s truy cp ng thi. Cc phin bn trc ca Java s dng t kha synchronized, Java 5.0 gii thiu thm lp ReentrantLock cho mc ch ny. Cu trc on lnh cn bn s dng c ch ny l: myLock.lock(); // i tng ReentrantLock try { //on lnh cn bo v } finally { myLock.unlock(); // m bo kha c m k c khi exception xy ra } on lnh ny m bo rng ch c mt thread ti mt thi im c th i vo vng c bo v. Khi mt thread u tin gi lock th khng mt thread no sau c th vt qua lnh lock(). By gi chng ta s kha phng thc transfer() trong lp Bank: public class Bank { public void transfer(int from, int to, int amount) { bankLock.lock(); try { if (accounts[from] < amount) return; System.out.print(Thread.currentThread()); accounts[from] -= amount; System.out.printf(" %10.2f from %d to %d", amount, from, to); accounts[to] += amount; System.out.printf(" Total Balance: %10.2f%n", getTotalBalance()); 140

} finally { bankLock.unlock(); } } ... private Lock bankLock = new ReentrantLock(); // ReentrantLock l mt lp ci t giao din lock. } V.3 i tng iu kin Trong trng hp thread i vo vng bo v, n cn hon thnh cng vic c th m kha cho cc thread khc i vo. Tuy nhin, nu trong cng vic chnh cn thc hin b gii hn bi mt iu kin no , chng hn y, vic gi transfer() chuyn tin ch c thc hin khi s tin ca account gi ln hn s tin c gi: if (bank.getBalance(from) >= amount) bank.transfer(from, to, amount); Khi c iu kin ny, mt thread c th khng tha mn v n khng thc hin vic chuyn tin, tc l cng vic ca n l khng hu ch. n y, ta c th ngh ra mt gii php l thread i cho n khi n c tin chuyn: public void transfer(int from, int to, int amount) { bankLock.lock(); try { while (accounts[from] < amount) // i cho n khi ti khon ca n c tin { // i ... } // Chuyn tin ... } finally { bankLock.unlock(); } } Vic i y s kt thc khi mt thread khc chuyn tin vo cho n. Tuy nhin ta thy rng vng cha lnh chuyn tin li ang b kha bi chnh thread ny nn cc thread khc khng th chuyn tin c. Kt qu l thread ny khng bao gi thot khi tnh trng i, chng trnh ri vo deadlock. y l tnh hung m ta phi s dng i tng iu kin: class Bank { public Bank() 141

{ ... sufficientFunds = bankLock.newCondition(); } ... private Condition sufficientFunds; } Nu phng thc transfer() kim tra v thy rng n cha tin chuyn th n s gi: sufficientFunds.await();Lc ny n s nm ch thread khc chuyn tin. C mt s khc nhau cn bn gia mt thread ang i kha (gi phng thc lock() i vo vng bo v) v thread gi phng thc await(). N s khng th m kha khi ang nm trong vng kha cho n khi mt thread khc gi signalAll(). Mt thread thc hin xong vic chuyn tin, n nn gi: sufficientFunds.signalAll() m kha cho cc thread ang nm i tha mn iu kin tin. Mt khi thread thot khi tnh trng i do await() gy ra, n s c chy tip v c gng i vo vng kha v bt u t v tr m n ch i trc - v tr gi phng thc await() v kim tra li iu kin. Mt phng thc await() nn c gi trong mt vng lp i: while (!( tin)) condition.await(); Nu khng c thread no gi signalAll() th thread ang i khng c cch no chy tip c. Nu tt c cc thread khc u ang b chn, thread gi await() khng gi phng tnh trng ny cho mt thread no th bn thn n cng b chn, chng trnh s b treo. Vn l khi no th gi signalAll()? Nguyn tc chung l khi mt thread hon thnh vic thay i trng thi i tng th n nn gi signalAll(). y, sau khi cng tin vo cho ti khon nhn v th signalAll() s c gi. Vic gi ny s gip cc thread cng ang trong tnh trng ch i ny khng b chn na v tip tc cng vic vi mt gi tr ti khon c th b thay i. public void transfer(int from, int to, int amount) { bankLock.lock(); try { while (accounts[from] < amount) sufficientFunds.await(); // Chuyn tin ... sufficientFunds.signalAll(); } finally { bankLock.unlock(); } } Ch l vic gi signalAll() khng phi l kch hot thread b chn ngay lp tc. N ch gii phng tnh trng b chn ca cc thread khc cho n khi n kt thc on chng trnh c bo v. Mt phng thc khc l sign() ch trao kha cho mt thread xc nh thay v tt c. Mt thread ch c th gi cc phng thc signalAll(), sign() v await() trong vng c bo v. 142

Chng ta c th kt thc phn ny bng mt cu chuyn minh ha: C 10 ngi cng n ngn hng chuyn tin cho nhau, mi ngi chuyn cho mt ngi khc trong s 9 ngi cn li. Mi thi im ngn hng ch chuyn tin cho mt ngi, ngi c gi tin s c vo trong ngn hng v gi kha cng, 9 ngi khc phi ch ngoi cng. Nu chng may ngi ang thc hin chuyn s tin ln hn anh ta c, anh ta s i trong ngn hng (gi await()) v nm kha ra ngoi cng cho tt c 9 ngi kia. Mt trong s 9 ngi ngoi cng s c i vo trong ngn hng, thc hin vic chuyn tin. Sau khi chuyn xong, anh ta thng bo cho tt c cc anh khc ang phi i trong ngn hng l mnh va chuyn tin (gi signalAll()) ri i ra ngoi, sau nhng ngi ang i cng quay ra cng i n lt vo.

Bi tp
1. Vit mt chng trnh to mt thread thc hin vic gii mt phng trnh bc 2 vi cc h s cho trc. 2. Vit chng trnh song song vi 10 thread cng 10000 s t nhin lin tip t 1 n 10000.

143

Ph lc A. Cc t kha ca Java
T kha abstract assert boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long ngha Mt lp hoc phng thc tru tng c s dng nh v li ni b chng trnh Kiu boolean Thot khi lnh switch hoc cc vng lp S nguyn 1 byte Mt la chn ca switch Mt mnh ca khi Try bt mt ngoi l Kiu k t Unicode nh ngha mt class Khng c s dng Tip tc ti v tr cui vng lp hin thi Mnh mc nh ca switch Phn trn ca vng lp do/while Kiu s thc floating-number 8 byte Mnh else ca mt lnh if Xc nh lp cha ca mt lp Mt hng s, hoc mt lp hay phng thc khng th b khai bo chng. Mt phn ca khi try m lun c thc hin S thc 4 byte Mt kiu vng lp Khng s dng Mt lnh iu khin r nhnh Ch ra cc interfaces m lp s ci t. Nhp mt package Kim tra xem i tng c phi l biu hin ca mt lp S nguyn 4 byte Mt kiu tru tng vi cc phng thc c ci t ti cc class S nguyn 8 byte

144

T kha Native new null package private protected public return short static strictfp super switch this throw tHRows transient try void volatile while

ngha phng thc c ci t bng ngn ng khc. Cp pht vng nh cho mt i tng hoc mng mi Mt tham chiu null Mt gi cc lp Gii hn phm vi truy cp ch trong lp Gii hn phm vi truy cp trong lp, cc lp dn xut v cc lp trong cng gi Khng gii hn phm vi truy cp. Tr v gi tr trong mt phng thc Kiu s nguyn 2 byte. Mt gi tr tn ti phm vi lp Use strict rules for floating-point computations i tng hoc constructor lp cha Cu ln la chn i tng ngm nh ca mt lp qung ra mt ngoi l Cc exceptions m mt phng thc c th qung nh du d liu khng c nh Khi lnh bt li K hiu cho mt phng thc khng tr v gi tr ensures that a field is coherently accessed by multiple threads Vng lp

synchronized Mt phng thc hoc khi lnh ch thuc v mt thread

Ph lc B Mt s hm hay s dng
a) Hm ton hc, lp java.lang.Math; {java.math.*;} 1. abs(number x): ly |x|, x c th l cc kiu long, int, float, double. 2. acos(double x) = arccos(x). x t 0.0 ... PI 3. asin(double x) = arcsin(x). x t -PI/2 ... PI/2 4. atan(double x) = arctag(x). 5. ceil(double x): lm cn trn hoc cn di ca s x. 6. cos(double x) = cos(x). x l radian. 7. exp(double x) = ex. 8. log(double x) = Ln(x).

145

9. max(number x, number y) = max{x, y}, trong x, y c th l kiu int, float, double, long. 10. min(number x, number y) = min{x, y}, trong x, y c th l kiu int, float, double, long. 11. pow(double x, double y) = xy. 12. random(): cho mt s ngu nhin trong [0.0, 1.0]. 13. round(number x): lm trn s x, nu x l kiu double th thnh kiu long, nu x l kiu float th thnh kiu int. 14. sin(double x) = sin(x). 15. sqrt(double x) = 16. tan(double x) = tg(x). Khi s dng ta phi dng Math.tn_hm. b) Lp String, khai bo java.lang.String; 1. String() : Khi ng mt i tng chui. 2. String(String s) : Khi ng mt chui bng chui s. 3. length() : tr v gi tr int l di mt chui. 4. charAt(int i): tr v mt k t th sau i. 5. indexOf(int ch): tr v v tr trc ca k t ch u tin tm thy. 6. concat(String str): ni thm chui str vo sau. 7. toLowerCase(): thay i chui thnh ch thng. 8. toUpperCase(): chuyn i chui thnh ch HOA. Lp Date khai bo java.util.Date; 1. Date(): cho th, thng, ngy, gi, nm. 2. getDate(): tr v gi tr ca ngy trong thng. 3. getDay(): tr v gi tr int l th trong tun, 0 = CN, 1 = mon, ..., 6 = Sat. 4. getMonth(): tr v gi tr int l thng trong nm (0..11). 5. getYear(): tr v gi tr int l nm. Ly mc l 1900, nm thc = date.getYear() +1900. 6. getTime(): tr v l mt s c tnh theo giy ng h. 7. getHours(): tr v gi tr int ch gi trong ngy. 8. getMinutes(): tr v gi tr int ch pht trong gi. 9. getSeconds(): tr v gi tr int ch giy ng h trong pht. 10. setDate(int date) t li ngy trong bin. date ly gi tr t 1..31 11. setMonth(int month): thay i gi tr thng trong bin date. month c gi tr 0..11. 12. setYear(int year): thay i gi tr nm trong bin date. (year + 1900). 13. setHours(int hour): thay i gi tr gi trong bin date. 14. setMinutes(int i): thay i gi tr pht trong bin date. 15. setSeconds(int i): thay i gi tr giy trong bin date.

Ti liu tham kho


[1] Alistair Cockburn (2000), Writing Effective Use Cases, Addison-Wesley Longman. [2] Cay S. Horstmann, Gary Cornell (2004), Core Java 2, volume 1,2, Prentice Hall PTR. [3] David Reilly, Michael Reilly (2002), Network Programming and Distributed Computing, Addison Wesley. [4] Deitel & Associates (2001), Java, How to program, fourth edition..

146

You might also like