You are on page 1of 303
DOAN VAN BAN LAP TRINH HUONG DOI TUONG VOI JAVA (Ti ban 1én tha nhét: cé hiéu chinh va bé sung) NHA XUAT BAN KHOA HOC VA KY THUAT HA NOI- 2005 161 NOI BAU Gie phiting phap hudng dé twteng, die DICE TB Lap trink acting Ct tubugs dovte say yng dya trén nhicu khai nigm méi va duge hé trg bii nhidu cong cy, go» ng Mp trinh (2). (8) rt manh gitip cho vige tao va nhimng phiin mém ting dung 06 cha lugng exo, ngay cing dip img tot hon yeu céu eda ngudi sit dung. Nebn nga Java de ging Sun (http /finva,sun.com) phat tidn tir du nhing nam 90 4a ted thinh ngén ngt kip tinh hudng dai tuong rat duge ua chudag tong nhGng nim gén day nhd mgt sf dae diém hét ste thich hop véi mong Internet, hign da va ding duge ding pho bith tron loin thé gidi sham dp tng cde yeu edu phat trida che ding dung trén myo phue va cho nhigu ngudi si dung vGi nhiing moi tuOay thus hign phiin mém khée nhaw, Java 12 mdt ngén ng Hip trink bon chink duige thidt ke theo etch tiép cin hudng aéi tugng va ké thifa, si dung tai e6 nfing efip ella nhting ngdn ngi lip trink truée n6. V6 mat of php, Java rit gidng voi C', mot ngon nga [ap oH inh buoag &é: tang dang phé bién nbtt | dung (facilities) qn nay. nhung loai di mot sé tinh EI ing khd va it ding, bode thia vé mt ngon nge [1J shu: loi bé ke dhsite phidu Lép, vi ebting c6 thé igo ra ning huge dé dt lige dang v6 thi va In nguyen nhan chink e6 thé ey ra su phde Lap va khéng dim bdo tinh nlat quda, tink ding dan trong quan hé thong tin ({10], [11)); Java khong eke phép thao tle sO hoe trén kidu con tré vi day 1a ngudn gée otia phing “con bo" rat Kdh6 phat hign ra Ichi biém dich, v-x.. Me dich ehinh cas Java la: dam gldn, shan thign, huttag adi ting ve cach tan nhém too ra nhiéng phén mém ing dung dée idp edi mdi trittiny sit dung (7), 8D Cudr sfch nay gi Java. Noi duny thigu vé Ip trinh hudng dé wong sii dung nu u chink edia eudn sich duige trinh bay trong mul chuung, git 1p tinh, Chudng I teinh bay khai quat eéch tigp efn hung chie nang vi 1}p tink hudng dé tucng, Ngdn nett mé hinh béa bé théing UML [2] due si dumg é die ta cfc hai nidm ca ban cite lp trinh huéng déi tugng. Chuvng I gidi thiGu chu binh phat én cia ee cheng teinh Java, qua trinh dich, thong dich voi JVM Gava Virtual Machine) vai cae thé logi chiong trish ung dung, abit 18 ting dung mhing (applet) eda Java. Chucng II va chiang [V trinh bay nhdng khai nigm eo sb nhdtt eda mot ngon ngit lap trinh va néu cdch xy dung, t8 chite ldp cde adi tung trong ede eluting. trinh ting dung, Cac Iénb digu Xhién ding thie hién chydag (sinh, aGe biota ea che xit ly ngoai 16 h tg dé tao va nhiing chugng tab boy! dong tet trong moi tinh hung. thich ting duge vai moi didu kign trén e9 sd kidim sovis Cue ede 16i, ete tah hhuting 06 thé xay va, duce gidi thigu chi tt 6 ehuong V. Chuong VT dé 0 Wp ou sd nhs cba Java va ci igo edu trie dat ida ph6 dung ni>u kigu tuydn Ut {Cotfection), Wiis vhp gp (Set), Gu danh sAch (Lia, v.v. Va dé phat fén nhung ing dng epplet va si dung gise dign dé hoa cia Windows (AW'T) didi dang ee crane Web véi nbigu vi du min’ hea duye gidi thigu & chucng VIL. Chudng VILL git {hide cde lop sit IY ede ludng dit ligu violra chuiin va nung ven dé e6 1 ehite, doo, hi Wen ete Jogi #2p dG lagu. Chutong IX trinh bay van dé ket nd fe od si dit fu wt SDBC nhim tyo ra nhimg he thing phan mém t{ch hgp tit shidu losi hg thong thong tin khée rhau én mang, Lan tai bin nay diége b6 sung them chuong X giéi thigu he thanh phan eta Swing, cho phép tao ra nhiag phin mém ma ban “thy va cam than due", Trong cde ehitong ef whigu vf du BL nhitng eutgng wink hodn chink, minh hoa cho ech sit dung mbitng khii nigm da néu 3 trén p én mde Cui sich duse bién cogn dua trén kinh nghiém ging day giao trinh phan tich, tisét KE va lap trinh hutng di tuong co tée gid wrong ahiéu Am tai ete Khow jae hoe, dai hge cba DH Qué (iis Hd Noi, DH Bach Khoa Ha Noi, DH Khoa Hoe Had, vv Cain sich 6 thé ding lam gido trinh hoe tp, Lai Tipu cham khéo cho sinh vida cae he kg sit, cit nbn, hge vitn exo hoc ONTME va abe fan qua then dé vn dé ap tinh huding ai tugng dé phat trign nhitne ting dyng de ‘ap vot méi rung, hay a8 xiy dung cde Web Site trén mang, {Tae gid bay tB long biéi on chén thank s6i e&e ban déng nehiep trong Ping ede Ue thong phan mém tich hop, éje biel cim on TS. Dang Thank Phe, Vign Cong meh ‘Thing tin, 4"? KHTN & CNQG, PTS.TS. DE Dic Gido, Khoa Céng nghd, DH QG HN a8 dong vitn, gop ¥ va gidp dd a6 hodin chinh ngi dune cudn sich nay. Xin cam on Wha xu bin Khoa hge va Ky thudt 23 hB tro va tao digu hig d cus sdeh digs 068 ban Mae di rat o6 ging nbung ti ligu may ehde chin khOng trinh Khoi nang sat s6t Cinang t6i rf mong hin die cde § kidn dong gép cha van dee dé e6 chink 4§ Kip thai “Phat gop § xin gill ve: Nha suslt bin Khoa hoe va Ky thugt 70 Trin Hung Deo Ha Noi. Ha Not, thang 5 ndm 2005 Tée gid CHUONG | GIGI THIEU VE LAP TRINH HUONG DOI TUONG 1.1, CAC CACH TIEP CAN TRONG LAP TRINH Phuong phap lap trinh tuyén thing ching ta vin 4p dung dé 1a ldp trink 06 ode tric. Phuong phap lip trink nay thyc hién theo cach tip can Aung chite ndng duva chit yu wae vige phan tich ede chite ndng chink ca bai toan thank nhiing chitc nang don gidn hon va thye bign lim anjn dn tit trén xuding (top-down). Theo cach tigp ean hudng chde nang, chvtong (rink duge xem nb lb m@t t@p ede bam chttc nang, trong 46 dit ligu va cde im la tach si whau. Déi vai nhitng hé théng én, phie hop, && phite tap cita chucng trinh tang lén, sy phy thue eda né vao cae kiéu dit ma no xit Ly cing ting theo. Cac kiéu dif higu dugs wii ly trong ahidu chute nang bén trong chong inh o6 eau trie, va khi cé sir thay déi vé kidu dur ligu thi cong pai thyc hign thay déi d moi noi ma dit ligu dé dude sd dung. Mét nhuge diém nia cia lap trink huéng chic nang lit khi cé nbiéu ngudi tham gia xiy dung chucng trink, méi ngu’i duve giao viét mét sé chile nang (ham) riéng bigt nbung lai phai eit dung chung dit lieu. Khi 4 nbu cdu én thay déi dit gu sé Anh hung rat Win dén cong vige cla nbidu neu, vv Phuong phip lap trinh ma ngay.nay ching ta ngho néi ti nhidu do 1a Lap trink Iuidng déi tégng. Lap trinh bung déi adng dita trén néa tang la ede @éi tong. Boi tugng (thye thé) duge xay dung trén ca ad gin dit ligu véi eae phép toan st thé hién duge ding each ma ching ta suy nghi, bao quit vé ching trong thé gidi Uhye (81, [4]. Chang han, 6 t8 cd banh xe, di chuyén duge va hung cia né thay déi duge bang vach thay déi tay Jéi, Tung ty, cfy 1a loai thye vat cb than gé va la. Cay khong phai la 6 td vi nhiing gi thyc hign dutce vai 6 16 98 khong lam duce vi cdy. Lap trinh huéng dé tung cho phép ching ta két hop nhiing tri thitc bao quat vé cée qua trinh thye té véi nhitng Rhai nigm tru tugng duce sit dung trong méy tinh. Chuang trinb hay h@ théng huténg déi tugng duce xem nhu 1a tap ede 1ép di tugng tutcng tac vdi nhau dé thc hién cac yéu cfu eta bai toan dat ra. 6 Lap tinh huang A6i tugng val Java: Nhu vay, hiém nay ching ta cd hai cfch tip ean co ban dé phat triéa cfc he thong phin mém: a6 Ta each tidp cam hudng chic niing (Punction-Orientod) va hudng di tung (Object-Orienéed), Ca hai edeh Up cn nay én ap dung mgt nguyen Ly chung dé mo hinh héa hg théng (dé higu hé théiag) 1a thuc hign “chia dé'tre", phan chie Dai toan thinh nhing don vj tudng déi don gidn ma co thé dé dang quan ly duce ehuing mot cach et higu qua Dé hiéu ro va &p dung hiéw qua nling phvang phép Ip trinh efin lua chon, chung ta can phiin bigt nhiing dc trung co ban nbult, déimh gid nhimg mat manh, mit yeu ea coting, 1.4.4, LAP TRINH HUONG CHUC NANG (THU TUC) Nhung ngén ngit [4p trinh bac exo truydn thing nh COBOL, FORTRAN, PASCAL, Cv... duce goi chung 18 ngén ngtt lap tinh Auténg eluie nding. Theo cach tip can hifdng chée néng thi mot hé théng phdn mém duge xem nhut Ja day ede cong viee Ghite nang) dm thyc hiéa nhu nhap di hgu, tinh tedn, xi y, lap bio cao ve in dn ket qua vv. MBi cong vide &6 sé duce thu hign bi mot e6 ham nit djnb, Nhu voy: trong tm cila cach tiép edn ndy Ia ede ham chite ndng. Cau tric efia chutdng trinh duce xay dng theo edeh tiép en hudng ehiie nang co dang nhu Minh 1.1 (Ghutsog trink erin | AING ¥ [ars _— wa) [ame] [nine oot I a Mes rain Mini 11. Cea tre cla chucang trinh fuconeg elite nang. Lap inh bung chute nang (LTHON) sit dung Aj thuat phan rd cde ehete nding (ham) theo ctich tidp cf top-down dé tao re qu trie phan edip. Chigong trink duge xy dung theo cach tigp can huéng chide nang thye chat la tap cde chigony trink con (66 thé xem nhut la ee him) 2a theo dé may tinh cin thye hign dé hodn think nhing nhigm vy dat ra cia hé thong. Khi dat trong tim vao cée ham thi di Tigu, nbiing edi ma ede ham sit dung ag thye hign edng vite cha minh lai tré thimb thit yeu, Cai gi s@ xy ra déi v6i dit Hou va gin higu vé 1Gp tinh husng déi wong 7 dit ligu ¥éi ede ham nhu thé nao? cing nhidu vain dé kha edn phai gidi quyée khi ching ta mud xay dung oe phttong phap pha hep dé phat tridm nbttag hé chong phan mém gi8i quyét nhing yéu clu dat ra cia thye té. Hon mite, hé thding lion 1a mgt thé thong nhat, do vay adc Adm trong mét chuong trink phai ob lién hé, trao dét duge vii naw, Nhu ching ta dé biét, otc him (cae bG phan chtic nding) chi co thé trao déi duge vai nhau thing que ede tham 66, nghia la phdi sit dung bién chung (global). Méi ham 6 thé e6 ving di ligu ring edn goi 1A dié lieu cuc b6 (local. MB quan hé gids dif ligu va ham trong chwing trinh hudng chite nang duide mé tA trong binh 12 Durga chur [barge chon (Stobal) (Globay) ¥ 4 wart tam 2 [hem 2 Diligu réng aigu ling Dirfeu feng (Locel) (Local) (Loca) Mink £2. Quan he gia di wi him trourg LTHEN. Nhidu ham cé thé truy nhap, si? dung di ligu chung, Idim thay déi gid tri eta ching a vi ody rat RAO hidm sodt. Nt 1a 40% vGi cae chucng tein lén, phits tap thi vin a cang td nén khé khéin hon, Khi ching ta mudn thay déi, bé sung edu trde dit Liéu dung chung cho mét 0 ham thi chting ta phai thay déi hdu nhu tat cd cae ham lien quan dn du ligu d6. Nbitt 1a déi vdi nhutng chuong trinh, det én tin hge lon, phae tap 403 hot nhigu ngud, nhigu nhom cham gia thi nhung thay d6i cia nhimg bin dit lieu chung s@ dnh hecdng tdi tdt cd aluing ai od lién quan toi ching. Mat dic tinh nia ciia cich bigp can hudng chit nang 48 nban they la tint md (open) cia hé thing hém. Thit whit, vi din chinh véo chite nang mé trong tite t€ thi nhiém wu cita hg théng lai hay thay déi nin Khi dé mutin cho hé théing dap ting cée yeu cau thi phi chay déi lai cafu tue ctia hé théng, nghia JA phai thiét ké, lap trink Iai hg thing. Tht hai, vido of dung cde bitn di Tigu chung trong chuvng trink tam cho che phém ehte nang phy thuje vao nbsu vé eds trde dit ligu nén eng hen ehé tinh ma cia hg théng. Trong thuc t6, ec edu té chtie eta moi t6 chite thudng {¢ thay ddi hun la chue nang, nhigm vu phai thitc hign, Mat khae, cdeh tidp can hudng chile nang Iai tach dif lagu khdt chute nding xit ly non viin dé che gidiu, bao vé thong tin trong hé théng IA kém, ngbia la van a€ an toan, an ninh dit ligu Va réit phite tap. Negoai ra céeh tiép efin hiting chic n&ng eng khéng hd tro vide sti dung lai vd hE 8 Lap trinh huéng déi tueng vel Java thiea nan chét ligng va gid than cba cae phan mém rt kho duge edi thin. Ning (16 ngai ma cling ta da néu d trén 60 1m cho mé hinh duge xy dyng theo eBcb tiép can huéng che nang khéng mé ta dude day di, trang thye hé thing trong tbue (8, 4.1.2. LAP TRINH HUGNG BOI TUGNG Nguue lai, Ip trinh butdng déi tugng (UTHDT) dt trong ta vdo ede di tong. eu Us quan trong trong qué trink phat trién chiang trinh va no Khong cho phép da lieu tach biél, chuyén ding ty do trong he thOng. Dit Tigu duge gan chat vei ede him thanh phan va ching duge ti ehutc, quan ly truy hap theo nhiéu mue hse nhaw. LITHDT cho phép ehiing ta phén tich bai tofn thank (Gp ede thie the’ dude gol Ia eA op di twang, sau ds xty dving cho dit ligu thiwnh phan cling véi cdc hAm than phan thao tde trén ed dit ligu dé va trao déi vai nhang déi twgng khae dé thuc higa nhEng nhigm va duse giao. “Mot chong trinh, mot hé théng dude xem nhit 14 mOt tap ede Tép di tugng wa eae ach iugng aé trao déi véi nhau théng qua vide git va nhan edo thong digp (message), do vay mot chuéng trinh hudng adi tugng thye sit c6 thé hofn toan khéng cain sit dyng bign chung 11). (3) Lap trinh huéng d6i tuong dua chit yée vdo ede déi tung, nén ki cé nu cd thay di thi chi can thay déi di mét 86 1dp cé lien quan, hoac ¢6 thé bi sung mot 2 lop mai tron od 28 ké thita va si dung lai nhiéu ahi ¢6 thé. Mat khae, niu tren da phan tich, mot chong trin huéng déi tutgng c6 thé Khong stk dung hode han ché su dung cac bign chung, do vay dé dang tyo ra duige nhiing hé thong e6 tink md cao hon. Ce ché ban boc, che gidu thong tin via phuong phap biting doi tugng gidp tao re duge nhiing hé thang an fodn, an nink cao hun cach tép can budng cbse ming Hon nia, phuiong phép hudng déi tugng edn hé tg rit manb nguyen ly si dung lat hide nhdét 06 thé vd tao ra mot kid nding dé Re thite nliimg lp da duoe thiét Ké, 1p rink tét dé nhanh chéng tac ra diige nhimg phan mém c6 chét !wong, gid thhah ¥é hon va dap ting cée yéu edu eta ngudi sit dung. 1.2. NHUNG KHA! NIEM CO BAN CUA LAP TRINH HUONG DOI TUONG Dé tidn Igi vA phi hgp v6i wu thé phat trién hign nay cia céng nghe thong tin, chang ta 20 et dung UML (Unified Modelling Language (2, (7)) 48 dae th nbting khat niém co ban cha lap tinh hu@ng d6i tugng thong qua Hafional Rose hitpd/overw.zationalcom) . UML Ta ngén ngif md inh héa hink éhite, thong mad ee Chuang |. 616i thigu vé Kip tinh huéng dé tugng 9 Inge quan. Phan lon cée théng tin trong mo hinh duce thé hién béi cée AY higu dé how, biéu dé thé hign mai quan hé gitia cae thanh phan cia he théng mot each thing hat va 6 logic chat ché. UML duce sit dung dé dée #6, xy dying vd ddim tax lig cho edo tac phi ede hit qua cita cia vac pha phan tick, thitt ké vd [ip trink huang dang cac biéu dé, ban miu hay ede trang Web. (Artifacts), trong dust UML la ngén ng chudn cong nghigp dé lap ké hogeh chi tiét phat trién phan mém, Hién nay nbigu hang sin xuat phda mém én nh: Microsoft, IBM, HP, Oracle Digital Equipment Corp., Texas Instruments, Rational Software, v.v., si dung UML. nhit la chudn cho ngén now mé hinh héa hé théng phén mém, Phuong phap hutdng déi tuong dude say dung dya trén mot tap che khai niém es si 1. Dai tugng Cobjece), 2. Lép di tugng (clase), 3, ‘Primm tung héa da igu (Data Abstraction), 4, Bao bge vi che gidiu th6ng tin (Encapsulation and Information Hiding), 5. Mé rong, ké thite gidia ede lop (Inheritance), 6. axa va ngp chéng (Polymorphism and Overloading), Lién két déng (Dynamic Binding), 8, Truyéa thang digp (Message Passing). 1.2.4, DOI TUQNG Doi tugng A Khai nigm of sd, quan trong nhat etia céch tiép en hudag déi tude, D6i twong la thyc thé cia hé thdng, ca CSDL va duge xac dink thong qua dinh danh ID (Dentifier) vita ching. Mei déi tetgng 06 tép cde de trung bao gdm cA cio phiin tai sain thitang Ta ede diz Ligu thénh phdn hay cée thuds tinh mé ta cae tinh chélt va ede phitang thite, cdc thac tée trén ee dit tidy dé xie dinh hAnh vi ciia doi tueng dé. ‘Dei tuigng 1a nhing thie thé duce xée dink trong thdi gan hé thong budng déi tugng hoat dong. Nhu vay 401 tuong 06 thé biéu dién cho ngudi, vat, hay mOt bang dif leu ode bat ky mat hang thiic nao dé edn xit ly trong chudng trinh. Dei tugng cing 0 ubé la cae di Hiéu duce dinh nghia bai ngudi sit dung (ngudi lap trinh) nhu vector, dank sich, cac record v.v... Nhiém vy oda LTHDT la phan tich bai toan thanh che adi tuong va xée dink duge ban chit eda sy trao déi thong tin gitta chung. Déi tuong trong chuong trinh cain phai duce chon sao cho né thé hign duge mot cach gin nhitt v@i nhiing thue thé 66 trong hg théing thye. Nhu vay, ddi tugng dude dink nghia mot edeh tris tung nbu fa mot khAi nigm, mot 10 L@p hrinh yong déi tuong vél Jove edu trée gop chung c@ phan di tigu (huge tinh) vai cae ham (phuong thiic) thao tac trén nhitng dit gu g6 va cé t “di nang di tugng khae. Theo quan diém cia nyvdi Ip trink [3], dt rome detde xem mit la ving b6 nha duce phan chia trong ridy sink &6 lau trie dit lide ve tap ede Ramm tee dng tren die Lieu gain vor chiiny. Boi vi cde ving phan hogch b¢ mhd 1a dde lap v6i mhau nén ede déi tugng c6 th di mhidu chudng trinh hae nhau mA khOng Anh hung Jn nhaw. (ao si dung 4.2.2, LOP D6! TUGNG Lp fa bin méu hay mot id chung cho tat ci nbiing 461 wuong 66 nhting dr trang ‘gidny nhan, neha la co ede thude tink va hin vi giéng nhau, Déi ouong chink 1 thé hign (ed thé) oiia mot I6p xéc din, Trong Jap t2inh huang ai tong, lap duige xem la déng nhat vii kidu dif ligu tritu tugng (ADT - Abstract Data Type duge Barbara dé uit vo nhitng nam 79). Phuong phap I4p tinh juding @ét tong Ta céch phan chia chudng trink thank céc don thé (cdc Ip) bang cach tyo va cae ving b9 nbé cho ea dai Tiga lin ham va ching 38 duige sit dung nhut eae mau dé tao ra ban sao ting di tugng khi cheng duge tao ra trong hé théng Nhiém vy eda nevi lap tein Ja tim each xée djnh dy di, ehinh xée danh sack cAe op dai dign cho tat ca cae thy thé trong hé théng vA méi quan hé gitta ede lop dei tucong, do (3), (5) Nint vay, lop chinh 1A tap ede déi tugng ed eling efe thude tink va hanh vi giong hau, Cae thinh phan cba lop e6 ché chia thanh ba ving quin ly chinh: cong khai Qoublc), duge bo ve (protected) va ving riéng (private). Trong ngin neit mo bin hoa théng nbs, UML, etfu trie eta lip thuding duge dite ti Béi: tén cle lép, tap cdc huge tinh va tp cite bim. Sunsme: shinee | Hinks { 3. Laip Student trong UML. Lop cé tén la Student. Lap cb ba thude tinh: StudentNvo o6 kidu Inéeger Ta 93 hw riéng (private), bi kh6a; thuge tinh FName co kidu String JA cng Khai (public) vi thuge tinh LName la duge bio vé (protected). Lép Student eé ba ham + getStudentNot), getFName), getLName() déu la cong, Kha. Chung f, Gidi thigu vé op huéng d6i tugng a 1.2.3, TRUU TUGNG HOA DU LIEU Trit twung héa I céch biéu dién nhimg dge tinh chinh va bd qua nbung chi tet. Tritu tung hée \A sy md ring Khai nigm kiéu dit Higa va cho phep djah nghia nhting phép tod tritu tugng trén eéc dt Tigu trite tugng. Dé xay dung cac I6p, ching ta phai sit dyng ikhai niém tritu tugng hda. Vi du, chung ta cé thé dinh nghia mét lép 1a danh sich ofc thuge tink trim tueng nhu 1 kich thude, hinh dang, mau va cée ham xée djnh trén ede thude tink nay dé mo th ede dai tugng trong khong gian hinh hoe. Trong lap trinh, lép duce sit dung nhu Aiéu dit lig tritu treyng Khi xay dung phdn mém thi nguyén lf trim tugng boa duge thue hién thong qua vide tritu tugng héa cae chite nang, ham (thuat todn) va tri tugng héa cae kiéu dit higu nguyén thi 1 BAO BQC VA GHE GIAU THONG TIN Vide dong géi dif lidu vd ede ham vdo mét don wi edie trdie (gei 1a lop) dutve xem nbs imdt nguyén the ba0 bpe thong fin. Ky thudt nay cho phep xae dink cae ving dae urung riéng, cong khai hay dude bdo ug bao gdm ci da liu vA ede cfu Ténh nhiim digi high hode han ché nhing truy nhdp thy tign cia nbting dé tuong khic. Da ligu duzge 6 chuc sao cho thé gidi bén ngoai (cac doi tudng 4 1ép khac) khong tray nha urge vao nhiing thude tinh riéng va chi cho phép cde ham trong chng Isp hofe trong hing Ip o6 quan hé ké thiza vi nhau duge quyén truy nhap dé ving duge bio vé. ‘Yung céng Ikhai cia lép thi cho phép moi déi tugng duoc phép seuy nhap. Chinh ea ham thanh phdn cong khai cia ldp sé dong vai tro nh la giao dién giite erie déi tuomg va véi phan con Jai cda hé thong. Nguyén tie bao boc di ligu dé ngiin c&m av tray hap trye tiép trong lap trinh dude goi 1 sy che gidu thong tin. Neuyen 1 bao boc che gittu thing tin tia ldp ddi tigng duige mo ti nhut trong hinh 1.4 ger a vuveunira 1 Sita rtag mae | Dig ligu cng Khai i Siam cong khal E_— Hoh 1. Bao bpe wt che git thing tin cia Kp i terme, ww Lop trinh huéng d6i tugng val Java 1.2.5. SUMG RONG, KE THUA Gila CAc LOP Nyuyén ly ké thiva cho phép cite ddi tugng eda lop may duce quydn sic dung ingt sé tink chit (¢a d2 Hgu va che him thanh phin) cia céc lép khae. Mot lop 06 thé 18 Lip con (lép dén uit) chia mat kip khéc, nghia Ta o6 thé bé sung thém me s0 tink chat 8 thu hep pham vi xée dinh cae déi tung trong Iép moi cho pha hap voi nga efiah trong thu t€ ‘Theo nguyén If chung cia ké tha thi chi nking thuge tinh, ham thanh phan duge bdo v6 va cong khai la duge quyén hé thita, cin nbiing thude tink, ham. thanh phan riéng la khong duoc phép ke shiva, Nhiing thuge tinh va him duge ké thita vit ldp cha fide cd 3d} due xem nh 1a “tai sn” eda chinh cae cdi tugng con chau, ching c6 auyén sit dyng ma khong edn phai khai bao hay dink nghia Iai. Nint vay, nguyén ly ké thia trong lap trinh hudng €0i tugng hoan ton déng nhat vi nguyén ly ké thie gia sn trong x hoi loai nev Phugng phap hudng déi tugng néi chung hé trg hai nguyén ly ké thita: hi theta dan va Ré thita bgi, Ké thita dan 1A mot Iép cd thé ké thita tu mot iép oo 88, ep ke Lita bai 1A mt 16p 4 thé ké thita tif nhiéu hon mét J6p es s. Ngon ngit C++ hé try e& hai nguyén If ké tht, nung Java chi hd arg thite hign ke thive dom (8) Neuyén Ip ké thtta don h8 tnd cho vide tao ra cu tric ey phin edip cae I6p. Wi da, mot truting dai hge dao tao sinh vin co ba Khoa: Khoa X@ hi, Khoa Cong nghé ‘Thong tin vA Khoa 'Toan. Chiing ta ¢6 thé xay dumg 6p Sinh vign la Yop ea sé dé tic a5 xAy dumg tip ba [dp ké thita lt: Khoa X@ Abi, Khoa Todn va Khoa CNTT. He thOng sé due thiét ké thinh eac lp ké thita va ditce mé t& trong UML abe sau Minds 1S, Céiu tre phn edlp ce Tip theo quam id ké thie trong UML. ‘Teong LTHDT, kha niém ké thita kéo theo y tung si dung lai. Nabia 1a tt mot lep da dude xdy dung ching ta c6 thé bé sung thém mot 86 tink chit tao ra mgt Lop andi K€ thirs [6p efi ma KhOng lam thay déi nhiing cai da c6. Khai niém ké thita ditge hidu nhu ec ché sao chép 40 khéng dan digu. Trong thue 18, moi vige xay ra ta nhu nbting Iép eo 66 déu duce sav vio trong lép con (dp din xuft) mac da digu nay khéng duoc cai dit tung minh (nén goi IA sao chép 80) va vide sao chép chi thie hién déi véi nhiing théng tin ehufa dugc xée dinh trong eéc lép Chuang |. G61 Ihige vé Iép tink huéng dl tvong 13 es si (son chép khong dan didu). Do vay, 08 thé didn dat eo ché ké thita nhs sau: 1. Lip A ké thita lép B se c6 dkhong twing aninh) tat c& cae thuge tink, him da duige xae dinh trong B, 8 phiing ving duge phép ké thiia (duive bio ve, cng kha’), 2, Bé sung thém mot si thude tinh, ham dé mo UL duge ding cae hamb vi eta nhiing d3i (ugng ma lép A quin IY. 4.2.6, DA XA (TUONG UNG BO!) VA NAP CHONG Mé: kh6i nigm quan trong nite trong LTHDT la hai niém da xg tvong tut nhu trong todn hoc. Da xa la ky thuat duge sit dung dé mo ti kha nang giti mor thong dip chung tdi mhibu dt fcong ma méi d6t tlong lat 06 etch wit ly riéng theo ng cénh oda minh. Da sa déng mét vai tr quan trong trong vige tao ra cic déi tucng 06 edu trie vot nhiing ndi dung thye bién khée nhau mi lai ¢6 kh nding eit dung chung mot giao diién (cang mét ton go’). Theo mt nghia nao d6, da xa TA st md rong khéi nig sit dung lpi trong nguyén I ké tha, Hinb 1.6 cho ching ta thay ham o6 ten TA Vel) 6 thé eit dung dé vé céc hinh khae nhau plu thude vio déi tutgng 1a ede hinh khi Boi dé thuc higa. ‘Tam gido, Hink tron vd Hinh chit nhét Ya ede lép con cha Kip Hink. Ham Ved Tk ham da xq va né duge xée dinh thy theo ngtt clink khi stt dung. Khi goi thye bign dot tating la Tam gide thi sd vé tam gide, néu doi tugng 18 AinA fron thi ve inh tron, Hivh 1, Tacang song bot iia Bn Vet Nap chéng (Overloading) la m@t trutng hop cha da xa. Nop chéng Ja kha nang cha mot Khai niém (nbut ce phép toan ebang han) c6 thé duse si dung voi nhiéu ndt dung thuc hién khfe nhaw thy thee ng cdnh, ew thé La tuy thuge vio kidu va sf eae tham ed ota ching, Vi du, him Cong() 06 thé duce nap chéng dé cong cac sd nguyén (int), 36 thie (floa#}, 06 phite (Complex) hoc ghép ede xéu ky te (String), vv. int Cong(int, int); 1 CEng hai 26 nguyen ccs Lép trinh huéng déi twong v6i Jovo float Congifloat, floath, Cong hai sé thus Complex Cong(Complex, Complex; if Gang hai s6 phic String CongiString, String); JGbép hai xau String Cong(String, int); WGhép mot x&u vdi mot 86 nguyen 1.2.7. LIEN KET BONG. Lidn két thing ching (ién két tink) 1 dang lien két durge xe din ngay Khi dich chucing trink, Hau hét ode chuong trink direc vidt bing Paseal, C déu la dang bien ‘tinh. Lign eéi déng Ye dang litn két cac ham, chiie néing khi chugng trinh thye ham, chite nang 46. Naw vay trong Lién két déng, npi dung eta doan chwong trinh ding vét che nang, him s8 khOng dutgc 4c dinh cho dén khi thy hsign lai goi ti chic nang, ham dé, Lién két dong liga quan chit ché vei mhting Kh’ nnigm da xa va ké thita trong lép twink hung déi tuong, Chink nbd Khai niga: 1ién kat dong ma nhiéu khéi nigm eda Iqp tein huGag déi wtyng nb kha mim da xe thuge hign cede, Chimg ta by gu o6 thi xét ham Ve) trong hinh 1.6, ‘Theo nguyen Tf ké thita thi moi déi Weng sii dng ham nay dé ve cdc hink ey thé Khi hé théng thuc hién. Ham Vet) duce dinh uybia lai é trong ede lép din xusit dé v8 tam gide, hiah trom hay bial chit nihot theo cde thoat toin tueng ung. Khi thye bin, vi dg: née ddi tuong Mink We Hinh trhn 106 he théng sé lién két vai him Ve) duge dink xghia trong lop Hink eri dé ve hink tron, 4.2.8. TRUYEN THONG BIEP Chung trink hydng cdi tudng (duce thiét ké va lap trinh theo phyong phap huéng 4éi tuone) bao gbm mét tap cée dé: tugng va mai quan he gitta cfc Adi twang do vol nhaw. Vi vay, lap trinh trong ngén ned hudng d6i tugng bao gém cay 1. Tyo ra ee 6p dat 1veng vA mé ta hank vi ctia esting; 2, Tao ra cde di tugng theo dink ngbia efia e&e Tap: 3, Xae din sir trao déi thong tin citia cée déi twang trong Be thong, Che déi tugng giti vA nhan théng tin trong hé théng huéng doi tang citng gidng nhu con neni treo ai v6i nhau trong xB hai. Chinh nguyen If trao déi thong tin bang cach truyén thang digp cho phép ching ta d& dang xay dung duae he thong mé phone ssn hon wai thie t8. Truyén thing digp cho mot déi tugng tte 1& bao cho nd phai thuc hign mot vide, mbt yéu cd (think edu) mao Ad, Cich tng xit cha dé: telgng 88 dege md 4A 3 trong lép thong qua cc ham eéng Khai (hay edn duge goi la Lop dich ve). ‘Chuong 1. GIdi thigu vé lap tinh huéng déi tong 15 ‘Trong chung trink, thong digp giti dén cho mot Aoi tuong chink 1a dé yeu cau thue hién mot céng vide cu thé, nghta 1a sit dung nhong ham tuong ting dé xi ly da View a dude khai bio trong lép 46; tuong a6. Vi vay. trong thong diép phai chi ra duce ham cén thue hién cia déi tuong nhan thing digp. Hon thé nia, thong diép truyén di phai xe dinh ton déi twong, tén ham (thong digp) va thong tin trayén di. Vi du, khi hé thong may tinh mudn in mot tép dataFile thi may tinh hién thii (Computer) siti dén cho déi tuong :PrinterServer mot: yeu ci Print(dataFile). BO phan dich va may in sé kiém tra xem néu may in dang ban thi lu yéu edu d6 vito hang dgi bing céch gi cho (Queue) thong digp 1A Store(dataFile), nguge lai siti Print(dataFile) cho déi tugng :Printer. Hoat dong trao déi thong digp gitia eae doi tuidng trén ¢6 thé mé ta trong UML nbv hinh 1.7. Hink 2. Truyén thong digp gita ede dot twang, Méi doi tugng chi tén tai trong thdi gian nhat dinh, Déi tugng duge tao ra Khi n6 duge khai bao va sé bj hiy bi khi chuang trinh ra khéi mign xac dinh ea doi tugng 6, Sit trac déi théng tin chi 66 thé thue hién trong thai gian tén tai cia a6i tutgng. 1.2.9. CAC UU BIEM CUA LAP TRINH HUGNG BOI TUGNG Nhut trén da phan tich, lip trinh huténg d6i tugng dem lai mgt sO lgi thé cho cd ngudi thiét ké Lin ngudi ip trinh, Céeh tip eam hudng doi tung giai quyét duge nhiéw vain dé tén tai trong qué trinh phat trién phiin mém va tao ra dutge nhitng sin phim phan mém c6 chat hugng cao. Nhiing phuing phép nay md ra mot teién yong to dn cho nhiing ngudi lap minh. Hy vong 5 c6 nhidu san phdm phén mém t6i hon, dap ng duge nhiing tinh chit vé sin phdm chét Iuong cao trong Cong nghé phan mém ‘va nhat la bao tri hg théng it ton kém hon, Nhitng wu diém chinh cia LTHDT 1a: 1. Thang qua nguyén ly ké thita, ching ta c6 thé loai bd duge nhitng doan chudng trinh lap lai, du thita trong qua trinh mé ta ede lop va mé rong kha nang sit dung céc Iép da duge xay ding 2, Chuong trinh duge xéy dung tir nhimg don thé (di tugng) trao déi voi nhau nén vide thiét ké va Ip trinh sé duce thue hién theo quy trink nhat dink chit khong phai dua vao kinh nghi¢m va ky thuat nhu trude, Diéu 18, _ Lap tinh hudng déi tuong véi Jove. nay dam bio rat ngiin dizde hii gian xy dmg he théng vi Ling mang swat isa dong. 43 Nguyén 19 che giSu thing tin gidp newdi lap trinh tyo ra duoc abuing chuong trinh an toan khdng bi thay déi bai nhting doan chung trink hac mot each tuy tin. 4. COthé xiy ching duge Anh xa che déi istgng ofa bai tofin vao Asi twang cia chung trinh, Cach Ligp cfm thidt ké dat trong tAm vao diz Liu, ghip chung ta xAy ding dhuge mé binh chi cigt va pha. hyp vai thuc té. 6. Nhitng hé thong bung déi twgng d& ma rong, nang cap thamb mbit h9 on hon, 7. Ky thuat truyén thong diép trong vige tran dai théng tin gitta cde déi tung spaip cho vide m0 ta giao dién voi céc hé théing bin ngodi ted nén dan gan hon. Co thé quan If dude dé phic tap cba nhting sie pham phén mém. 9, Khéng phai trong hé thing huGng déi tung nfo cling cd tat 4 rae tinh chat néu tron, Kha nang xfy dung duige chuong trinh oS eae tinh chat 6 {003 pha thuge vao Tinh vye dng dung ea duc 4 tin hee va vio phucn phap thye hién cia ngudi phét tridn phan mém, 1.3. CAC NGON NGU LAP TRINH HUONG 861 TUONG Lap trink hudng di tuong khong 1a d8e quyén cba mot ngdn ng nbo dae Diet. Cong sidng nhu Jap trinh o6 edu tréc, ning Khai nidm trong lap trinh hudag d6i taxgng 6 thé eat at trong nhiing ngbn ngit gp trinh bye C hoae Pascal, Tuy niin, 46h voi hing chitong trink dn, phite hgp thi vin d8 Igp trinb o€ tra nén phite tap, néu st dung nhitag ngin ngu Khong phai TA nebn nei hudng 46 tuong thi pai thefe hige shiga théa higp. Nhung ngdn nga duge (hit ké die bigt, BB try cho vige m6 8, ea dat cbc KbAi nigun eda phuténg phap hudng déi twsng dugo gi chung 1A ngin new huéng déi tong, Dua vao kha nding dap dng cfr khai nigm v8 busing doi tuong, ching ta co thé chia ya 1m hai loait 1. Ngén ngif lap trinh dua trén dit tugne (object-based), 2, Ng6n ngii lap trinh hung adi tuong (object-oriented Lép trink dua trén doi adgng 1a kigu lap trink hd trd chinh cho viée bao byc, che gia thong tin va dinb danh cic d6i tiigng. Lap trink dya trén doi turgng 06 misting dic tinh sau: © Bao bee det lieu, + Coché che gigu va han chd truy nhap di lieu, Chuang | GiGi thigu ¥é lap tinh huéng adi tung wv * Ty dong tao lap va hity bé eae 4éi tugng, + Tinh da xa Ngdn ngit hé tre cho kiéu lap trinh trén duge gyi la ngdn ng lap trinh dua trén déi tutong. Ne6n ngit trong lip nay khong hi trg cho vide thyc hién k¢ thiia va én két dong. Ada la ngén ngi lap trinh dys trén déi tugng. Lap tinh budng déi twong 1A kiéu lap trink dua tren déi tuong va bé sung thém nbiéu cau unde dé cai dat nhizng quan hé vé ke thifa va lign két dong, Vi vay dic tinh cli LTHDT oo thé vidt mét céch ngain gon nhu sau: Ce déc tinh dua trén di tagng + hé thita + lién het dong. Neon ngit hé tro cho nhiing dic tinh trén duge goi 1A ngin ngit LTHBT, vi du nhu Java, C++, Smalltalk, Object Pascal hay Eiffel.x v. Vige chon mét ng6n ngd dé cdi at phén mém phu thuée nhidu vao cae dc tink va yeu cu cia bai ton ting dung, vao kha ning oti dung lai tia nhuing chusng trinh da 6 vA vio t6 chite cia nhém tham gia x4y dung phiin mém. Mét trong nhiing ngén ngit Igp trink huéng déi wing thus sf duge sit dung phé bién hign nay la Tava [8] 58 duos gidi thidu chi tiét 6 cae chuiong sau. BAI TAP Neu cdc dc trang cd ban vita céch cidp can lap trinh buéng che nang va Jap trinh huéng déi tugng. 1.2, Tai sao lai goi khai niém lép 1a kidu di igu trétu iuteng wong lap trinh huéng déi tudng. 1.3. Néu nguyén ly hoat déng cia Khai niém da xq, tudng diay boi trong lap erinh huéng adi tuyng, Khai niém nay thyc hign duge trong lip trinh bung hie nang hay khong, tai sao? 4.4. Khai nigm ké thifa va st dung lai trong lp trinh huéng d6i tugng 1a gi?, ngdn ngi Ip trink G+ va Java hd tea quan hé ké thita nbu thé nao?. puma CHUONG II GIGLTHIRU VE LAP TRINH VOIJAVA 2.1. GIGI THIEU CHUNG. Cae chyong trinh dich cha cae ngén net lap brink truyén thong nhu C/C++, Pascal thudng dich cfc tép chung trink nguén sang ede edu Iénh dae bidt ma may tinh etia ban hiéu duge, Nhing ngon ngit nhu C/C++ duge xdy dung trén ca sé tao ra nhitng chusng trink dich tdi uu véi ma may thyc hig higu gud, nhanb va Tinh boat, Cha trinh phat trién va thyc hign ciia chitdng trinh viét bang nhiing ngon neu truyén théng nhut CIC+ 06 thé duge mé ta nbu sau <—Chuang Tep cai tinh nguén Tep thu vign (Header File) (Object Fite} Tep chia chung “Tp ma dich = i] faneninn (Object File} Tap chong msing G1 Lionkét| (Executable Filey (Chung trinh ding dung ign thai Kigm tra (Tes!) God (Debug) inh 2.1. Cha orink ph rin 90 hue hitn cia chug trink C+. Tuy nbien dé toi uu hoa duge chuong trinh dich thi n6 phai duye thye hién dua tréw mét hién trtic (tap cde lénh! xic dink, ngbia 1 phu thude vao cit hinh eda may dich. HE tao ra dude su dée lp tudng déi thi chudng trinh eda ban phai dich lei dé pho 20 Lap trinh huéng d6i tuong vat Jove. hop véi kin trie may méi mdi khi ban thay 46: méi wong thue hién chiang triab, Hign nay cé nhiéu loai may tinh voi nhiéu cau hinh khée hau. Théng thuting voi suli loai ting dung chung ta chen mot loai may tinh va esiu hinh hgp ty dé phat trién chudng tinh cho higu qua. Tuy nhién, khi diéu kign thyc hign chuong tinh thay dé thing gay rat nbigu tr ngai cho ngudi sit dung. Do dé nhiing ngudi phat trién chuong trink ing dung (ngw3i lap trinh) mudn phat kign hing phudng thie lim vide méi 06 thé d6e lap due vii mhiing thay déi ca méi truting va mong much cé sit hé tre ciia c&e ngin ng! lap Lrinb. Disc bide, mang Internet duge xem abt 1X mgng cia nhiéu mang khite nhau v8 nbiéu inh vue, c@ phan ciing lin phin mém, Mang cung edip nbidu dich vu tide loi cho nbigu ung dyng khac nhau, nhét lA cfc ting dung tran mang clia céng nghé Web. Dé dita duge cae yéu t6 lap trinh lén mang va két hyp vdi Web thi khing nén sit dung he chucng trink viét bing C/C++, béi vi 1. Vain dé an toan, an ninh da ligu trén mang Khong dim bao, 2 Quan trong hon 18 cae chuting trink C/OH duye dich sing mnt ma may ed eau huinh of dinh, vi vay khi duge ngp ti trén mang xudng mot may eé edu hink, khae s8 khong thye hign duge. VE dy, mot chuong trink da duge dich 3 ‘Machintosh thi s¢ khéng thye hign dutge Windows va nuige lai. Diéu ma chiing ta mudn nbelt hign nay la edn c6 moe ugée nga thong dich Una manh dé hae phue nbing nhuce didm eran, die bigt dé phat trign dite dé dang cde ting dung voi Web tran mang. Nhung theo nguyén ly eta chitdng trinh thing dich Unterpreier) thi n6 thyc hién kha chim. Néu chung tinh thang dich phai thye hién phan tich chuung tinh ngudn mdi khi thuc hign thi cae chuong tink tmg dung s& rit cham Java vugt qua duge ede nhude diém trén bang cach dich ee chitong trink ngudn sang ngan nzit may ao khong phy thude vao chip (hé lénh eu thé) nao cf va sau do kt edn thye bign sé thong dich sang h may cu thé. Két gua cia chudng trinh dich khong phai la ma dich (Object Code) nhut két qua cla cite chutdng trink djch truyén théng ma ia chudi cae bytes cd si hao gém cite ma Ten thye hign (Opeode) vt cae tham cla may Ip tauyét (may do). My nay duce goi 1A may Java do (JVM - Java Virtual Machine). JVM e6 thé nhing vio bit ky mot bigu di€m, mot moi trudng cy thé ma ban 06, Khi cai dat trén mat moi truting xtc dinh (may od edu hinh od dinh) thi phdn mém dude théng dich va JVM trd thanh may cu thé dé ¢6 thé thue thi tng dung ciia bgn. Chuong trin Java duge thue bién nhu sau: Chuong it. Gidi thigu vé lap tinh val JAVA al Chuang tinh cae ma byte ie bt gun (Byte Coaes) wait (Source Codes) = ccompien) -——*~—7 nua ede (Some Sema | Kimi cbc bee ends Tap chung Vinh jova (Byte Codes) lava * 1 89 n9p tp (class loader) May Java do (Java Virtual Machine} T ae Shia eng va né diBy Hanh : (Hardware and OS) Ma the hign Tinh 2.2, Qua trale dich vi thong dich cheng teimh Java. Cong nghé Java gidi quydt vin dé te do bing cach dich chuag Wink nguds sang che md byte (byte codes}. Khi JVM thyc hin. né sé tim cae Afi tugng cin Lham chidu. cia ede l6p trong chung trinh ehinh {ehwzong trink dag dung) d thii diém thye hig. dé nap chung xuéng, Qué trinb phat trig va thuc hin chuong tink Java thus hign hu sau | bee dna dung jg ae Gates Thu vgn MyCless() Deh Byte Codes Kién ta va thing dich Nap eae top CChateng tri ‘hon dra dung hig hah ‘Qué sriah pee wién ehuong trink Java, Nhu vay, Jaya la ngdn ngi? ding khong yeu céu moi thi phai ein sing (xée dinh) 4 lic dich ma JVM cf thd nap ede lop {ede dét tng) cfn thiét @ép .class) dé lam viée Khi thye hign chutdng trinh Gng dung. Thong thuting, mi lép trong chudng trinh sé dude dich sang m@t 1p e6 dui (phn mé réng) la class, Theo cach 48 che cia Java 22 Lap frinh hudng di tugng vél Java. Khing 0 sf phy thude giita ofc tép nguéu trong qua trinh dich. Nghia 1a Ki eae giay ign (méi quan hé gra cde Ip) cava bi thay AGi thi khéng c4n phai dich lai cae tép chia ma nguén cia nhuing lép disse tham ehiéu hode cic lép tign ich, trit khi chink cae Idp ny bi thay d6i. Chung ta ch phai dich gi aling tép java méi hoge nhing tep da bi thay déi ‘pom Tei, OO va Java la nbting ngon nga nhiim nhitng arye dich khde mhau. }» Dei vdi C/C++ cai chinh Ja téc dé, manh mé va uyén chuyén trong M4p trinh. Khi thuc hign chuong trinh CACH thi moi vige obs hé chong déu phai bat diu va kéb thie 3 mot chong trinh con dije bigt, ham main(), Ching ta c6 thé sit dung thr vién dng, nbiing thé yéu céu duge hen két lai ksi cin, nhung vé téng thé la phai dinh nghra va xde dinh ngay tit trwéc khi dich > él vdi Java mue dich chfnb lis: don gin, than thign, hudng doi tung va each tan phAm tao ta nhing phdn mém de lap voi moi tring, Kh chay mét chong tah dng dung Java thi ofm chi ra nhung top doi tugng ma bgn muén ching thy thi nhing cdng vige edn thyc hign va JVM s8 nap eSe lop dé xudng khi c6 nnbu edu. V6i co ché thong dich thi phén lém céc yéu oft chi ti6t 68 dutge xde dinh 3 thai diém thufe hign, chit khong phai thoi diém khi dich. Do vay bé nhé duse e&p phat déng hic thuc thi chysng inh, 2.2. MOI TRUONG JAVA Nhu trén ching ta d@ khing dioh, chong trinb Java ¢6 thé dich va thye bin trong moi moi tring diéu hank, mign la & d6 e6 chitong trinh théng dieh (mdy Java da - GVM), Vin aé dat ra Ja lam thé no dé ket hyp duege ec ché thong dich Java véi ede 6 trinh duygt Web (Web Browsers). Nhiing viin dé lién quan la: > Ca ehd witly cde Web Site, > Tai sao lai si dung Java cho cing nghé Web, > 'Téehite thye hién cdc dit An ting dung voi Java. a Xtrly cae Web Site Mol die trumg iia Java duce die biét chi § IA kha nang nap xudng (downloaded) Web theo yeu edu va thyc hign chung trinh ting dyng len che may khéeh. Truée khi Java xudt bin thi Web duce xem nhut 1a nguén cung dp cite tu ligu (document) va chi thudn tniy 1d efe tu Ligu, Web sé duge tang thém gid tri khi o6 thém cae dang chia thém thong tin ‘bé sung. Trude day ede tu ligu chi chiia cae dit Higu thd, vai Java Web duge bd sung thém su lidn ket gitia cde mau dé ligu lign quan dé bién déi nhiing di lieu thd thank ubing thigu v8 lp trinh véi JAVA thing tin, Ban than Java la bién déi théng tin. Thay vi hién thi e¢ dé di Tigu, ode bé trinh duy@t duge Java hé try cho phép thao tc trén ofc dit ligu, théng tin, thye hién ph tich, thay dai Rich Uhude, yan + pham vi xir ly cae de Tieu dé eo nhung thong tin sinh déng. a Java va Web DE tra Toi duge edu héi tai sno cain Java cho Web, ching ta phi néim bit dude cae dae idm eta Web, (i) Doe lp véi mot erwing (Platform Independent) + Trude tién cée chudng trinh chay trén Web ddi hii phai khing phu chuge va0 moi trudng. Web phai mé déi voi moi ngwdi thong qua ede giao thie (protocol) chuan dé thye higm trén moi moi trudng + Neon ngit théng dich vét phir hop vai myc dich eda Web: Trinh duyét thong dich céc lénh cia HTML sang cae tut ligu c6 khuén dang dep sinh déng, dip ding theo moi yeu ci. + Khi thye hign chudng trinh, JVM nim gida phan eding va chutong tinh ing dung, lim nbidm vy thong dich efe ket qua 8 dang ma byte vao mai truding cita may khach dé thye hin, do vay dim bio duge efnh dée lap. (ii) Déim béo an nink (secure) thong tin ~ Bé dich Java dim bdo khong nap eée chitong trinh virus vao chutong trinh Ming dung. Khi chuong trink Java diige nap xudng theo yéu cdu cita Web, 1n6 kiém soat tit e& cae ma byte cia ching trink duge nap xudng va tam bao rang chting phai tudn theo cae qui din, cfc rang bude cha ngfin nga. + Mat khée, Idi goi cdc phuong thie trong ma byte khing phai la cac dja chi thu trong cdc ngon ngit truyén théng ma I cac tén goi Ghong qua dink dank déi twang). Trong cic chuidng trinh CiC#+, ef 1éi goi bam lit ede dia chi va rat Ithé kiém soat vi trong dé cho phép cae phép nhay tu do téi bat ky dia chi nao dé khi thyc hi¢n chuong trinh. Trong Java, ede déi twong vA che phwdng thie mé té cée hanh vi eda ede déi tugne déu dude xae dink bing dink dan do vay dé dang kiém soat chiing va ddim bdo an ninh cao. (iii) Daim béo an toan (safe) + Nbigu khi sé rat la nguy hiém néu xy va cae su of tran b} nhé, vurgt qua eée chi sf gidi han. Java Iuén kim soat: dice céc tinh hutng dé. Vs du, cffu trite dit Ligu mang (array) va String trong Java IA ede lép a6) tugng va do vay c6 ed ché dé hs kiéin seat cde chi s0 va ede gidi han ste dung cia cée phiin ti trong mang Pa Lap tinh hung dé tugng vél Jove + Han nita, dava iehOng si dung con tr3 (puinter} nén khong cho phép nhay ty do dé thao tie thy ¥ d cae vi tr bat ky trong bg nh. (ia Phyc higm cta ludng (rawltithreads) Web la efi trating ma 3 d6 co nbidu eu kign 06 thé xity va cng that, Neon nga sit dung dé Jap trink Web phai hd trg dé dé dang cho nbiéu sy kien 06 thé thu hién cing mot lie. + Java dap ding duge tigu chudn da ludng vi: The abit n6 eung cdip ofc 16p 6 thé thye hién nhur la cac ludng duce didu khigu riéng bigt. ‘Thit bai la Java up thue hién diige su két hdp gia e4e phan dj bd trong cée Indng voi mhaut, (vo) Dam bao dong (dynamte) 4+ Cae lép khong nbat thiét phai dich va Hién két dé tao ra mde tép Ken e6 the thye ign ngay. + Thay vi d6, hie thyc hin Java ed thé xac dinh nhing lép nao cén thi nap audng, con nhang lép khac o6 thé dé trén mang va sau dé nap ching v0 méi trudng Java khi cdo thiét, Bing phuong phép nhut ten, cde dng dung ava co thé gom nbidu Lép duye t6 chite phan tan trén mang. (vi) Dim bdo titong déi nbi va gon nhe + ¥tudng eo sd cae Java 4a ting dung o6 thé dat 4 trung tam phuc vu (mdy chi) va san d6 duige map vé che may tram Khi c6 yéu cu dé thye hién come viée. Dé vay, cdc ding dung phdi duge tf ebvie sao cho di nhd dé vige traa aéi bigu qua (nap vé nhanh) va dé sit yng vai moi neu. + Chuong tinh Java cb thé t0 chue thé duge vi chiing ¢6 thé t6 chide thoo nguyan ly “din bay", nghia 1a cée Ip o6 thé t8 chite thank céc g6i (package) va chiing sé dude nap vé Khi co nhe cfu. (eit) Chudn hod + ‘Trong khi C/C++ Ia nbting ng6n gt chudn duge xdy dung tot, ahung nhimg bg chudng tinh dick khée nhau lai cé thé cho ning ké&t qua khfe haw, Vi du, mot sé bd ehuong tink dich qui dinh ving bam maind phil la bam cé gid tr] tra Jai thi mot 86 khac lai cho phép gin mac dink iu int, hoge cde bd chvdng trinh dies khée nhau cho phép danh 36 byte bhée nhau cho ce gid tri int + Java la ngon ngi chudn va Iuén cho cang mot dang cdi dat. a Té chitc cae du an ting dung voi Java Cac tp chung tink nyudn Java chi chifa diing mot loa 1A nhiing mé La wé eac Top Chyong # Gi6t thigu vé lap trinh vol JAVA, 25 a chiing ta dé thidt lap, khéng cé ede bién toan cue, ang e6 ham mu (prototype? Mat sffldp 06 thé td che thanh cdc g6i nhut la cfc hd thOng con, Khu sgt Mp muda sit Aung ohiing lop diige #4: trong mot g6i mio d6, vi du khi cds sti dyng ede lp néi mang, ching ta phai nhap géi chia chiing la g6i java.net vao tp chita cae lop ‘ing dung. a Bé JDK (Java Developer Kit) Hien nay 06 nhiéu moi truting hd trg dé phat trién phn mém voi dave mh: Visual u+4, Symatee's Cafe, Borland JBuilder, JDK, v.v. 86 JDK do Sun cung etip thye ign dua chit y8u tren ede lenh dun doe nhép vao tt ode dong lenh va kha don gin, tien loi, JDK duge si dung phé bién cin bdi 1é moi neti 04 thE dé Age duige tir Web Site: bttp:liava.sun.com [1], B6 IDK cung cap ede cOng ey va cde chutsng trinh sau 1. jevac Chuong trinh djeh chuyén ma nguén sung mi hyte 2. java Bé théng dich: Thye thi ede ting dung déc lap, oc tgp tin class true tip. 4. appletuiewer Bo thong dich: Thue thi cdc tng dung nhung Yava apples) tt tép tin HIML ma Khéng cfin sit dung trinh duygt nhu Nesteape, hay Internet Explorer, w.. 4. javadoc BG tao ti Ligu dang HTML tix ma nguén cling cae eld thich ben trong. b. jab BO gO 101 Gava debugger) cho phép thie hién ting dong Wen, dat diém ding, xem gia tri elia cae bién, v.v. 6, javah BG 190 lap Aeader cia C va cho phép chuong trinh C goi cite phusng thite (hdm) clia Java vk nguége lai. 7. javap ‘Trinh dich nguge Assembler. Hién thi cde phuung thie, dif Lieu truy mhap duge ban trong ela tép tin clase da duye dich va hién thi gba ctia byte rode 2.3. CAC DANG CHUONG TRINH UNG DUNG CUA JAVA C6 ba loai chuteng trinh ¢6 thé phat trién véi dave: * C&o chuong trink ting dung age 1a, + Cac chiang trink ting dung nhiing foppleti. = Cac chung trink két hep cA 2 logi trén. 26 LOp trinh huéng 461 tugng vél Jove Boi vi Java Ta ngén ngit lap trinh hudng déi evgng nén chucng trink Java la tap ca mot hay nhigu lip déi tuong. Mai tép chuong trink nguén Java 06 thé chéa mi hay nhiéu dink nghia lip va tan oda tp phai trang véi ten cba lp cng khai va ed dudt Ja “java”. Mai dink nghia lop trong tép nguén khi dich sé duge dich va luu tit sang ee tép ridng (rang tén véi Len lép va cé dui “elass”. Tat c& e&e lép phai ditoe dich ‘trude khi thue bign. 18 vidt chuong trink Java ebuing ta 06 thé si dung nhing hé sogn thao phé dung nhw NotePad, WordPad, TextPad, Jereator v.v. Hé soan thio don gidn va thich hop nhat 6 Ws Ta ToxtPad. Ban of thé ngp version méi nhilt ella TextPad tit dia chi cia Web Site trén Internet: htin/www texinad com, nap Jereator tit httnd/www yereator.com ‘Sau day chiing ta xét mau chung dé phat trién efe loai chudng trink ung dung vei Java. 2.3.1, CHUONG TRINH UNG DUNG 6c LAP Chuong trinh wag dung doc lap 12 mét chong trinh theo nghia théng thubng cis chuong trinh; tép chudng trinh nguén mA sau khi dich cé thé thye hien true ‘Bé tac lap mot chudng trinh img dung déc lap, chting ta phai dinh nghia mét lép cd chia mot phitong thie dac bigt tén 18 main}. Chuung trink dge Wap bat dim va ket thie thu hign 4 main() giting nhu trong chong trinh C/C++. Khi xy dung m0i ting dung de lap edn tu fs 1. Tao lap mot Lap duge dinh nghia bai nguthi sit dung o6 phucng thée mainf) goi la ép chinh va dam bio n6 duige dinh nghia déng theo mau qui dinh; 2. Kiém tra xem ligu tép chudng trinh ¢6 ten trang voi Lén cla lop chinh va duéi “java” hay khong; 4, Dich tép chuomg trinh dé tgo ra cic tep ma byte code v6i cic dudi “.class” tung tng; 4. Sit dyng chung trinh thong dich eda Java dé ehay ehuong trinh da dich. Vidy 2.1, Chusng trinh ting dung doc lap. Bai toan. xd hy tat ay ding lép CharStack 1a cfu tric Stack va Ging dung dé dao nguige cde 11 StandaloneApp ava public class Standdloneapp{ public static void main(string axge (1) ( Chyong Hi. G6 tnigu v6 Kap tinh vei JAVA 27 Charstack stack = now CharStack (80) ;// Tuo m dé tong stack smaN teiv ,ioN any; ff Tyora | xau int leng = otz-length(t; USS kg ur trong x string str system.out.printin ("Dae nguoc day ky tu": forint k = 0; k < leng: ++) {1 Baza v0 stack stack push |str.char&t (K)); while (etack tesmpey()) //Léy rai stack theo thé ny do nave: syatem.out print (stack.pop())i system.out.printin(); Rabe } } class charstack { private char(] stackArray dong {i Ming cae ky 0 private int topofstack; Din cba stack private static int counter; wa 1 Ton tt tg0 Sap 6 gn public Charstack(int capacity)( #2) stackArray = new char[capacity] ; topofstack = -1; counter++: } public void push (char ¢} {stackarray [++opoestack] = e:} i} public char peek () (zeturn stackArray(teporstack] ;} public boolean SaEnsty() {return toposstack < 07) public boolean dsrull() { return (topofstack public char pop(} (return stackarray [topofstack stacknrzay.length - 21} i ‘Top chucng tinh StandaloneApp e6 tén trang véi tén ea lop ‘StandatoneApp, ong 45 c6 ham main(), Ham nay 1udn €3 dang: public static void main(String args (1}{ # Noi dung thye ign eta chuong tinh ) ‘Thnée tinh public cha main() cho biét 1A hAm nay duge phép tray nhtp 465 v6i moi lap tit ben ngoai cia lép StandaloneApp va cho phép goi dé thye hign bbi chuong 28 trinh théng dich Java, Tir khéa static khai bao ham nity phu thude vao ea Lép, khong phu thute vao dt tuong ew ehd, do vay khi thye bién khong cd phil tao Lap Abi tung dé got nhaing ham nbu thé, Tit void che biét ham main() khong cin két quid tri lai. Méu digu edn [uu ¥ niia 18 bam maint) tugng) argsi] cita String. 6 cae d6i 381A mang cae xf (ot ‘rong chueng trinh trén edn dink nghia lép thif hai 1 CharStack. Lap nay 6 che thuge tiwh: mang cde ky ty charl/ siackArray, bién kiéw int fopOfStack wi. b¢ déin so ey tut counter trong niu, Moi Khi mit 464 tong eka lp CharStack durge tg0 Hap Ohi tnan ta ta0 lap (con duge goi 1A cau 12) tudng mink @} (duge djnh nghia bd neue eit dung) thu hin dé gan céc gid tri cho ce tham eG theo yeu edu cha bhi toan, Dich va thye hién chugng trinh StandaloneApp.java Chifong trink ngudn Java 06 thé sit dng chudag trinh dich javac eta bp JDK: javac StandaloneApp.java Két qua eka Iénb dich trén Ls hai top Standaionedpp.class, CharStack.class cho yte code eta hai J6p titdng ting, Nhing tep lép da duge dich c6 thé thue bien vei chitdng trinh thing dich java uhu saw: java StandaloneApp Két qua thue ign eda cluteng trinh: Ha Noi, Viet Nam Late y! ¥ Whi thue hign voi Java thi chi cdn viét ten ldp chia ham main() va khong cf dua thém dudi class, V Whi soan thio chuung tein’ nén tg0 20 mgt thut mye ridng, vf dy e\users Lan dé hi chutcng trink nguén (StandaloneApp). Tat 4 nhizng top lip (class) déu duge tgo ra é ther mye chia chudng triah ngués, Phil ch! ré the mye chifa cde chuung tinh dich, thong dich javacexe, jaua.ere. ‘TThudng ede chong trinh may duoe cai dt va duge Inu 6 thc mye, vf dis es\dhL.3\bin \jave. Y. Moi lép trong Java déa mac dink xem Ta Ip con cha lip Object duge sty dung lin trong g6i java.tong va goi nay cfing duige xem 1d mac dinh sit dung mb khong cdn nhap (import) vao nhuc ete géi khic Ichi sit dung cic Ip chia trong 26, Chucng #. Gi6i thigu ve IGp fink voi JAVA, 2 CHUONG TRINH UNG DUNG NHUNG APPLET [Applet ia Toni chung trim Java de bidt ind khi thyte hig phés dye abxing vio chong tinh ding dung Khe nhu cic trinh duyét Web Browser, bode appletvicwer cig JDK, Ching cn Ia ¥ le Raw hot ese Leinh duygt Web Browser: Internet Raplore dda hd urg dé thue hign dave Applet. Sau day ching ta xay dene mot applet tan 1a AppletApp thuc hign Netscape dio nguge day c&e ky tu nba ehuting trinh ting dung d0e lap d vi dy 2.1 ‘Vi dy 2.2. Jova Applet Rai fodn: Nhigm va tating Uy abit bai toan 6 vi du 2.1 nhwmg thue hign theo applet 1 SpplesA pp. jova import java.applet.Applet; —_#/ Nhgpthurvien cha lop Applet import java.awt.Graphies: ff Nhap thu vigo ebtta kip Graphics 1! Moi chuxmng trinh applet déu pls mS rag (extends), ké thita tir op Applet public class Appletapp extends Applet cha String dayGoc, dayNauoc; ack atack J Nap chsng Tai him init() dé the hign Kh] nap va thy hign applet public void init(+f na stack = new CharStack {80}; dayGoc = new Gtring("maN tei ,ieN aH"): int leng = dayGoe tength(}; — # SKY urtrong xu J] Dai cde kf wretia dayGoe vio stack dé sau dé lly ra theo thirte nguc Lai for(int k 5 0; k < Teng: kr} df Puaviostack J push (dayGec. chara (h)) + 7 Doc 1 tirstack theo the ay dio nguge Va lum vio dayNBuoe dayNguce = new String(t; J Xau mai rong ohile (istack.iskmpty (0) dayNguce 4 stack. popOs y ‘A Nap chéng him paint() 48 hin th (v2) ode thong bio ela apyet public void paint (Graenics gC ff @) g.drewString ("Day ky tu dao nguee:", 25, 25); g-eraw! y String (dayNguor, 25, 45): 30 Lap trinn huéng a6! tugng v6l Jove } clase Charstack ( private char[] stackarray; Jf Mang cae kg ur private int topofstack; 1) Binh cia stock private static int counter; 1 ToSn tic tao 1p ding public CharStack (int capacity) { stackarray = new char (capacity) ; topofstack counter++: } public void push (char e} (stackArray [++topfstackl = public char pop() [return stackarray [topofstack- public char peek() [return stackArray ItopofStack} public boolean iskmpty() {return copofstack < 07} public boolean isrull() { return (topogstack = etackarray.length -1);} a} Se } Lép Applet (ten dy di java.appiet Applet) trong thu vién cac 16p Java chudn (3 g6i java.appiet) cung eaip khuGn dang va cae ebite nang chinh dé phat trién ede applet. Lép AppletApp md ring lop Applet nén né ké thita tt e% eae chite nang eta Applet, rong Iép AppletApp 06 hai ham thanh phén: init), pains duge ké thita tif lap Applet nhimg dude nap chéng dé thye hidn vide dao nguye xu va bién thj théng tin cia applet duge tgo xe trén man hink. Hai léoh import 4 déu chucng trinh }am nhigm vu nhap bai g6i thu vién Java cba céc lép Applet va Graphies. Chui § thily 3 diy him main() la khong can thiét 46% vai applet. "Trude khi di tim higu nguyén ly hogt dng cita cée applet, ching ta hay dich va chay thit vi du trén, Dich va chay chung trinh AppletApp ch chong trinh AppletApp thyfe hién hoan to&n ging nhu déi voi chuong trinh ing dung die Sap 6 vi du 2.1. javac AppletApp java Két qua ching ta cing e6 2 tp lép AppletApp.class vA CharStack.class. Chung Il. Gi6i thiu v6 I9p tinh voi JAVA, 31 Chugng trinh applet khong thé thy hign truc tiép thong qua chung trinh thong. dich java nhu d6i voi chudng trinh éing dung déec lap. Chuong trinh applet phai due dua vao trang tu ligu dinh dang HTML (HyperText Markup Language) dé sau d6 gp duige xuéng thong qua Web Browser hoge appletviewer cha JDK. Top HTML chtia eae thong tin tatdng ‘ing vé tén tép 1op dng dung applet va nhums thong tin khde cin nap applet xuéng dé thye bien, Théng tin toi thiéu clin phai e6 Ui véi lp applet la: + Ten cia tép l6p applet, * Kich cd cia applet tinh theo pixel Vi dy: ‘Tep nay dutge soan bing hé sogn thao bat ky va duge ghi vii tén goi AppletApp.heml- Tep AppletApp.html o6 thé sit dung Web Browsor dé chay hoje si dung appletuiower duge JDK cung ep nbu sau: appletviewer AppletApp.htm! Ket qué thue hign cia chuong trink applet: inh 24. Phuce hién chuong trinh applet vii elucomg trinh thong dich appletviewer. Chu trinh hoat dong cula applet Chuong trinh tng dung applet duige thue hign nbu saw: 4 Khim6t applet diige nap va chay b&i Web Browser thi n6 &@ gifi thong diép init) cing véi cae di ligu, kich thude cha Window dé chvtng trinh applet khdi ding. « Khi bit du thye hign, Web Browser théng béo cho applet bat diu bing each goi phuong thie start0. « Khi vai khdi trang Web c6 chia applet thi chuong trinh applet nay nhan duce thong diép stop() dé dimg chuong trinh. 32 Lap tfinh huéng d6i twang vet Java. Hoat dong cia ehyong trinh applet duce mé té nhu trong hinh 2.5, Grong dé 4 init): Phuong thie nay dude goi Khi applet duge nap Wn du va duge xem nhu JA todn t& tao lap cho applet, + stari(: Duge goi khi applet bat daa thue hign, xudt higm Ki: ~ applet duce nap xudng, - applet duice duy6t lai + stop: Due goi khi applet dimg thyc hién, nhumg chuta bj xoa khéi b@ ahd, + destroy): Duge goi nay trutée khi applet két thtic, khi trink duygt Web Browser ty déng Iai vA applet bi x62 khéi bj nhd. Trinh duyét Web Browser —_—_— a tim chuang tinh appict 0 Dorie N06 nae. Duyétirén trang web o— = aoe | deattond j start) Thy nig applet Thoat kh3i browser : ‘Thoat kha trang web Kat tue applet Hind 2.5, Chu tink hoot dong céa appiet 2.3.3, CHUONG TRINH UNG DUNG & DANG APPLET LAN DANG BOC LAP Java cho phép xy dumg ebudng trinh chay ditge ed & Web Browser [dm mbu mét ting dung déc lap. Mot chudng trinh nhu thé phai: > Dinh nghia lop ung dang mé rong, ké thita tir lap Applet, » Trong lép dng dung phi cd him main(), ‘Chuong Ni. Gigi thigu vé 1Gp trinh voi JAVA 33, Vi du 2.3, Chugng trinh chey duge ea véi Web Browser va vhay dée lap import java.aut.Graphice; —//XinChaojava import java awe Frame: Amport java applet applet; public clas# xinchse extends Applet ( public void inito[ resize (200,160); 1) Bat lai kich these } public void pain: (Graphics 9) { g.GrawString("Xin chao cae bani”, 60, 25); t 1 Harn main) diam bdo chung tvinh s chay duge de lap public static void main(String args {I} { Xinchao h = new XinChao() :/! Toramitdsi nemycia XinCheo hinit(); Frane £ = new Frame ("Chao mung va Applet’); £.resize(200, 160); E.add("Centex", E.snow(); t Chudng tvinh nay sit dung lép Frame dé tao ra khung c@ 200 x 160 khi né chay Tap. Chi tigt hon vé dé hoa va cae chiic ning cita Frame sé duce dé cap chi tiét 6 ede chuong VIL. Luu ¥: Tat nhién dé chong trinh XinChao chay duge voi Web Browser thi phai dua vio tp HTML (tep XinChao. html) tiring ty nhu vi du 2.2, ‘Tom Igi chong trind viés bing Java eé thé: > Lacde ung dung doc lap, > LA eae chuong trink dng dung nhing applet, > Hofe két hop ci hai loai tren, Tuy ohien gitia tng dung dic lap va applet cha Java cing c6 nbiéu diém khac nhau vé cach khai béo va t6 chite thue bin nhy trong bang sau: UTIs Lap linn huéng 46 tugng voi Jove | Ung sung de ____seva Applot xa bao Li iép eon ole Bit iy lap no trong cae | Phi Yop con ota Applat _ got thu won oa ep Ging dignaé bea | Tuy ston bo tah duyet Wed guyét ian ‘Yau cf bp nha Bb nha 16 shu 1B whe Bn cho ah dayét | _ va applet g0 ich nop chuang Urn | Nap bing dong ifn Thang qua tang Web Dirigu va0 | Thong qua ede tharos6 ten tng Ken | Cac tham 6 dat wong tep HTML ay dia ei, keh thao be i _ civ Gach te nue han | Noi nat die dupe bbt du va kt tds @ | Got ee hamn: nk), stan stopt, rmaind) abu trong CCH stow), paint) Kidv ung cura = Ung ing ten a8e may cD Server, | Gang > pee | Thy hign treat qua pdt 7] Paép tos auan he * > ‘Thre hie td qua pi _ nstanceot | Phép so sanding thite | = ! “Thue hig tu ai qua pai 9 | Pade va (AND) 4 “Th hin tr tr qua pha bitwiserboolean | te | Prep toae loa tt (KOR) “ “Thu hign tetra qua pha wen bitwiseiboctean 11 | Prep hac (OR) ten \ The hia tr i qua oh bitwiselboolean 12 _| Phép va (AND) logic 88. “Tre ign er qua ph 13__ | prépnoae (OR) ogic 1 | Thufs ign tu rat qua pha 14 _| phon toan au sgn 2 Thy ign to rat qua pnd 15 | Cac ohép g6n —— “Thue ign trph que te as 48. Lap trin huéng 481 tugng véi Jova 3.6.2. CAC QUI TAC CHUYEN BOI KIEU Ep kiéu Java 1A ngdn ngu eat chat vé kidu, né thofing kiém oat chac chd sy tudng thich gidla 1 trong eSe ng canh thuc Bign ngay tit hic dich chuung trinh. Tuy abién, mot 'm soft cing chi the hién duge hie hé théng thy hig, vi dy nhu kidu fidp) ge bién tham chigu hay cde truing bgp thye hién cée phép gin ma 2 toan hang khdng tuong thich véi nhau vé kiéu (vf du, gan gif tri Kieu double cho bién kidu ind). ‘Trong cae trudug hop nhut thé, ngwti Mp tinh phai su dung qui the 6p kidu. Qui tic ep kidu 6 dang: (type) Lise thue hién he thding sé chuyén két qué tinh toan eda bidu thitc sang kiéu auge ép Ta . Vidu lost f= (£loat) 100.16D; # Choyén s6 100.15 dang kige double sang feat Lae 9 ¥ Khang cho phép chuyén dé gita céc kiéu nguyén thiy v6i kidu tham chiéu, vf du kiéu double khing thé ép sang cdc kiéu lip nls HooSink due. ¥ Kidu gid tri boolean (logic) khang thé chuyén sang eae kiéu di lieu sé va nguge gi Vide chuyén déi kigu theo qui tée ép kiéu nut trén diege goi la chuyén ddl (ép) bide tuing minh, Java cing ging nau nbiéu ngdn ogi lop trinh Khe, ngoai ea ché ép ikigu tung minh edn sit dung co che ép kid khang tuling mink (mae dinh), vi dy ef thé gan ky tur char cho bién kiéa int. Sau day ching ta xér hai cach chayén déi md rong va thu hep kiéu. Mé rang va thu hep kigu Doi voi cde kién di Higu nguyén thay, gid tri cfia kidu bep han (ebiém s6 byte ff hon) 8 thé duce chuyén sang nhiing kigu rong hon (chiém sf byte nbiéu hon} mA khéng adn that théng tin, Cach chuyén kigu €6 duge goi 18 md rng biéy. Java cho phéy thye hien mi rong kidu theo cae qui tée dude m6 ti nut trong binh 3.2, byte short > char Hink 3.2. Cde gue tde mé-réng kiéu. Chung ti. Gée than phén eo 26 eta Jove a9 Vidy. char c= RY; tank = 1 Ifmés rong kidu char sang kidu int (mae din} Chuyén aéi kiéu theo chiéu nguge lai, tit kiéu rGng vé kidu hep hon duge oi 1a thee hop hidu, Latu ¥ 18 thee hep idu 06 thé dén ti mdt thong tin. Thue 16 1a moi sit ehuydn di kidu duge phép ma Khong phil Kind rong kidu wu hinh 8.2 tn du la chu hep kidu, Nhu vay moi cbuyén d6i gia char va hai kidu byte chu hep kidu. Vi du. int k= 19; char ¢ = (char) Ky //Thu hep kigu cia k vé kiéu cae short cing 1 ‘Thong thudng vige thu hep kidu phai st dung qui tac ép kiéu tudng minh nhur tron. Cudi cing chung ta cang edn Luu ¥ vé ngd dink phai thye hi¢n chuydn déi kiéu 4 Thye hign cde phép gin Adi vai cae bign kidu nguyén thay bode kidu tham chidu, inte hign cac Joi goi ham (phwong thie) véi cée tham bién kiéu nguyen thoy hay kiéu tham chiéi ‘Thyte hign tinh ton cAc bidu thite 86 hoc, “© Ghép che wi két hop cAe déi tugng eda lop String va cae kiéu dit lige Kha, Sau day ching ta xét mét sd nhém cde phép togn quan trong trong cde biéu thize. 3.6.3. CAC PHEP TOAN SO HOC (Ofe phép toan sé hoc dvige chia thinh hai loai VU Cf phép toain 1 ngdi dun nguyen): + (cng) va - (trid), che phép déi déu, 21 Cée phép ton 2 ng6i (nhi nguyén): * (nh4n), / (chia), % (ay modul - phép chia lay 56 dup, + (edng) va - (tri). Cac phép toan itodn H2) sd hoe duge stt dyng dé thiét lap ede biéu thie toan hoe hu trong dai sé. Cac toa hang (déi sf) cha cae phép toan la cae biéu thite 06 gid tri kiéu 86. Rigng phép + (edng) cin ditce sii dung nap ching dé ghép cac x4 néu co mot toan hang la dGi tung eux lop String. Latu $+ Y Thi cu két hop thue hign cia cae phép toan sé hoe don nguyén 1a tit phai qua trai: Amt val = - -20; (20) cho 20 hi ¥ gida hai phép todn dein nguyén la phai c6 dau edch, 50 Lap krinh huéng d6t tuong vél Jave That ty két hop thye hign eda ede phép todn 6 hoe hj nzuyén 1A tit test qua pha: Amt newval = 10 #4 + 4; #(U%4)*4)choX int fval = newal / 5; Hi Thute big ebia nguyen vi cho két qui BL Y Lie tive hign, eéc toan hang phéi duge tinh toan tiv trai qua phdi truée khi ap duug vél phép todn. Khi 2 toan bang kbae nhau vé kiéu thi chuc hién chuyén déi kidu nhu trén da dé cap, ¥ Phép ebia nguyén (2 totin hang déu a kiéu nguyén) ddi béi sd chia phai Kha 0. fmt iv = 10 / 0; 1 Sinh Ibi ngogi le sé hoc: ArithmeticException ¥- Phép chia sé thye (f¢ nha ing toan hang kidu sé thye) che phép chia cho d va kéi ana phép chi cho 0.0 18 INF (36 In v6 ctingy hoge -INF hang dae bigt trong Java. Am vo ciing), hai float n, ma 4.5/0.0; — /ChomlaINF n= -4.5 /0.0; #8 Cho a fa-INE Y Trong Java, phép chia lify sf du % thuc hign duy fleat m= 11.5 8 2.5; Cho mi 1.5 ¥ Kht olf dung cite phép todin don nguyén doi voi cae d0i et kidu byte, short, hode char thi trude ti8n todn hang phi duse tinh ri chuyén vé kiéu int va ket qua la kiéu int. Vi du: byte bL.b= 4; // OK $6.4 kia int wdumy cho phép thu hep kigu mac dinh ¥é byte b 1-b; HLS WL ~ b 66 két qua kigw int do vay thu hep kigy dot 1 oi phi wimg minds DL= byte) (1b), /f How toan dda, short h= 80; /OK: 30 kidw int cheyén vé short (me dioh di ¥6i hing nguyen h=h+4; FLEE Vib + 4 cho két qui kidw int vi thé’ khong thé gan trye tip ¥8f/choh Kise short. Nhimg, n= (hort) (ha); //lai dng hose e6 thé viet h= h + tshor}4: 3.6.4. CAC PHEP CHUYEN DICH <<, >>, >>> Cac phép chuyén dich <<,>>, >>> thye hién dich dang biéu dién nhi phan cha toin hang thi nh&t sang trai, sang phai s6 lén bing ia tri sd nguyen eda toin hang thit hai. Ciie déi sé'eda chuing ludn la hidix nguyén. Chuong lil, Cac thénh phén co sd cia Javo. 61 Biéu dién nhi phan cilia cdc s6 nguyén Trude tién ching ta hu ¥ rng rac gid tri ngnyén biéu dién cho ed gid tri duong vA gid tri dm, Java sit dung phdn bis 2 dé litu trit ccc gidé tri nguyen Cho bit trong dang bigu dién nhi phan cia gia tri nguyén (kiéu char, short, int, tong) duce dinh s8 ti phai qua trai va bit diu bing 0. Bit coo nhit 1a bit d&u, 0 cho si duang v8 1 cho s6 Am, ‘Vi dy: Bang 8.4 che mét sé bigu dién phan bit 2 ciia ede s6 chigim 1 hyte Lit §2 Ob h link phan bis 2 thye hign abi sau: Cho truée gid tri nguyén ditng, vi dy 41. Bidu dién nbj phan eda -41 duge tinh nhu sau: Bidu dign nhj phan Gia trj thap phan Cho tritée gid tri omo1ooL 41 Lay phan ba 1 11010110 Cong thém 1 60000001 Ket qual phanba2 11010111 -41 ‘Tuong ty nhu vay di véi sé Am, lay phén bi 2 iia 3 Am sé duge s6 dong. Bang 3.4, Biéu din nh chan cla cdc sé chide 1 byte Bid didn hi phan 8 bit Gia tr Hexa ont ox onnttit0 one 4 oor01001 ox20 2 000010 x02 4 0000001 ovat ° ‘0000000 O10 a wnat Oxf 2 sinitt0 oxfe “t vow xa “127 ‘1¢000001 oe 128 10000000 x80 52 L9p tinh huéng di ucng vel Jove Phép dich trai: << a < 192. Khi dai s6 bén trai o6 kidu byte hoge short thi sé duce chuyén sang kigu tuong ng cha dé sd tht hai, Néu dG 66 the hai 1a int thi bit dau cha gid tri Ayte, short #8 dude md rong dé digs vao nhitng bit eao hen, vi dy byte b= 42; /# 11010110 intresbe<4;#/-€72 Kihi gia crj byte 14 -42 duge chuyén eang int thi bit dau 1 sé duge dién vao cac bit ao hon nhw eau: ced = LATIAtT) 11LD1141 12211321 TO1O110 << 4 | 1N117111 11441111 11111501 01100000 = OxffftELGO = 42 Phép dich phai va dién bit dau: >> >on Djeh tet ed cae bit cia @ sang phai n Mn, din bit dau vao bén tai Vidy inti=12) intresi>>2 3 Java st dyng 4 byte dé hru trit sf nguy in do vay 12. << 4 = 00000030 60020000 00000900 00001100 >> 2 = 00000000 90000000 00000000 0600041 = Oxd0000008 = 3 Mat khae c6 thé nham théy méi lin dich sang phai 2 vi tri thi tudng ditong vai vide vay gia tri tude dé chia cho hat (hia Os vA Kam tran dui. ‘Tyong vd tems we = 2 123, Chuong it, Cac thénh phéin co sé cla Java, 52 Khi déi 86 bén trai cé kiéu byte hode short thi s& duge chuyén eang Kriéu tudng ting cia d6i sf thit 2. Néu doi s6 thé hai IA ine thi bit dau cia gid tri byte, short so duge mé rong dé digx vao nhting bit cao han, vi dy. byte wna e Kehi gid tri byte 1a hon nhuf saw: n sang ind thi bit d&u 1 sé duege didn vao ede bit cao bea = L1A11L1 11200914 11111122 11010110 >> 4 = E1111 11111411 11111141 11111101 = oxmmonnmta = Phép >>> h phai va dién bit aye>n Dich it ed cfc bit cia @ eang phai n lin, dién 0 vao bén trai. Vidu: byte b= -42; #1101010 intee=b>>>4; #7 268435483 - khde két qua tren rat nhidu Khi gid tri byte la -42 duge chuyén sang int thi bit dau 186 duge didn vao cae bit cao hon nbur sav beoo4 = 1101111 11101111 11111111 11010110 >> 4 = OOOOINIT 1111111 11122111 11111101 = oxoMMHa = 268136453 Luu y: Y Git tri cia di sO bén phi (4 trén 1a n) Ion 1a sé nguyén (dutong) do vay dai st Dén trai (4 tran 1a a) néu Ja byte hodc short thi phai adi sang kidu int. ¥ Két qua ctta cdc phép chuyén dich vi 30 Unit nhait 1a Jong). 86 ludn 1a ing (howe 1a kiéu long n€a d6i 3 CAC PHEP GAN MG RONG Cae phép toan gan md rang ¢é ef phap dang: = ; trong dé Ia biéa, 1A mét trong sé ede phép tod: + poe, 22s, & = va la biéu thie tuong ting vai cac phép toan da chon. 54 (Op tinh huéng d6i tugng voi ova CSc phép gan sd hoc mé réng Ai véi che phép gam a6 hoe md rong thi qui tée ov phap trén tuong duong ng nehia véi lgnih sau: = () ( ())i trong 05 li ede kigu 86 vi Ia phe tofn 58 hye 4, « % 1%, Bing 3.5 m6 ta chi tiét hdn cae phép gin sé hoe mé rong. Bing 3.5. Cac phép gan 38 hoe md row x= 1) Oc # (9) x= Tbe (op: eM Oh xa (TION x2 e% (2) Do gui dinh cée phép gin atThoe ma rgng 06 deme tuong dong vé mat nat nghia oh tyén néa thue chat 1a a8 c6 su ép kidu gitia oe két gua cia bidu thie 6 vé phar vé kidu T cha bign x. Vi du: int 125; JASE a2; A Vink bur Tas i= Gut) (* G42 byte b=; (1 Ge hing nguyen che php thu hep kigu chr mae dish baad UF Fints oh Ta: b= {oyte) (Gnd) b+ 4): bab4+4; If Sai vt v€ phai es két qua kidu int cd b kidu byte doi épkigu Cac phép gan logic mé rong Cac phép gan logic ‘md rong dude dink nghia chi tiét nhu trong bang 3.6. Bang 3.6. Céc phép gan logic md 1979 Cac tenh gan Cho bb va bigu thite » kizu boolean b=@ Sled: bebe beGlielk Chuang it, Cée thainh phGn co sé cua Jove Ey Vidy: boclean b1 = false, bi falso, b8 = true; b3 &—b3 &b1 1 b2; ff false vi b3=(¢b3 & b1)1b2); Cée phép gan mi rong trén bit c6 dang nei nghia tuong tu nhu eke phép gan 5 hos mé rong, nghia 18 két. qui city bia thie ben phai duce ép vé kidu cha bien shan ket aud (vé trai). Nhiing phép nay duge dinh nghia nbu trong bang 3.7. Bang 3.7. Cac phép gan md rang trén bit Cac lénh gan Cho Ta kidu nguyén cia b a bid thie & b=Meaeen: bamiwbrcon: ee bem tbl ten Vidy: int vo=- 42; char v1 = 741 byte v2 = 13; v0 G&= 165 J 1...1101 0110 & 0.,0000 1111 = 0.0000 01 10 6) DOi véi nbiing phép gan mé rong trén bit duge qui dinh bw trong bang 3.7, do vay Eh6ng cn ép kiéu khi thu hep kiéu, Cac phép gan chuyén dich mé réng Cée phép gin dich chuyén mé ring: <<=, >>, >>9= due dink nghia niut trong bang 3.8 Bang 3.8. Cac ehép gan dich chuyén md réng Gc lenh gan Moc: b= w>> (ayy: be ies ons Vidu: inti=-42; / Bigs dién-42 4 deng ni phan phén bi 2: 1.,.11010110 56 Lap trinn huéng A6i tung véi Java: ops ay PL LNOID IW >> 4 =e LATLLLIOL @ 3): byte a= 12; a, 7= cha Java dude dinh nghia giéng nhw trong c4¢ gon ngitap trich khée (ahu C chug han). Trong dé ehi edn Iau § 1a 2 dd od’ phdi Ja cic biéu thite sé. Ridng phép so sénb ding thde (bing) thi phite tap bun. Sau day chiing ta xét cac dang so sinh dang thtte trong Java. So sanh dang thie trén cdc gid tri kiéu nguyén thiy: Cho trude hai toan hang a, b 26 kidu dit Ligu nguyén thay. b avabobbang nhan khéng?, ayhia A néu ching 06 cae gid tri iiéu nguyén thiy bing phau thi cho két qud ding (true), ngrie Iai cho sai (false), a'=b a vahod Kbie naan khéng?, nghia la néu ching 06 cic gi tr} Kifu ngayén thay khong bing nhgu thi cho két qué ding (true), ngtide lai cho sai (false). Litu ¥: Kiéu ef a6i sf e6 thd 1a cae kiéu 96 hote kidu boolean, nhuing 2 déi ed phai usp c6 kiéu thtong thich va sanh duge vai nhaw. Vf dy ( ev2; — /ffalse boolean t2 = avi == sv3; false SV sv4 = sv2; boolean t3 = sv4 Hue System. out .print: “4 tae System.out .printin(™ t2 = "+ t2); system.out.printin(* t3 =" 4 £31; } 3.7. TRUYEN THAM SO VA CAC LOt GOI HAM Nhu phin dau ching ta da dé cap, cée déi tugng trong chung trink trao dé} véi nhau bang cach trao déi cae thong diép (message). Mat thing diép duge cai dat nhu 1a lai goi hem (phutong thie) trong chuong trinh, goi téi ham thanh phan cha déi tung déi tac. Nhiing ham tinh ¢6 thé goi vii tén ela I6p. Cac tham sé trong cae I6i oi ham cung edip edeh thite trao déi thong Gin gida déi twang gai va déi twgng ahjin 58 Lop trinh huéng 461 wong voi Jove thong diép, Xi phap cfe Iai goi ham co ede dang eau Tham chi d6i tong >. (edanh sich tham bién hign ¢hdi>) . () Tin ham> fedank sich tham bigh hidn thii>) Vid: hinhTron.veO: Wink con 13 6 twomg et Kip Hii Tron int {= java.Jang-Math.abs(-4); _ {/'Goi day di ten cla lop Math int j = Math abs(-#); 119i theo tn cia Kap Math someMethod(ofValue), JBL sang, hose hap khong tug mah ‘Trong lap tinh, chiing ta di quen véi khéi niém dank sdch sham bién hinh thie We dank sach cae tham bin duce dinb nghia trong dink ughia cae bam. Danh sich tham bién hign thot 1 danh séch tham bign duce truyén v8o cho ede TB: got ham tudng wing. Cae dank ach nay cé thé la rong. Hai danb each hinh thie va bién chil phai tudng thich voi ahau: 86 che thom bidn oda dank séch bin thiie phai bing sé cae tham bién cha dant sch hign tha. ¥ Kidu eda cae tham bign hign théi phai tung thich voi ‘kiéu cada tham bién binh thie tuong ting, Bang 9.9 tm tit céch truyén efe ia tr phu thuge vao kidu cia cae tham bién inh thi Bang 39. Truyén tham 06 ee ‘iu ota tar bin int te Gia vl age tunyén Cac ku nguyén thiy Gis Pi kidu nguyen thiy Kigu i (close) Gia tn tram chi du mang (array) Gia tn tham che Tate fy"Toong Java, moi tham bign ddu duge twuyén theo thar tri (passed by value). Truyén cac gid tri kigu nguyén thy Khi cac tham bién hink thite c6 kidu La nguyén thi thi gia tr} ofa c6e ign duce sao sang biée binh ehite trong efe Ji goi ham. Bai vi eic"biem hink thite la exe bp trong dink nghia eka mot ham non moi thay agi eda bin hinh thite Khong dnb hudng dé Chuong it. Cac thanh phén co sé ca Java eae tham bidn bign this, Cac thar bign 66 thé 1a ede bidu thie va ching phi duge Ufsh crude khi truyén vio 18 gol ham. Qui wée chuyén di kidu gidta tham bién hink thie va hign thai cing gidng nhu da auige thio Tudn 8 2.6.2. Vidu 3.5. Truyén cde gid tri nguy@n thiy lass KhachHang Lt // Lép hich hang public static vold main(string[) arg) ( HangSX bash = new NangSx1); 1 Tao ra moe ai tong 20; double tien = banh.tinh(10,g3aBan); int giazan Systen.out .printin(*Giaban: " + giaan) ;// gdaBan khong 61 Systen.out printin ("Tien ban duoc : * + tien) ; } } 11 Lgp Hang sin xsi class HangSx{ double tink(int num, double gia) { gia = gie /2; return num * gia; (Thay dai gia nhimg khéng dnb hudng t6i giaBiaa, 7 nbueng $6 tiéa vn bi thay dé theo ‘Khi thye bién chiang trinh sé cho két qua: Gia ban: 20 Tion ban duoe: 100.0 ‘Trong ham main{) cha lép KhackHang tae hién: + Tao ra mét bién €éi tugng bank ciin lop HaneSX, +Dinh nghfa bign thanh phiin giaBan = 20, + Goi ham thanh phan tink) phan cia bank dé tinh sé tién ban duge 10 chiée ban. Mac da trong ham finh() cua lép HongSX di thay 46i tham s6 hinh thite gia nhung Ikhi goi vGi tham 86 hign thai giaBan thi vige thay déi trén khéng Anh hudng tsi gid taj cia giaBan eo. {Gp tinh huéng dé! tuong ¥6i Jove Ching ia efing efin Tau g 1a kiéu eda tham bide hign thbi thi 2 eda ham tinh la int, trong khi kigu cia bign hinh thite uang ting 1a double, Trude khi gi hign thei duge sav cho bin inh thie thi sang double theo mae dink. Co ché tray’ 6 thé minh hoa mhut sau: tr eis bi 4 tri (si 20) kidu int phai duge md y tham bign déi vai ede gia tri nguyén thay Lei goi ham. ‘Tham bién hign thai double tien = banh.tink( 10) giaean x0 de ¥ 20.00 Dink nghia ham ‘Tham bign hin tae —_¥. double tink(int nun , Souble gia Hint 3.3. mo td cu che truyén them bien dit vot eae tri nguyen tht, Truyén cae gia tri tham chiéu déi tugng Khi bién hién thai tham chiéu tdi doi tugng, thi gia tri tham chiéu cia déi tugng 56 ditge trnyén cho bién hinh thite. Nghia lA ed bién hink thie va bién hign thdi la hai tan goi khac nhau (bi dank) cits déi tugag dutve tham chiéu téi trong I3i goi ham. Do vay, moi thay déi thue hién d6i voi cae think phén eta déi tugng thong qua tham bign himh thie e&ng sé 06 higu qu’ ck sau 1d: goi ham va tae dng Jén bién hin thai Vidu 3.6, Truyén theo gid tri tham chiéu pBhachlang2,java clase KhachHang2{ // Lop kivich hing public static void main|sctring!} argi{ Banh banhMoi = new Banh|); J) Tyo ca mgt di vwagng (1) System. out. print1n ("Nhoithitvobanh trio khinuong:* + banhMed .thit) muong (barhMoi } ; a @ System. out. printin(*Thit cus baoh sau khi nuong: "+banbMod .thit) ; } public st ¢ void nuong(Banh banhNuong) ( #@) banhNuong.thit = “Thit vi Pe rem, binh ABi aha thas tit vi Chuong tii Cac thanh phén co $8 ele Java 61 banhNuong = nutl: Hid } } class sann{ /P.6p Banh (5) String thic = ~Thit ga"; // Qui dinh cits hing lam nhtn binh bing thit ga Kin thue hién chuung trinb s@ cho ket qua: hoi thit vao banh tree khi nuong: Thit ga ‘Thit cua bah saw khi oueng: Thit vit M64 d6i tugng bank Moi duce tao va 4 (1) véi ahdin nhéi “Thi ga” whut qui dinh é (5) Trong 1di goi ham auongi! J (2) gid tri tham chiéu doi tudng eta bién ign thai bankMot duge truyén cho bign hinh thite bankNuong eda ham nuongi) duge dinh nghia d (2). Trong ham nay bién «hit ea lép Banh bi thay déi thanh “Thit vit", Nbiing thay doi nay oO anh budng ti trang thai eda déi tugng duge tham chiéu Nhung vige thay di cd dai tong nhu dat banhNuong thanh null (khong 06 doi tong) 4 (4) Igi khéng hé c6 vée dong doi v6i dél tung tham chiéu bai bign hin thi. ‘Tham bign hinh thie hanhMoi, RefB2n") sao gid ui tham chigu. vi tao nt bi dan ts ach ¥ banhNuong Ref(Banh} ‘Tham bin hign thal af Phuc hign di gei ham ‘Tham bien hinh thie banhMoi: Ref(Banh) Seu lai goi him, gi er cia tham bigh hign thai bhiga cho cling d6i rang da bs thay di anh Nuong Ref(Banh ‘Tham bign hign thoi by Ngay sau khi thue hign 1éi goi ham 62 ep tinh hung di tugng vai Jove ‘Tom lai, bién hinh thde chi c6 thé lain thay déi trang thai (ede Uhank phan) cha déi tugng duge tham chids t6i trong [bi gol ham, Truyén cdc tham chiéu theo mang Mang (array) trong Java duige xem nu Ta déi tung. Cae phan tit cia mang cé thé co kidu nguydn thiy boc kiéu thom chide thidis lp). Chi tiét vé m&ng ching ta sé xt 6 chuong sau, Sau day ching ta tim higu vo eo ché truyén tham chiéu kiéu mang (che tham bién 1a mang). Vidy 3.7, Truyén cic than chiéu kigu mang Loe java class Loo{ public static void main(string{} arge){ Enel) day = (8, 1, 4 3, 2, BIvPRhGItg0 mang day va gn tr dn IV Hida thi céc phan tr cla day true khi Toe for (int i> 0; i < day.lengen; i+) system.out.print(* > + dayfil); system.ouc-printin(); // Xudng ddag indi nt maxtadex = Hi Lge ra phin ticcue dai vi dia vé eu6 for (int index = 1, index < day.length; index++} { if (day[maxtndex] > day [index] ) doicho(day, maxIndex, index) + “ay maxindex = index; } i Higa thi diy saw Ki Toe . for (int i = 0; 4 < day.length; i++) system.cut print(® * + daylil}; system.out .printlad) ; , public static vold deicho(ine{] bang,int i, int kf // (2) tt tg = bangli]; banglil = bang(k]; bang(k] = €97 Chuang i Céc thanh phén ca sé ¢iia Java 6a, Két qua cia chuong trinh sau khi thie hiém: Trong phan dinh nghia him dotCko() é (2) bién hinh thie bang 1a kidu array (mang). Hao: niy duge goi trong ham mainG a (1), trong dé bién hién thai day cong lk kiéw ming. Vi trong dava eae lai goi ham déu thu hign theo tham tr] (eall-by-value} adi véi kiéu ngayén thiy vd tham chiéu dai vai kiéu Jép nén ham doiCho() abut tron la thay déi duge eae phan tit cis day (bia bién thai). Cae tham bién final ‘Tham bién hinh thie 6 thé khai bao vai tir khéa final dang trude, Tham bign los nay due goi lA bign cudi “tring”, nghia 1 26 khong duce khéi tao gid ti (a tréng) cho d@n Khi né duge gi mBt tr] nao dé vA khi da due pan tei thi gia tri dé La eudi cung, khong thay doi du¢e. ‘Vi dy 3.8. Sit dung tham bién final ®hachHang3 java class Khachilang3{ i/ Lop khdch hing public static void main/String{] arg){ Hangsk anh = new Bangsx() ; (Tao ra $ Asi tung, int giaBan = 20; double cien = bi cimh{10,giasan) ; system.out .printin(*Giaban: "+ giaBanl; /f'giaBan khong déi syatem.out .printin(*Tien ban duoc: * + then); } i #L.6p Hang sin xusit class Hangsx( double tink(int mus, final double gia) [//(1) a 12.0; HQ return num * gia; // Thay ddi gia nhung khéng anh hiking t6i giaBan, J ahuing 96 tién vin bi thay di theo i hi dich ham tinh(), chuong trink dich sé thong bao Ii va khémg dhtge phép thay di if i eda bign final gia trong dinh nghia ham mhu 6 (2). oa Lap rinh huténg 261 tung vét Jove Cae déi si’ vita chuong trink Gidng nhc chuung trinh C, chning ta 26 thé truyén ede tham sf cho chuting trink tren dong Iga, vi dy java TinhTong 12 23 4 Chitdng trinh java thong dich 1ép TinkTong a6 tinh wing che dO; 9812, 23, 45. Chuong trinh TinkTong 06 thé viét mhit sau: ‘Vi dy 8.9, Trayén tham sé cho chung trinh 1 Tioh'Tong.jave class TinhTone{ public static void main(string argel)}{ float © = 0.08; for (int i = 0; i < args. length; ies) 3 = Float .valuedf (args [1]) -fleatValue () {f Chaya day chit 36 tanh 9 system. out for (int + at(*Tong cua" + azgs{9]); = 1; i < args length; i++) gyoten.out.print(* +" + arge (il): system.out.printin(" =" + 8) i Khi thue hign chugng trinh cho két qua ‘Tong cua 12 + 23 + 45 = 80.00 BALTAP 3.1. Nhing tit sau o6 phai 1a dinh danh hay khong? af az, b/ an2, of cclass.d! My$100 32. Day *..17...% o6 phi la chi thich hay khéng? tai sao? Nhing lénh nao trong s6 cde Iénh sau 1a hop 1¢ (a) char a = “wO061 ¢byohar "wOO6 | = ta: (ei long phone = 8235469, (Chuong il. Cac thanh phéin co $6 cia Jove 65 (@)float pi = 3.14159: (e)double p = 314.159e-2; 3.3. Nhing khai béo nao cia ham maind sau day Ia ding a) static void main(String arg. Ft at moain( Suing arg .. *7 6) publie static void main(String argfD{ /* "1 a) public static void mainiStingl| are... *71 (6) final static publiz void main(Sting[} argyt #24 {b) public siatic 34. Chuong trinb sau cé 16i hay khong, néu cb 1éi thi hay sita cho dung. ANbieiDo PUBLIC CLASS mhietDo{ public VOID main(String arg) { double fakre = 62.5; double celsius = £2c(fahre); System.out.printin(fahre + °F = * + celsius + ‘¢e'); } double f2¢ (float £){ Return (£ - 32) +5 / 9; Chudng trinh sau khi dich va ehay 86 cho cai gi? public class MyClass{ public static void main(Striag! arg) ( String a, b,c; © = new string (“Chase”) ; a = new String ("Mio") : ar by System out printin(cl; } 3.6, Difu gi sé xay ra hi dieh va chay chung trimh sau: publi¢ class Progt{ public static void main(String[] arg] { 6 (@p trinh huéng 461 tugng vél Jove ime k= tt int i= sek + kee + der ayatem. our princin (4); , ‘3.7. Didu gi sé xay va khi dieti va chay chuong trinh sau. public clase preg2{ public static void main|scréns{) arg) { int k= 0; intl] a= (3, 6}; atk] = i = 8; d/Limy mic in Hn cia UJ cao hem phép sin = este atol et + atti: system. out printin{s j } 8.8. Cho bid: két gua thye hién eta chuong trink sau: public claes progs{ public static void main(strine[] argi{ int k= 0, i = 0; boolean r, t = true; {e806 (4 4s 005 r= it &&0< (hte ahs ree | O< (eae hs re it [| o< ae system.out .printIa(i +" * + kl; } } 8.9. Két qua dich va chay chuong trinh sau Ja gi? public class Progt{ public static void main(string{} arg) { int a=, b= 9; Ant] Arr = new int (1); barr {ol incita); ince (barr) ; system. out.printla parr = * + barr (ol); bi ae* vad" bated e® } public static void inci(int x){ x++7); sume Chuang I Cée thanh phéin 66 s8 ea Java 67 public static void inca(int() x){ xtoles;}; } 3.10. Viet chung trinh nhap vag mét 96 nguyén va in ra dang nhi phan eda sé do, 3.11. Vidt chuong trink nhgp véo ngay, thang, nim vi in ra ngay thit bao nhidu dé Grong nam (365 hode 866 ngiy déi véi nam nhudny 8.12. Viet chuong trink nhap vio mdt sd nguydn va in ra tat cd cée 66 nguyén ts nhd hon hode bing sé nguyén dé 3.13. Viét chong trinh nhap vao mét s6 nguyén n va in ra tat cd cac sé hodn thién hd hd hoke bing s6 n d6. CHUONG IV LOP VA CAC THANH PHAN CUA LOP CAC DOI TUONG 4.1. DINH NGHIA LOP Dinh nghia mét lop la die t mgt kiéu dit ligu méi vA mé td etch cai dat kidu dit dé. Née6 ef phap duige qui dinh nhw sau: {] class ] [implements ) i trong d6 class, extends, implements JA cae tit khoa. Nhimg phiin trong cap [ va ] A tay chon, Nhiing phdn nay sé duge dé cap chi tiét 4 cée phan sau. bao gém ede didn, cde phucing the (him) thank phén va ce fodin tt tao Igp (constructor). Khai bao cae bign thank phén nhu dé thao luan é mye 3.3. Cac him va tofin tit tao lap s€ dude dé cap 6 mue 4.2, 4.6 tiép theo, Than cia mét Ip Iai ¢6 thé chtta cae khat bao efia cfc 4p, giao dién (interface) khée va xem chting nhu 18 ede thanh phdn eda J6p. 4.2. DINH NGHIA HAM THANH PHAN Hanh vi cia cae déi tugng eda mot Ip duge xée dinh bai cae ham thank phén cia kip d6. Cu phép dé dink ngbla céc ham 6 dang tag quat: |} [)) [[ < 30 L@p tinh huéng déi tugng vai Javea < o6 thé a kiSu nguyen thy, kigu lép hoae khong. e6 gi ti ta ei (kid void). ‘ bao gem day ede tham bign (kigu 3) return 1; lai gid A. else return 2; i t 4.2.14. NAP CHONG CAC HAM THANH PHAN Méi ham déu co phan dinh danh ham, bao gém tén cia ham, kiéu trd lai gia tri va Ganh séch céc tham bin. Trong jp trinh huéng déi tugng cho phép sf dung cing mét tén him nbiing dink nghia nhiéu néi dung thye hign khéc hau, Nimg ham nhur thé duge goi la ham nap chéng hay ham tai béi (overloading) Liu 3+ Co ch€ nap ching cho phép mét ham cé cing mét tén goi nhung danh sich tham bién khac nhav, do vay sé e6 cée dink danh khée nbau, Ning ham duge nap chéng véi cae dinh danh kbéc nhau cé eée phan cai dat thye hin nhitng cong vige khae nhau va c6 kigu tré lai khéie nhaw. JDK API da xy duing rat nhiéu ham duge nap chdng. Vi du, lip java.lang.Math 6 ham nap ching min() xac dinh gia tri eye tiéu cha 2 86: public static double min(double a, double b) public static float win{floac a, float b) public static int min(int a, int ») public static long min{long a, long b) Cang céin Luu sla dah sich tham bin efia cic ham nap chéng phai khée nhau vé so lugng hoge vé thit ty céc kidu cia cae tham big, Vi du: Chuong IV. Lép va ce thanh phén oila lop cée déi tung a public vold methodAlint 2, double b){/* ...*/) wu public int methoda(int a} {return af HQ) public int methoaa() (return a} u@ public long methodA (double a,int bi {return a¥b} Ha) public long nethodA(int a, double b){return a} j/NoOK(S) Céc ham tren 6 cac ditsh dank tuang ung 1 methedAtint, double} Hay methoda (int) WR) methoda(} HOY methoda (double, int) na) methedA lint, double! 165°) gidng bet ohu (1) Bon noi dung cai dai diu cda ham methodA la duge nap chéng chinh xe vi dank sich cac tham bin khée thau. Dinh nghia cho him methodAtint, double) di c6 & (1) va sau do Iai bi lap lai 4 (6) do vay phan cai dat endi cing nay khong cho phép. Mai dinh danh ham chi cé mot. ndi dung thue hign duice cai dat. Lie dich, nbimg ndi dung fai dat chinh x4e. 86 die gin cho dinh danh ham nap chéng tucing ting dé tien ket thufe hin cae 1éi gol ham. Ngoati cd ché nay chong cho cde ham cin 06 cv ché viet dé (overriding) cing cain phai due phin bist, 4.2.2. VIET DE CAC HAM THANH PHAN VA VAN DE CHE BONG CAC BIEN ‘Trong nhiéu trudne hgp, mot I6p con o@ thé viet dé, thay ddi noi dung thue hin eda ning ham duge thita ké ti Iép cha, Khi nhiing ham nay duoc goi dé thyc hign déi voi nhiing doi tugng cita lop con thi ndi dung duge dinh nghia méi 8 Iép ech 8& duge tinge thi, Sau day la mat s0' chu ¢ khi sit dung ca ché viét de. ¥ Dinh nghia méi cia ham viet dé phai co cng dink danh (tén goi va danh each tham bin) va cing kidu tra Lai gid tri, ¥ Dinh ngbia méi iia ham vist dé trong lép con chi e6 thé xe dinh tat ed hoge tho con ede lép ngoai 1é duge ké ra trong ménh dé cho qua ngosi 18 (éhrows elause - se trink bay 8 chucng 5). Y Dinh oghta cha nhiing ham sé vidt d@ khong duge khai bio final 6 l6p cha. Vi dy 4.2. Viet de va nap chéng cdc ham thanh phan At Khochiang java import java.io. *; 38, Lap trinh huéng €6l tugng vei Jove class Den { protected String leaiHoaen = °Hoa don nho: *; 40% protected double docHoapon (int giabien) throws Exception { HO) double soGio = 10.0, hoaDonNho - giaDien= soGio; system.out printis(loaizoaton + hoaDonNho) ; return hoaPonNso; } } class DenTuyp extends Den { public String loaiHoadon ="iica doa Loni"; if Bi che bing i public double doctoabon (int giaDien) throws Exception { HNigt db hh 4) double soGio = 100.0, hoaDontion = giaDien* soGio; system.out -printIn(loailloaDon + hostentcn) ; return heaDonLon; q public double dockoapon (}( System, out .printn(*Khong ‘co hoa don!) ; return 0.0; 4 public class Khachkang { public static void main(string args{]) throws Exception { HW) DenTuyp deni = new DenTuyp(): HO Den den2 = dent; i) en den3 = new Deni); UH) J).Goi ede him da viet db dent .docHoaDon (1000) + (10) den?.docoapon (1000) ; way den3 .docHoaDon (1090) 7 112) iv Veuy nhtp t6i ede big than phiin als bi vide d2 (bi che Ong? system. out .print1n(dent.loaiHeabon) : mo) Chucng IV. kép va cdc thanh phéin cite lap e&c d6l tusng % syetem, out _printin{den2.1oaitfoabon) ; way System.out .printin{den3. loaitioadon} ; wuss HGol cac ham nap chong, dent .decHoaton (} } Kei qua thue bidn ets chuong trink KhachHang: Hon dda Ion: 100000,00 Hoa don lon: 190000.00 Ha don nhé: 1000.00 Hoa dan lan: Hoa dan nhé: Hoa don nbd: Khong 06 Hida don! Ham docHoaDon() cia lép cha Den duige dink nghia 6 (2) va san db dutye viet de tong Ip con DenTuyp @ (4). Nbtng ham nay sé bd qua ngoai 1é Exception (l6p thit vign @ gi java.io.*), Pham vi lép chia docHoaDon(} e6 thé thay déi, vi dy, chuyén tiv protected sang public, va tham bidn etng ¢6 thé khai bao final, vi dy final int giaDien, Lai goi ham docHoaDon0 thue hién déi véi déi tugng cia 16p con DenTuyp va lop cha Den 6 (10) va (11) tudng ung, két qua thue hién noi dung da viét dad (a), Lai goi him docHoaDon0) adi véi déi tudng oa 1p cha (Lop Den) 6 (12) tat nhién & thyc hign néi dung dude dinh ngbia 4 (). Litu ¥: Cav ham final, static khong duge phép viet dé, Co ché che béng cila cac bién Vé nguyén te, mét lap con khong duge phép vist dé eée bién thanh phan cba Iép cha, nung 26 thé bj che khuat chiing tudng ty nbut bign cue b9 trong lop con. Lép con cé thé djnh nghia Iai (che) cac bién da duge dinh nghia trong lop cha. Khi dé cac bién nay cia lép cha sé khOng thé truy nhap true tiép theo tén d lép con. Trong ham efia I6p con e6 thé si dung tofn tit superd (68 a6 cap & mye 4.5) dé truy nhap tAi cée bign cia lop cha bi che khuat. Trong vi du 4.2, bién loaiFfoaDon due dinh nghia lai 6 l6p con DenTuyp (8), do vay vi lénh (18) thi den J.JoaiHoaDon sé cho két qua da dinh nghia lai d (3). Nhung 2 déi twong den2, den? Igi thude lép cha Den do dé vin git nguyén loaiHoaDon cia lop cha duce dinh nghia 4 (1). ca Lap Winh huéing di tugng vet Jova Vidt dé va nap chéng la khac nhau ‘Trude tien cin phan bigt 19 hal co ché viet dé va nap chéng la Khie mhau trong Java ¥ Vigt dé you cau eine dinh danb him (cing tén goi, cing danh séch thami 56) v8 cung kiéu trd lai két qua da dutse dint nghia tal 1dp cha, ¥ Nap chéng you edu khée nhau vé @jinh danh, nhung gidng nhau vé tén gol cla am, vi thé chiing sé khse nhau vé si lugag, Kidu, hay thé ty cia eae tham bign, ¥ Ham cd thé nap chéng trong cling lp hoe d cae lép eon chéu. ‘Tar nhizng J6p con khi mudn goi t6i cae him d [4p cha ma bj viet dé thi phai gai qua roan titdai didn cho lép cha, dé 1a superO. Bai voi ham nap chdng thi Iai khéng cin hu thé. Ti goi hm nap ching due xée dinh thong qua danh sich cae doi sé hign thai sah vai doi s6 hinh thite dé xée dink: noi dung tuong Ung, 4.3. PHAM VI VA CAC THUOC TINH KiéM SOAT TRUY NHAP CAC THANH PHAN CUA LOP ‘Trong lap trinh hung &6. tugng, khai nigm lép clude si dung dé bav g6i va che gist thang tin, Tuy sbign gida cde adi tuyng phai thitng xuyén trao déi thing digp vii nhau dé the thi ahiing yéu edu eta he tc ein lip dutge quan ly hi thé nao? Sau day cling ta xét mbuing Twat quiin Ty tray ahap tdi ede thanh phan (biéh, ham) eda lop trong Java 4.3.1. PHAM VI CUA CAC THANH PHAN Pham vi cia cae thanh phin ed hai loai: © Pham: vi lép eita cae thanh phn, © Pham vi khdi ci eae bigin eyo bg Coca!) Jf Pham wi lép Phem vi lép xéc dinh nhang thank phan duge tray nhap bon trong ela mgt lop ke ch lop dutge ké thite). Quyén truy nap eda ching thuéng dude x4e dink théng qua cae b6 ngit (madifier): public, protected, private. Ban trong dink nghia cia ldp, cae bién tham chiéu ti chinh lép a va duce quyén truy ahgp tdi tit ca cde thanh phén ca n6 ma khong cn quan tam t6i cae bd nav cla ching, Vi du 4.3. Pham vi lép ciia ee thanh phan class Bongpex{ Chuang IV. Lop va ee thanh phén cla lap cée déi tueng Cae big thanh phan private int soWatts; 186 waus ei beng den private boolean batiat; Iftrae ~ bong sing, false tat private String vitri; J/ Noi dat bong den 17 ie has thas pin public void batpen(){batrat = true:} Ba den public void tacben(){on0ff - false;} Tieden public boolean tatHaySang() {return battat;} public Bonghe nhanDoi (Zongden borgcu) { HO Rongben bengMoi = new Bongben(}; bongMod . soval ongen ., sowacts ; HO bongMoi battac = bongeu.batTat; Hd bengMei.viTri = new String (bongcu.viTril : Hay } } Ham nkanDoi() 4 (1) eta lép BongDen ci tham bign bongCu va biGn cue bi bongMor déu tham chiéu téi lp BongDen. Mac dd cic bién thank phan sOWatts. batTat.viTri la private (66 hau vidng) nhung ching vin cho phép truy nbap ai vet cf 2 tham ebiéu trén 32), @), va (. 2} Pham vi khéi Trong chug trink, cde lénk kai béo va ede 1gnh thue hién co thé gop Lai thank titng kha (block) bang catch six dang {, }. Chi f la thin eda ham, cla lép efing IB mot khéi. Cée khdi c6 thé Léng nhau vA khi dé luat phain vi dutge Ap dung cho ofc bién exe bd, Ludt pha vi phat bidu ting quat la mée bith duce khai bdo d trong mot hot 66 pham vi xdc dink bén trong khdi vé Khéng xde dinh 6 ben ngoai kid do. Inte ¥: ¥ ‘Trong cing mét pham vi khéng thé Khai béo mot bién hai kin. Cée tham bién eiing khong thé khai bio Iai trong than eta ham, Latu y 18 trong eée khdi thi Ten Khai bao Ia tut do, thit tut khéng quan trong, mudn khai bao 6 chd nao cing duve mién Ia phai khai bao triée kbi si dung, V. Pham vi kihéi cia bign duge xe dink kd Lit ché bit daw khai bao cho dén két thie Ikhoi (gap du ngote ‘tong ting). ¥ C6 thé o6 nhiéu Khoi Jeng nhau nhung Khong diye c&t whau va nhiing bidn Khai bo 4 kh6i ngoai déu co pham vi xde dink § trong moi khéi bao ben trong nd. 76 _ Lop trinh huéng dé tugng véi Jove Vi du: hinh 4. minb hoa cae tinh ehat vé pham vi clin che khéi. public staric void main(String args(I9t i Khoi | Khong thd klii bSo lei ede thar ign (1) HSsring arg char chuSo, for Ge k= 0; k-< 10, 448) [17 Kh switeigfehuSo) {_f Khai 3 ease “V's intl; default: int i: 4/3) Ldi vi khai bao fai i trong cling khdi Mi swites greed #/ Khoi + int i 44) OK int chuSou (5) LOi vi chuSo di durge Khoi bio is 8 ngodi, AO 1 int ky 4) (6) Li Wik da diese kai bio & Wa6' ngodi, KG: 2 1 int k: HOOK Hink 4.1. Mink hoa phem vi elie ete khoT chucag trink, 4.3.2. GAC THUOC TINH KIEM SOAT TRUY NHAP CAC THANH PHAN CUA. LOp Mot trong nhting wu diém eda phuong phap hung déi tung 1a co thé td chic dit Ligu. theo nguyén ¥ bao géi va che gittu thong tin. Cac thuge tinh va ham thank phan cia lép co thé khai bao thém mot s#hé ng dé kiém soat quyén tray nhap dai vdi nhitng. thanh phdn dé, Khi thiét ké cée thanh phan cia lap déi tugng, chting ta ed thé si dyng nhung bé ngit sau: + public + protected © mac dinh (khéng sit dyng thém ba ngit khi dinh nghia lp) + private "static "final Chuong IV. Lép va cc thanh phan cia Idp edc déi tuong, mw © abstract + syuchronized "native * transient + volatile Trong phin thdo Iudn sau day chiing ta att dung mot 50 ky higu eka UML @nified Modeling Language) a mins hoa. UML, ky higu ‘+’ cho thude thsh public, “# cho protected va *-‘ cho private @ Cae thank phén public ‘Thude tinh public xée dinh tinh céng khai cita cae thank phan, Thanh phan khat bao cing khai Qrublic) cho phép truy nhip moi ndi trong hé thing, c& déi vsi cae Kap cing g6i (package) lin nhiing lép & cae géi khac cing shin thay duge, Vidy 44. Tink efing khai (public) ota efe tinh phiin 1 Top: SuperelassA java m package goin; # Dink nghia wii es wen goid public class superclasen{ public int superctassvar; Hoe public void superclassmethean()( /* ...4/) ff (21 } class SubclassA extends Supercla*oa{ void subclasemethoda()(snperclass¥ara = 20; } // (4) } class AnyClassA{ SuperclaesA obj = new Superclasea!); void anyClassMethoda(} { ob}. superclassmerhedn(] : 1 ts) } 1) Tee ShelassR java © package gcse; import goia.*; // Nhap ede Lop di duge dink nghia & goi o3 #en wei. public class SubclassB extends Superclasaa( void subclassmet node () {superclassttethoaa | “tn } class anyClasse( 8 Lop trinn nuéng 6 tuong véi Jove superclassa ob) = new Sup o void anyClassMethoa? (}{ ass); obj superclassvarA = 10; VE (8d } Vi dy 4.4 cé bhai tép nguén gém Rai goi cac 6p dude dink nghia 3 (1) va «). Cie lap trong géi goi o6 thé stt dmg (truy nhap hay whin thay duge) ede thanh ph: eda cde lip trong oi govA, Lop SuperclaseA 8 goiA c6 2 lop con Gnd réug inay ke shita): mt la SabclassA trong goiA va SubclassB trong goiB. Kha ning tray ubap t ee thimh phin public cba eae fap trong 2 got tren vtec minh bea & buh 42 » Khacht: Tw lop con trong cing géi co thé truy nap t6i bién superclass Var cia Jp cha (4), vi eae bién Khai bao céng Khai cia lép cha duce ké thita sang eho eae lap con cba no: © Khach2: Tit nhitug 6p khong ké thita cia 6p Seperclassa, nhumg trong cing gol thi van c6 thé truy uhap duge bi thank phan odng khai superelawMethodAQ nit 5) © Khach3; Tir lép con khang trong cing géi van o6 thé truy nbap téi hom superclassMcthodAQ (7), vi cas hiim khai bo ebng Ishai cita lép eha deve ké thie sang cho ede lip com eta né + Khachd; Tir nhitng lap khéng ké thita cfta lép Superclassa va & khie goi thi vain ¢6 thé truy nhap duige tii than phan cong khai superclass Vara nhu a (8) sid “impor” eaB hoch Khachd " Subclass AnyChss® ass y-_|- ols |__*SuperelansWara int obj Supe “+SuperclassMethodA ‘SubClasshethodB || anyClassMethot® eT Khach? K ail: — AnvClass Subclass obj SuperChiasa, << _ Baye phep try nhap sanyclassMethodA Quan he ke thie SO ith: d.2. Kha mang tray nhép dit vi ee hah phn public, Chuong IV. Lép v6 ede thénh phéin cla lép céc dé tugng ~ ‘Tom Iai ciie thank phéin khai public e6 mign xe dinh rng nhat, ¢6 thé nbin thay é mol not trong hé thdng. itl Cae thanh phan protected Nhimng thant: phan duge bi trong géi chita Idp dé va uit 1© ve protected cho phép truy shap adi véi tat cf cae Lép ca cée lip eon (6 thé & mhiing 261 Khic) cia 1p chia ching. Néi edch khae, nhiing lip khong phai la Sop con va 3 hing ei khse cht Kkhéng duce phép truy nhap t6i cae think phan khat bo protected. Vi dy 4.5. Thude tinh protected ca ese thanh phan 1278p Superctassa java a packace goia inh nghia 261 c6 te EOLA. publie class SuperclassA{ protected int. superelass¥arA i112) protected void superelessHechods (77... */) uQ } class SubclassA extends SuperclassA{ void subelassMethodA() (auperelassVark = 20, } tay } class AnyClassA{ SuperelassA obj = new SuperclassAQ void anyClasisMethndA () { oby -superclassMettiodA () HS) if W Tap, SubclassB java (6) package 2018; import goik.*; |) Nhapede lép dt duge dink nghia & poi 66 te guid, public class SubclassB oxtends Supers lassA{ SuperclassA objA = new SubclessB() HO) SubclassB objB = new SubclassBO J43) void subclassMethadB () ( obj B superclassVethodA (} : Ding 2) obj A.supere LaselethodA 0 S44 (10) 80 class AnyClassB{ Lap tinh huéng déi tugng véi Jove guperclaséA cb] = new SuperclassA(): void anyclessMethodB (1 [ cbs .superciassvarA = 10) 3 {KNong cho phép (11) KhA nang nbin thay duge cia che thinh phin protected cia cic Lop § hai #61 ween duge minh hea trong hink 4.3, = | esta mae | Superclass SulsclassB AnjChass |) “BSoperclass Vara: int {© obj: SuperclassA, #SaperclassMethod AO) SubelassMethodTs |} anyClascMethodB = Khach? Khach! ———— 7 ‘Subclass AnyClassA bass —— Quan he ke thita |, obj: Superclass <— Duge pep | | aayCtassMethod SubeloasMetboda || YE Ciro ray ty oo ° Hinh 4.2. Khe aang tray nhdp cia cdc thant phan protected. Phan tfeh hoat dng cia chuong trinh (ren, ching ta nbn thay « Khachi: Til lop con trong cing 201 ¢ thé tray nhap di bi superclassVarA (4), vi cae bién iehai bao profeeted ci. Lop cha duige 46 thita sang cho cae lap con cia « Khach2; Tic lip khang ké thiva cia lop Superedassd, nbuing trong cong goi thi van co thé truy nhap chide tai thanh phén protected euperclassMethadA() mbit 5 (8): + Khach: Tp con khong trong cing gei van of thé truy nhép t6) ham superclassMethodAO (9), vt cic hima Khai béo protected eta Top cha duge ké tha clang cho ede lop con cla nds nhumg ange di tudng eam cies obj ofa Subclass dude tao va theo SuperciassA 8 khong. thé nhin thay duoc thank phan dace bao huang IV. K6p va céc thanh phén cile {6p e6¢ dél tugng 81 vé cia lop cha 4 g6i khae (10). Diéu hen ch nay dim bo ring nhing 4p con nam @ nhting g6i khae vai géi cia lop cha chi co thé truy nhap due téi nhitng thanh phin protected lit lép cha thang qua sf tham gia ela ching Leong céu trite phan cfip theo quan hé ké thita. 1s Khachd; Tit lp khong ké tha cite lép SuperclassA va J khie goi thi khong thé tray nhgp duge t6i thanh phén protected superelassVerA nhut 8 (1D). (iii) Cac thank phdn private Nhiing thanh phan 33 hit rigng private duge bio v8 chat che nit, khdng cho phép ké thita va chi cho phép truy nhap d6i véi nhiing ddi etong trong cung Idp, Noi each Khe, nhing lip Khac da la 4 cung mat gi, hoge li cic lép con chan cing khong duge phép truy nhgp tryc tiép i0i cae thinh phdn riéng private Vi du 4.6. Thuge tinh private cia cac thanb phan it Tep: Superchass jaa wo package goiA; _// Dinh nahi got c6 ten goiA public class SuperclassA{ private int superclassVarA; HQ ant) { superelassvara = 10;} ney privace void superclassMet> th class SubclaseA extends SuperclassA( void gubclassMethodA () [ superclassvarA = 20;} 11 Bhhong duge phép (4) } class AnyClassA{ Superclass® obj - new SuperclassAl); void anyClacsNechoda() { obj .superclaseMethoda() ; 4) Khong duoc phép (5) } I Top SubelassB java © package goiB; import goiA.+; _#fNhap efcIép da duoc dinh nghia & g6i 06 ten soi. public class SubclassB extends SuperclassA{ SuperclassA objA = new SuzclassB() ; Ho SubclassB obj& = new Subclass3 (1; a) ura void subelassMethodB |) ( objB.superclassMethods (1; // obj. superclasstethoaa() :// } hs class AnyClassB{ superclassA obi void anyClassmethods () { obj superclaesVark = 10; Kha nang truy nhap 14i cae than phin private cha cae hga trong hinh 4.4. Lép trinh huéng dé tugng voi Java Khong due phép Khing cho phép o 0) mew SupexclassA(]; 17 Khong cbo php 11) bp 6 hai géi trén duzge min Boi import” Khacht SuperclassA, {or AnyclassB ‘SuperclassVar: int I ‘bj: SuperclassA | SubclassAMethod BO [7 SuperclassMetnodAQ l ‘any CiassMethodB wos smal AuyClssA || SuelessA | Obj: SuperChassA | | | VanyciassMteihoaao, [Siete Quan he ké thie ‘Duee phép tray nbap <— {(())[; Ham abstract 1a ham prototype, chi khai béo phan din danh ham ma khéng dinh nghia ndi dung thic hign, do vay no I him khéng diy d@, Ham abstract thiting chi 18 chic cho cae lép abstract va né phar duige cai dat ndi dung thye bien & trong cite 6p con chau eda Iép chita him do. Linu 5 ¥ Ham final khong thé khai b4o abstract vA ngude Iai. ¥ Cac ham trong interface &6u 1a cdc ham abstract. (ix) Céc ldp abstract Lép duge khai béo abstract Ia I6p tritu tugng khéng cé thé hign, Cau trie may thudng duge sii dung dé nhim thye hign (ng quat. hoa nhuing khéi nigm, nhiing thye thé ow thé trong thye té. Vi du, ching ta cé thé sit dung lép Vehicle (phuong ign gizo thong) nbu la lép tritu tudng va lam lép co sé dé tir dé md rng thanh nhGng lép ew thé (khong tritu tygng) Car (616), Bus (6 16 bus), v.v. Lop abstract phi mgt him abstract. Nhing ham nay sau dé s® duge cai dat noi dung thye hién trong cfc ldp con chau eta Ip ehita chiing. Vi du 4.10. Minh hoa kha ning truy nhap cia lip abstract /]ihakho java abstract class Bongpen{ Cac bign thanh pha a int soWatte; 4 Chuong 1V: L6p va ede thanh phdn cia lép cdc déltugng 389 boolean batTat; string vitri; 3/ Flan tha phén public vold batSangi) {batTat = true; | public void tat()(batTat = false; } public boolean sangfat |) {return batTat; } 1 Ham abstract abstract public double xacDinhGia (+ :// Khong ck dit noi dung } class DenTuyp extends BongDen! 11 Bin thanh phn int dodai; int maw; JF Cai dat hm abstract xacDinbGiad public double xacbiahGia() { return 500,00 4 class Whaxho{ public static void mainistring args(]){ DenTuyp den? = new DenTuyp() ae) system. out .printin(*Gia dien: * + dent.xacDishoia()); Bongden den2; Ji Bue pgp khai bio kigu abstract 6) Bongden deni= new SongDen(); —_/fSei vi lop abstract Khong o6 thé } ] (x) Céc ham thanh phan déng b§ synchronized Java hé tr chong trink thye ign da ludng (multi threads). Co thé o6 nhigu luéng muda thye hién déng thdi tran mt 401 tutgng nao a6. C6 nhiing Jogi thiét bi, vf du nhu may in, kénh truyén ching han, ddi hdi phai 6 od ché dé chi mot ludng duse thuc hién, nghia la phai thyo hign déng bo, Tai méi thii diém, chi mot ludng (ten trinh) dude khai bao déng b6 synchronized duge thuc hign trén dol tegng ehi inh. Vi du 4.11. Mink hoa hoat dong cia ede ham synchronized class Stack{ private Object [] stackarray; private int topfofstack; 20 Lp trinh huéng a6 tugng voi Java synchronized public void push(opject elem) { // |2) stackheray [+ /topofstack] ~ elen: } synchronized public Object pop) { 112) object obj = stackArzay[topostack! ; stackarray[copofstack] = null; return obj; } AINing hi khsic public cbject peek) [ return stackArray [copof stack] ; } 3 Hai ham pushi) va pop) trong lép Stack iA déng bp synchronized. Do vey khi 06 nhigu luéng mutn dy cae phan ti vao Stack (him pushO) hay mudn Wy ra cae phan 1 (ham popd) thi chi mat ludng duge phén the hign, cdn nhing luéng khav sé pai ch, (xi) Céc ham thank phén native Ham khai bio native duoc got 1a him ngoai, NGi dung thye hign eda ham native Khang duce dimh nghia trong Java ma dinh nghia é abiteg ngon ngit Wap trinh khée nhy C/C-, Nhgng him native chi cfin khai bio prototype nhu 1a eac thank phén cba Wp. GNI (ava Native Interface) la mit loai APY (Abstract Programming Interface) cho phép céc ham cits Java goi ti ham ngoal disse eai dat trong C Vidu 4.12. Minh hoa hoat dng cia rie ham native clase Nativel 7 Khe static nay dim béo thu vien ede him native dupe nap xuSing tude Khi ching dias g0i ay) static { system. loadbibrary (*NativeMethodIlb*} ;// Nap thirvign } native void nativemethed |); {/ Ham prototype native Maw ) class Khach{ ‘Chucng IV. Lép ve eéc thénh phéin cla ibs eée aéttveng st public static void main(String[] args) { Native aNative = new Mative(); aNative -nativeMethod() ; (aii) Cae bin thank phin transient Cac A6i tuong 06 thé Inu trit tudn ty va viée fim kiém ching sé tr ndn don gidin vi, nbanh khi cée trang théi cla ching la nhat quan, ef dinh, Co nbiing trudng hop, gi tri tham chiéu oda d6i tugng trong 1p 1a khong nbelt quan thay thay d6i) khi d@i twang ditge Imu tra. Nhimg bién cia céc déi tudng nhu thé c6 thé khai bao véi thude tink transient dé chi ra ring gid tri ctia nd sé khong duge hiu ‘tri hi d6i tuong cia lép dé duge tao ra tuéin ty trong b§ ne. ‘Trong vi dy sau, bin mhietDo cia lip ThiNghiem dude khai bio trensient & (1) bai vi né la yéa 06 thay déi nhiéu nhat khi lam thé aghiém d hing ngay tiép theo. Bién, hoiluong khai bao a (2) lai binh thuéng, (t thay ai. Khi t6 chite tu tri of Kt qua ThiNghiem mt cach tuan ty trong b9 nhd thi gid tri nhietDo s@ khong duge ghi lai ima chi ghi lai cde gid tri Roi Luong. class Thinghien implements serializable( TD wwe transient int nhietoo; /Gid ti hay thay déi double khoitwong; 1 Gilt} 8 di } Litu J: Thuge tinh transient khong thé sit dung cing véi bign static (xiii) Cac thank phn volatile Trong qua trinh thufe hign, m@t 86 luéng ¢6 thé thye hign che giau nhuing gié tri cha cae bién thanh phan vi nhiéu ly do khac nhau. Bai vi mOt a6 ludng c6 thé cing chia sé mot bign va khi dé cae thao tac doc, ghi dit ligu cho cae bién chung dé c6 thé din tdi két qua khing nhdt. quan. Gis trj eiia nhitng bigs nbxt thé c6 thé thay Aoi m3 khong hing true duge. Java sti dung bé ngit volatile 8 Khai bao cho nhing bign v6 thé thay déi bat thug v& théng bio cho chudng trinh dich kh6ng nén thyc hign ti uu doi vei ning bién nhu thé, Vi du trong lop DiewKhien dudi aay, volatile vi gid tri cin n6 co thé thay dé bidn docGio chia déng hé co thé Khai bio trong qué trinh diéu khién eta mot luéag 92 LQp tinh huéng d6i tugng vel Java dang thuc thi céng viée ma cic luéng khite khng bigt duye va dam biv ludn dye duse gia ori hign thdi ctia déng hd. class Dicukhien{ “ut volatile long decGio; 1/2 Lan doe lién tid s& cho ket quit Khe nha: } Tém lai, ede tix Khoa mo ta ege dae tinh cac thanh phn duce phép sit dung cho lép, ham thanb phan, bién thank phan va bién cue bé dé xéc dink pham vi nhin thay chung trong hé thong. Ching ta tong két lai trong bang sau. Tirkhos Lép__Himthanh phn Bin thank phén idm cue bé abstract - - : - static . a : public . . 2 : protected . . . : private , . - final . ¥ - . evnchronized . - - native 2 . « : transient ’ 4 volatile : . : ‘Trong d6 dau ‘¥? nghia 1a duge phép sit dyng con dau“ la khong duge phép sit dung 4.4. CAC B61 S6 CUA CHUONG TRINH Gidng nhu chuong trink cia C/C++, chang ta cd thé truyén cde tham sé cho chudng: ‘trinh trén déng Jénh, vi du: java Colors red green blue Chuong trinh java théng dich lap Colors dé xac dinh s6 cae chit cai trong cae dét af red, green, blue Chudng trinh Colors c6 thé viét nhur sau’ Vi dy 4.13. Truyén tham sO cho chudng trinh 4 Color wa Chyeng IV Lép va ec thanh phén cue lép ee di tugng 93 class Colozs( Public static void main(String args {1)( for (int i= 0; i < args.length; i++) Syoten.out printlnDoisé: + (ist) + *(" + args (il) + "es" + arasTi} lengtn() + Ket); + } Khi thyc hién chuung trink cho két qua: Déi sti 1 (red) 06 3 kg tu Doi sO: 2 (green) 6 5 ky ty Doi sii 9 (blue) c6 4 ky te 4.5. TOAN TU TAO LAP 861 TUGNG Muc dich chink eta toan ti tao lap (constructor) 1A dit ede gid tri Khdi tgo cho cae Gi tugng kbi mt d6i Luong duge tao ra bang toan vi new, ‘Todin Uk tao Lap c6 dang khai bio nbu sau: f] () { J Noi dung cd tgo lap 4 "Yosn ti tao ip ging nhwt eée ham than phan va chi khae J phan dau eta dinb nghia, Phin [ gdm nhting thong tin sau: ¥ chi e6 thé sit dung: publie, protected, private hoc mie dinh nh di trinh bay d phan trén ¥ luon trang vdi ton eile Iép chita toan tit do. Mot 26 latu ¥ dé vd ede toc tid tao lip: Y Khong sir dung cdc bd ngit Khe vot ton tt tao top, Y Toso tir tq0 Hip 18 loai him dic bigr khong of Kigu tri lai, ngay ci kia void efing khong due sir dung. ¥- Toan tit tg0 lap chi six dung duge véi toa ti neve 4.8.1. TOAN TU TAO LAP MAC BINH. ‘Toan tit tao lap mae dinh (default) 18 ton tit tao lap khéng ¢6 tham bién, 0 7. VE 94 Lap trinh hudng d6i tugng voi Jove Khi mgt lip khéng dink ngbia mét toan ti tga l4p nao of thi he théng s@ ty dong cang esp to’ 2 tgo lap mae dinh khdng tuting minh, ‘Loan vt tao tap mge dinh ikhdng tuling mink txiong ditsng vei dang: Q (Khong lam ai ca Vidy dudi day trong lap RongDen khong dink ngbia co’n el tgo Ip va khi tac lap i tuong ths sit dung tod cit tao kjp khong toting minh. class 3onazen{ J Bin thi chin a int soNatts: boolean batTat; string vitri; J/ Khong dinh ngbia tosn two Ip } clase Nhaxho{ public static void mainistring args (){ BongDen deni - new Ronghen (| ;// Goi tofin tt tge Map mae dink a 3 } ‘Foam tit tg0 fap mac dinh Khéng tudng minh duge cung effp BongDend J Nhu dinh nghia d trén, no chéing lam 1 ed. Tuy ahién, khi sit dung véi todn til new dé 290 ra d6i Lung thi ede bign kidu nguyen thy nhot soWasts, batTat, viTri se duge khdi tao ede gid bri mge dink tudng ume 1a 0, false, null Chung ta cting o6 thé dinh nghia todn tii tao Wap mie dink téng minh, Vi da class Bongben{ Bie tanh phn a int sowatts; boolean bat Tat; String vitri; 1 Bich nghiatosn tt tao Yap mac dah Pongden() { Chusng IW Lop vé céc thanh phéin cile lép cée dét tang, soWatre = 40; batTat = true; vitri = new String ("xx"); ) Me class whaxho( public stacic void main(String args ll!{ BongNen dent= new RongDendsH/ Gol tein ti tao Lip mie dinh ting minh “# 3 } Luu: Khi trong mOt lép da dinh nghia mot hay nhigu toin ti tao lap thi he thong 56 khong cung cép toin vit tao lap mee cinh khng tung minh. Do dé Khi mudn sit dung todn tit tao lap mac dink thi phai dink nghia twang minh toan ti do. Vi du: class Boncten{ 1 Bign think phon ay int sowatts; boolean batTat; string virri; J) Bioh oghia tos tt tao lap khoog mac dinh ongpen(int w, boolean s, String vi{ soWatts = w; batt: Witri = new String(vl; } u } class Shaghof{ public static void main(string args tI) { Bonghen iemew Ronghen() ; {Sei vitain tirtyo tip mde Bongber d2 = new Bongben(100, true, “Nha bep”); // Ox H t } Lap tiinn huéng di hieng vei Java 4.5.2. NAP CHONG TOAN TU TAO LAP Gighg nhut cac ham thanb phan, cdc todn tit tge lap od thé nop chéng (tai bai overloaded) vdi nbiéu noi dung thuc bign khée nhau, Vi dy, trong lap BongDen thi toan ti tgo lap BongDen0 co dinh ngbta mae dinh tuting minh (1), vA nap chong. dé hai tgo d6i tuang voi ede gia tri xe dinh khée, Vi du, class Bongpen{ Big thanh phn a int soWatts; boolean batTat; string vitri; 1 Binh nghia toi go Lip mae dink Bongden i) { soWatte = 40; batTat = true; vitri = new string (*Xx"1; } {/Binh nghia tod tr tao lap khong mae dish Bongnen{int w, boolean s, String vi { soWatts = wi battat = 5; viTri = new stringiv! ; clase Nhakho{ public static void main(string args{}){ Bongben di=new BongDen() ; OK BongDen d2 = new Bongben(100, true, “Nha bep"); — OK Wow , Chuong IV. Lop vai oe thanh phén cia I6p ¢é¢ didi tveng 7 4.5.3. SU HOAN THANH CUA BOI TUGNG. Mt 86 di tucng e6 thé qin voi mhung ¢8i nguyen (nhu top, kdt noi mang) va ebxing dbi hai phai eidi phéng tuing minh. Co ché ho&a thinh eda déi tuong cung cap mot ké sach dé mot doi tuong 05 thé thuc hign mét hanh dong bat ky trude khi bo nhd bi gidi phong. Bp dgn rac ty dong (Automatic Garbage Collector) goi ham finalizet) da duge xay dung trong lop Object c6 dang: protected void finalize throws Throwable a€ tap hop rac Jai (6d vao thang rite] truée khi tiéu huy chang, Ham nay e6 thé duge viét da 8 Ip con dé thye hign nhitng edng vide thich hgp trude Khi hy b6 déi tugng, i dy 4.14, Sit dung b9 finalizer U1 Tep: Finalizer:iava class Dien{ Hay static int dem; static int congchung, protected int lan; public pien(){ lan = dens+; +4congehung; } protected void finalize!) throws Throwable ( (2) super. finalize (}; ~-congchung; } class TrinhDien extends Dien { #@) int (] fat; public TrinhDien(int n) fat = new int (nl; Syetem.out.printin(ian + *: Hello"); ad) protected void finalize() throws Throwable { /(6) system, out.printin{lan + *: Bye"); super Finalize); _ Lap trinh huang 461 tugng voi Java public class Finalizer { public static void main(String azss){ G6) int soLan, thoiGian; try { sotan = Integer. parseint (args [ob Bei dai so | thinh int thoiGian = Integer.parsernt (arge [1]; leatch (IndexoutofsoundsException e] ( system.err.printin(‘Usage: Finalizer extends «én hop cha> | 11 Cac thruge tinh da ligt bs sung 1/ C&e ham thank phan bé sung hay vig dé \ Latu y: / Moi a6i tugng cia lap con cling sé Ta Aéi tugng thuge Iép eba. Do vay vite gin mot 46; tatgng cia lp con sang cho bién tham chiu déi tteng ea 1ép cha 1A sx me rng kidu va do d6 khong cin ép kigu, ¥- Nguae lai gan mot ddi cugng eda Wop cha cho bign tham chiéu #i wtgne thuge lop con sé phi thye hign ép kigu. Lamu § khi &6 sé 06 thé bi ton that thong tin. Vidy, class SuperClass (/7 ... 47) class SubClace extends SuperClass {/* class Userclass ( - ot publish statie void main (string args (1) ( SuperClass super] = new SuperClass (}; 4i Tao ra 361 tong lap cha superClass super2 = (SubClass) subl; //'Thy hep kiéu nen phil ép kidu SubClass subl = superl; — //Mézingkigu y 4.6.1. TOAN TU! MOG XICH GIUA CAC LGP KE THUA THIS() VA SUPER() Céie todin tit tao Lap khong thé viét dé ¢ ede lp dan xudit (Ldp con). Ching 6 thé duage nap chong nhung phdi trong cing lp. ‘rong Java c6 2 tofin «ih tgo lip Age bigt cb ton la this() va super() duge sit dung d3 mée xich gitta cde 16p c6 quan hé ‘ké thia ydi nbou. Toan tit tao lap this() ‘Todn ti tgo lap nay duge sit dung dé tan ra déi tugng cia Iép hién thoi, Vi du 4.15. Nap chdng toin tit tg0 lap 1 Tep: NhaKiho java class gongven{ 11 Bign than phan wo private int sowatts; Chuong IV. Lop vé ee thanh pnén clia lop céc déi tueng 101 private boolean batTat; private string viTri; 1) Binh nghia won we tg0 Lap. mie diah, <6 + @ Bongbeat! { scwates = 40; be: vitri = new String("Xx"); pat = true; system.out .printIn(™ t 1 Binh nabifa ton tie ta Tap khong mae dinh, 62) foan tits 1"): Bonggen(int w, booean s){ soWatts = Wr batTat = 8; vir: system.out print 1n( “Tain ti sé 2°% } 1 Binh nghia tosn tietao lap Khong ovée dinh, $6 3 nap chdng “ gongden (int soWatts, boolean batTat, String vitril{ new String (XK"); chis.soWatts = sovatt this batTat = pattat; chis.vitri = new String(vitril; System. out .print iat Ton ti 96 3"% ] How ] public class wheKho{ public static void mainistring args {1}{ Bongden dienew Bonghen(); WOK nongpen 62 = new Bongven(2p0, true, "Nha bep*]; OK ongDen 42 = new BongDen(100, true); WOK u } ‘Trong lop BongDen cé 3 toat ti teo lp duce nap chéng 6 (1), @ va @). Tham chigu this eung duce sit dung trong ham main() d (4) dé xae dink cc 46i si tuong ting doi cita toan ti tg0 lap. 12, Lop trinh hung déi twang voi Java ‘Vi du 4.16. Sit dung toan tit this!) Ue Tap: Whakho java clase Bongben{ 1 Bien than phn a private int soWatts; private boolean battat; private String vitri; {1 Dinh nghia tosin tit tao Lap mae din, $6 1 2 Bongben() { thie(40, true); system. out print n¢’Toin tt s6 1"), 4 17 Dinh nghia tosin Wetqo 1p khfng mte Anh, 962 ® Bongden(int w, boctean s) { this(w, s, "XX" Syeten.oue print int Tein tirsd ) 1/ Dinh nghia toan tirta0 lap khong mac dinh, sé 3 nap ches BongDen(int soWatts, boolean batTat, string vitril ( thig.soWatts = sowatts; this batvat = batTat; @ this.viTrl = new string(vitri!; system. out .printLn(Todn tits 3" b ) public class NnaKho{ public static void mainistring arge (1) ( Bongben di - new BongDen|) ; 0K BongDen d2 = new Hongben(10c, true, "Nha hep"); //OK Bongpen d3 = new Bongben(100, true); OK de } Chuong trinh nay hoat dong giéng nhu ehvong trink @ vi dy 4.15, nhung khée li trong dinh nghia 2 toan ti tao lap 8 (1) va (2) 66 sik dung cfu ti this) a2 gan ede d6t 6 tuang ting cho cée déi tuting méi khi t9o lap ra chting. Chuang 1V. Lép va ede thanh phéin ella I6p e&¢ dai tuong Toan tis tao lap super() Toan tk supert) dude si dung trong cde ton ti tao lap eda lép con (subclass) 4€ goi téi cf toén tit tao Ip cba I6p cha (superetass) true tidp Vi dy 4.17, Sit dung toan tt sunerQ 1128p: Nkakho java class Borgben{ 1 Tién thioh phn private int so#atts; private boolean battat; private string vitri; (Dink nghia todn tittac lap_mac dink, so | Bongben (} { this(4o, true); System. out print In Tosi was I"; } 11 Dink nga win tego Mp thing me dink, $6 2 Bongben {int w, boolean 6) { chis(w, 8, 72x}; System. out .printIn(*Tofn tirs6 2°); } | Binh nghia todn vit tao itp khong me dink, 363 nap ching BongDen{int sotatts, boolean batTat, String this.cowatts = sowatte; this-batvat = batTat; this.vifri = new String{vitri); system.out .printla(Todn tirsd 3); } : } class DenTuyp extends sengzen { private int doDai; private int mau; Dentuyp(int leng, int cole) { wo @ @) “& vitrid { 4G) this(leng, colo, 100, true, “Chua biet"|; 104 Lap trinh huéng 661 tueng voi Java Dentuyp(int leng, int cole, int sowatt. boolean bt, String not){ — // (6) supex(soWatt, bt, nol: taie.dobai = leng; this.meu = colo; 3 public class Nbaiho{ public static void wain (string args{l]{ System cut .print In("Too ra bong den typ") DenTuyp d = new DenTuyp(20, 51; } 1 BongDen la Yép cha (true tidp) cita lép Den-Tuyp. Todin tit suport) & (6) Ii dai dig cho toan til tao Lap efia ldp cha BoagDen M6t 06 lew ¥ khi si dung super) va this(): ¥ Ching chi ait dung dé xéy dung cite toin tit tgo lap cite e@e lop va kbi sit dung thi ching luén phai la Iénh dau tide trong dink ngbia ea tofn ti tao Tap. ¥ thio() duce sit dung dé méc xich véi cing Idp ehita n6 cdn super? Iai duge sé dung 8 mée xfch véi lép cha gia lop do, 4.6.2. QUAN HE KE THUA VA QUAN HE KET TAP Van dé rit quan trong trong phét trién phdn mém hung déi tgng 1a xay dung duce frida dé lop mé t8 day di moi quan bé gitta e4e lap cia hé thong ting dung 12]. Hat 16p c6 thé c6 ce quan hé sau: Y Quan he hién kéi (Association), ¥ Quan hé két tap (Aggregation), ¥ Quan hé ké thita Inheritance), Y Quan bé phy thuge (Dependency). Hai quan bé ké thita va két tap Adu e6 dae diém chung 18 loat quan hg gida “mot 8 phan” va phia “téng thé”. Quan hé ké tifa 1a dang “is a” (a mgt thanh vign) edn quan hé két tap 06 dang “has a’ (¢6 mét thanh vien), Nhung ebting cing e6 nhiéu dae trung khée nhau. Vain dé dgt ra cho ngudi Igp trinh 1a chon quan h8 nto thich hap cho bai toan edn gidi quyét. Ching ta hay xét bidu d6 lip cha UMIL duce cho nhu trong inh 4.7 Chuong IV. Lép vé cae thanh phén cite lap ede di tusng. Vi du 4.18, Ching ta xét he chong wim cae lop nue sau: ee List) [Pas] Node Queue uot dubiew Stack Object Hin 47 é tia vd hel tap. Trong dé] A B | ky Rieu cho quan hé két tap: Lép A che cae phan ti thuge 1ép B thé hign moi quan hé gitia tng thé (bén chia hinh qua tram) va bén bd phan. Lop Queue 1a mot két tap cia List, List 1a lép co sd dé Siack ké thun va List Sai Ta ket tap ca hai Node (dau, duoi), Tigp thes Node lai 12 két tap cha Odyjeet (lubiew), Chuyén d6i bidu dé Wp trén sang Java ching ta nh§n duge chudng trinh: class Node { we private Object dubieu; Healion private Node next; UW nexcnode public Node(Object obj, Node link) { Jf Constructor dubieu = obj; next = } If Accessor public veld setDI (Object obj} (dubieu = obj;} public Object getDL{){ return duLieu;} public void setNext [Node node} (next = node; } public Node gettext {) { roturn next; ) i class List{ HQ) protected Node dau = null; protected Node duoi = null; public void insertIaFront (Object obj) { if {isEmpty(}) dau = duoi = new Node(obj,nulll; else dau = new Node(obj, dau) ; } public vot ingertatBack (Object obj) { 108 Lp Irinh huéng d6i tugng vai Jove if (isEmpty i)} dau = duod = new Node {obj,nall); else { duol.cettext (new Nede{obj,cau)) ; duoi = duod gettext (1; } PUBLic Object deleteFront {) { if(ieempty(}} return null; ode removes = dau; it(dau == duci) dau = duof = null; else dau = dau. getNext |); return removed .getph (}; } public boolean iszmpry(){ return dau } class Queue{ private List glist, ue public Queue(){ glist = new List (); } public void enqueue (Object item) { qlist insertatwack |{tem) ; } public Object dequeue () { Lf (empty) return null; entd;} else return qlist.deleteFront () ; } public object peek(t{ object. obj = dequeue!) ; if (obj 1s null) glist .insertInFront (obj) ; return obj; } public boolean empty(){ return qlist.isgmpty();} } class Stack extends List{ ey public void push (object obj} {insert tnvront (obj); } public Object pop{){ if fempty()) return nu: Chuang 1V. Lap vé ec thénh phén cla lap cde él tweng 107 else return deleteFront (5 } public Object peek(}{ return (isEmpty() ? null ; dau.getDL()); tf public boolean empty{) {return issmpty(};} } public class Khac! na public static void main(String argsl]) { String xau: = "Ching ta dang xep tang! int leng = xaul.length(); queue ¢ = new Quexe i); for(int i = 0; 4 « Jeng; dee) qvenqueue (new Character (xaulcharAt (i) 1; while (1q-empty (1) system. out print ( (Character) q.dequeue (1); system.out.printin() string xau2 = “pex nagn o gnad at gnunc’; int leng2 = xau2.lenath(]; Stack s = new Stack(); for(int 0; i ¢ lenga; i++) s.push (new Character (xau2.cbarAt (1))) 7 while (!s.empty()) system. out print ( (Character! s.pop()) ; system. out .printin(); } } Két qua chung trink in ra: Chung ta dang xep han Chung ta dang o naan xep 4.7. GIAO DIEN VA SY MO RONG QUAN HE KE THUA TRONG JAVA Nhu tyén ching ta da thay Java hé trg ké thita tuydn tinh dé tao ra nhiéu kidu du Uigu mnéi, Trong phuong phap hudng doi tugng quan hé ké thita con rong hon, Ngo KE Uhita tuyn tinh, cén c4 quan bé ké thita b9i (multiple), nghia 18 mot lop 06 thé ké thita tz nhiéu hon mét lp cha. V6i quan hé ké thia Déi thi biéu dé I6p voi quan he 108 Lap tinh huéng A461 tugng vai Java Ke chia khong cn 1A céfu trae phan cap nhur da néu @ brén. mA sé La d6 thi, Nbiéu vain 8 sé nay sink nhu vain dé yung dot kidu, van dé nhap nbling du Tie, v.v., sé gay ra rat mbigu tx ngai cho ngwdi thiét ké hé thing, Jaya khong h} wg crue siép loz ke thia nay, song dé trénh nhiing trd nga: tren Java cung cp khai nigm interfoce va cho phép ké thita bi di voi eae interface Dinh nghia interface interface doh nghia mau hop déng thong qua vige phée thio cic ham miu (prototype) va khong chi dat noi dung thu hién interface y NOI dung cis interface thuting chia dank séch ede ham wnhu va ede hang, Giao dign interface VB logi kidu lap die bist, trong 46 tat ca cae hAm thAnh phin déu 1A triru tugng, do vay khing thé khéi teo duce gid tri, nghta 1k khong thé tzo ra doi tuong cfs interface. Nhiing ham trong interface s@ duce chi gtd nbiing lop xay duce méi theo dang: class implements { 1716 sung cc thinh phn: 11 Ci dt edie him mau A8 cho trong ) © (a) © 4.5. Cho biét ket qué thuc hign ofa chuong trinh sau. Public claes 05{ int 2, b; public void £(){ a=d=0; Ant () ¢ = {a}; ab, che 14 Gp inh huding di tugng véi Java System.out.printinia + * * + bs * 4 efol); + public void g{int b, int[] ¢){ asb=1; elo) = 2; } public static void main(string arget1) ( 05 e = new O51); e£0; } 4.6. Chung trich sau dich va chay cho nbing két qué Ia ei? public class Q6{ public static void main(string args(}){ int 4 = 4; Float £ = 4.38; double 4 = 1.3; int c= 0; Af == £) eve; Af(( (int) (f+d)) a= ((ine| £ # (int) a}) c 4s 2s ‘Systen.out .printin(c} } 4.7. Chuang trinh sau ¢6 mot s6 16i, hay stta eae I6i det import java-util.+; package com.acme’ public class Bxerci { int counter; void main(String args) { Exerc ins = new Exercl(); ing .go(; public void goi){ dnt sum, 4 = 9; aunia Chuong IV. Lap va eae thénh phén ca lop céc Ai tang 5 while {1 < 200) Af (1 == 0) sum = 200; 4.8, Vidt chuong trinh nhap vao a8 nguyen vA cho kéi qua 1a day cae chit sé 0, 1 bidu didn hj p in etia 88 dd, 4.9. Hay xay dung lap Sink Vien 6 cée thude tinh riéng (private): + 86 bao danh, ~ Ho va tén sinb vién, ~ Mn hoe, - Dim thi hoe ki I, IL. a) Vidl cic him truy nbap tdi eée thank phan dif ligu va ede tofin ti tao lap cho lép SinhVien bi Vidi chucng trinh chinh dé tao ra danh sich SinkVien va hién thi thie don: 1. Nhap vio thong tin vé sinh v 2 Nem théng tin vé sinh vien, 3, ‘Tim sinh vién theo diém, 4, Két thie chuong trinh, c/ Vigt ede him thanh phan cia 1 lp dé thye hign cée nhiém vu trén 4.10. MOt eng ty duge giao nhigm vy quin If ede phuung tign giao théng gém eée logi 6t6, xe may, xe tai. + Mii phuong tign giao thong cdn quin If: mé hink, nam sin xust, gid ban va mau + Cae 6t6 edn quan Ij: sé chd ngdi, kiéu déng co + Xe may: cng suat, + Xo Uli: Trong thi af Hay xay dung e&c lép XeTai, XeMay vi OTo ké thita tit lop PhuongTienCT bf Xay dung cic ham dé truy nhép, hién thi va kiém tra ede thude tinh cilia cde Jép, ce! Phat trién lip KiemKe dé quan ly tat ca cdc phuong tién (xe may, dtd, xe Li), trong dé ¢6 ham chink thue bién theo thc don: 16 Lap trinn huéng 61 tugng véi Jove 1, Nap dang ky phuvng tién, 2, Tim phudng tign theo mé kinh, 9. ‘Tim phuong tign theo mau, 4, Ket thie di Vigt cde ham dé thye (on mhiém vy teen CHUONG V CAC LENH DIEU KHIEN DONG THUC HIEN VA XULY NGOAILE a 5.1, CAC CAU LENH BIEU KHIEN RE NHANH CHUONG TRINH Java cung cp cée enh ré nhdnh (tuyén chon) 4é o6 thé chon cée phiteng an khac nhau trong qua trinh thye hién cia chuong trink. Co ba Joai lénh re nhanh dé thuc ign: enh if don gidn, if-else va switch. Cau lénh if don gian Cau inh i7don gidn (len if) c6 dang ct phép qui dinb: if eBidu tie didu kien ww Ngit nghia thue hign rat don gidn: Trude tién tinh gid tri cha , ndu né c6 gid tri true (ding) thi thue bién , sau dé tiép tue thye hign cae Jonh con Iai cha chuong trinh, Trugng hgp nbn gid tri false (sai) thi bj bd qua va tigp tue thue hign cdc lénh cén lai eda chuong trinh. Lutu 3: Cau lenb> 4 (1) e6 thé 1A cA leh phite (khéi chudng trinh) bao gém mot day cae lémh chia trong cdp ‘f va Cau lénh if-else Ci phap cia lénh if-else e6 dang: if HQ else 4@

You might also like