Professional Documents
Culture Documents
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
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.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
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.
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
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
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.
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
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
sn phm Khchhng
Gi thng
Xem chi ti t
hng
Cp nht gi
tin phn hi
hng
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
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
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 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
-
Transaction date: Date orderNumber: String
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:
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"
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.
28
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
long double
float
29
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.
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;
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:
false
} 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
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>.
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
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
In ra 10 gi tr chnh xc hn 3.141.
42
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
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.
46
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
<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.
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
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
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
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.
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:
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" ); }}
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
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
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.
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(); }}
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.
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 }
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.
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
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.
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.
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
getActionCommand
99
Interface
Methods
Parameter/Accessors
Ngun s kin
getModifiers
AdjustmentListener
adjustmentvalueChanged AdjustmentEvent
JScrollbar
ItemListener
ItemstateChanged
ItemEvent
FocusListener
FocusEvent
isTemporary Component
KeyListener
KeyEvent
MouseListener
MouseEvent
MouseMotionListener
MouseEvent
MouseWheelListener
MouseWheelEvent
Component
100
Interface
Methods
Parameter/Accessors
Ngun s kin
WindowListener
WindowEvent
getWindow
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.
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
105
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")); ... } }
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
109
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.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().
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); } }
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.
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.
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.
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.
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
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.
146