Tài liệu gồm 6 chương : Chương 1: Tổng quan về tiếp cận hướng đối tượng Chương 2: Khái niệm cơ bản của lập trình hướng đối tượng Chương 3: Ngôn ngữ Java Chương 4: Kế thừa và đa hình trên Java Chương 5: Cài đặt cấu trúc dữ liệu lên Java Chương 6: Lập trình giao diện trên Java
1 P TRÌNH HNG I TNG PGS.TS. Trn ình Qu KS. Nguyn Mnh Hùng Các khái nim c bn ca Lp trình hng đi tng Lp trình hng đi tng vi Java 2 GII THIU Trong nhng nm gn đây, lp trình hng đi tng đã tr nên gn gi nh s ra đi liên tip ca các ngôn ng lp trình hng đi tng. Sc mnh ca phng pháp lp trình hng đi tng th hin ch kh nng mô hình hoá h thng da trên các đi tng thc t, kh nng đóng gói và bo v an toàn d liu, kh nng s dng li mã ngun đ tit kim chi phí và tài nguyên; đc bit là kh nng chia s mã ngun trong cng đng lp trình viên chuyên nghip. Nhng đim mnh này ha hn s thúc đy phát trin mt môi trng lp trình tiên tin cùng vi nn công nghip lp ráp phn mm vi các th vin thành phn có sn. Tài liu này nhm gii thiu cho các sinh viên m t cái nhìn tng quan v phng pháp lp trình hng đi tng cùng cung cp nhng kin thc, các k thut c bn cho phát trin các ng dng ca mình da trên ngôn ng lp trình Java - mt trong nhng ngôn ng lp trình hng đi tng thông dng nht hin nay. Ni dung ca tài liu này bao gm hai phn chính: • Phn th nht trình bày nhng khái nim và các vn đ c bn c a lp trình hng đi tng bao gm tng quan v cách tip cn hng đi tng và các khái nim đi tng, lp, k tha, đóng gói, đa hình… • Phn th hai trình bày chi tit phng pháp lp trình hng đi tng vi ngôn ng lp trình Java. Ni dung ca tài liu bao gm 6 chng: Chng 1: Tng quan v cách tip cn hng đi tng. Trình bày s ti n hoá ca cách tip cn t lp trình truyn thng đn cách tip cn ca lp trình hng đi tng và xu hng phát trin ca lp trình hng đi tng hin nay. Chng 2: Nhng khái nim c bn ca lp trình hng đi tng. Trình bày các khái nim c bn nh: đi tng, lp đi tng vi các thuc tính và phng thc, tính k th a và đa hình, tính đóng gói ca lp trình hng đi tng. Chng này cng gii thiu tng quan mt s ngôn ng lp trình hng đi tng thông dng hin nay. Chng 3: Ngôn ng Java. Gii thiu nhng khái nim và nhng quy c ban đu ca ngôn ng lp trình Java: Cu trúc chng trình, cách biên dch, cách đt tên bin, kiu d liu, các toán t và cu trúc lnh ca ngôn ng Java. Ch ng 4: K tha và đa hình trên Java. Trình bày các k thut lp trình hng đi tng da trên ngôn ng Java: Khai báo lp, các thuc tính và phng thc ca lp; k thut tha k, các lp tru tng, cài đt np chng và đa hình trên Java. Chng 5: Biu din và cài đt các cu trúc d liu tru tng trên Java. Trình bày k thut cài đt và s dng mt s cu trúc d li u quen thuc trong Java: ngn xp, hàng đi, danh sách liên kt, cây nh phân và đ th. Chng 6: Lp trình giao din trên Java. Trình bày các k thut lp trình giao din trên Java: Lp trình vi các giao din c bn trong th vin AWT, lp trình giao din vi Applet và HTML, lp trình giao din nâng cao vi th vin SWING. Tài liu này đc vit nhm phc v môn hc “Lp trình hng đi tng” ging dy tip theo sau môn hc Ngôn ng lp trình C++ và nh vy khi hc môn hc này sinh viên s d nm bt đc nhng đc trng khác bit ca ngôn ng Java so vi C++. 3 Cun sách này còn có kèm theo mt đa CD cha toàn b mã các chng trình cài đt làm ví d và bài tp trong cun sách. Mc dù các tác gi đã có nhiu c gng trong quá trình biên son tài liu này, song không th tránh khi nhng thiu sót. Rt mong nhn đc s đóng góp ý kin ca sinh viên và các bn đng nghip. 4 PHN 1 NHNG KHÁI NIM C BN CA LP TRÌNH HNG I TNG 5 CHNG 1 TNG QUAN V CÁCH TIP CN HNG I TNG Ni dung chng này nhm gii thiu mt cách tng quan v cách tip cn hng đi tng. Ni dung trình bày bao gm: • Gii thiu v cách tip cn ca lp trình truyn thng. • Gii thiu cách tip cn ca lp trình hng đi tng. • So sánh s khác bit gia hai cách tip cn này. • Xu hng hin nay ca lp trình hng đi tng 1.1 PHNG PHÁP TIP CN CA LP TRÌNH TRUYN THNG Lp trình truyn thng đã tri qua hai giai đon: • Giai đon s khai, khi khái nim lp trình mi ra đi, là lp trình tuyn tính. • Giai đon tip theo, là lp trình hng cu trúc. 1.1.1 Lp trình tuyn tính c trng c bn ca lp trình tuyn tính là t duy theo li tun t. Chng trình s đc thc hin tun t t đu đn cui, lnh này k tip lnh kia cho đn khi kt thúc chng trình. c trng Lp trình tuyn tính có hai đc trng: • n gin: chng trình đc tin hành đn gin theo li tun t, không phc tp. • n lung: ch có mt lung công vic duy nht, và các công vic đc thc hin tun t trong lung đó. Tính cht • u đim: Do tính đn gin, lp trình tuyn tính có u đim là chng trình đn gin, d hiu. Lp trình tuyn tính đc ng dng cho các chng trình đn gin. • Nhc đim: Vi các ng dng phc tp, ngi ta không th dùng lp trình tuyn tính đ gii quyt. Ngày nay, lp trình tuyn tính ch tn ti trong phm vi các modul nh nh t ca các phng pháp lp trình khác. Ví d trong mt chng trình con ca lp trình cu trúc, các lnh cng đc thc hin theo tun t t đu đn cui chng trình con. 1.1.2 Lp trình cu trúc Trong lp trình hng cu trúc, chng trình chính đc chia nh thành các chng trình con và mi chng trình con thc hin mt công vic xác đnh. Chng trình chính s gi đn chng trình con theo mt gii thut, hoc mt cu trúc đc xác đnh trong chng trình chính. 6 Các ngôn ng lp trình cu trúc ph bin là Pascal, C và C++. Riêng C++ ngoài vic có đc trng ca lp trình cu trúc do k tha t C, còn có đc trng ca lp trình hng đi tng. Cho nên C++ còn đc gi là ngôn ng lp trình na cu trúc, na hng đi tng. c trng c trng c bn nht ca lp trình cu trúc th hin mi quan h: Chng trình = Cu trúc d liu + Gii thut Trong đó: • Cu trúc d liu là cách t chc d liu, cách mô t bài toán di dng ngôn ng lp trình • Gii thut là mt quy trình đ thc hin mt công vic xác đnh Trong chng trình, gii thut có quan h ph thuc vào cu trúc d liu: • Mt cu trúc d liu ch phù hp vi mt s hn ch các gii thut. • Nu thay đi cu trúc d liu thì phi thay đi gii thut cho phù hp. • Mt gii thut thng phi đi kèm vi mt cu trúc d liu nht đnh. Tính cht • Mi chng trình con có th đc gi thc hin nhiu ln trong mt chng trình chính. • Các chng trình con có th đc gi đn đ thc hin theo mt th t bt kì, tu thuc vào gii thut trong chng trình chính mà không ph thuc vào th t khai báo ca các chng trình con. • Các ngôn ng lp trình cu trúc cung cp mt s cu trúc lnh điu khin ch ng trình. u đim • Chng trình sáng sa, d hiu, d theo dõi. • T duy gii thut rõ ràng. Nhc đim • Lp trình cu trúc không h tr vic s dng li mã ngun: Gii thut luôn ph thuc cht ch vào cu trúc d liu, do đó, khi thay đi cu trúc d liu, phi thay đi gii thut, ngha là phi vit li chng trình. • Không phù hp vi các phn mm ln: t duy cu trúc vi các gii thut ch phù hp vi các bài toán nh, n m trong phm vi mt modul ca chng trình. Vi d án phn mm ln, lp trình cu trúc t ra không hiu qu trong vic gii quyt mi quan h v mô gia các modul ca phn mm. Vn đ Vn đ c bn ca lp trình cu trúc là bng cách nào đ phân chia chng trình chính thành các chng trình con cho phù hp vi yêu cu, chc nng và mc đích ca mi bài toán. Thông thng, đ phân rã bài toán trong lp trình cu trúc, ngi ta s dng phng pháp thit k trên xung (top-down). 7 Phng pháp thit k trên xung (top-down) Phng pháp thit k top-down tip cn bài toán theo hng t trên xung di, t tng quan đn chi tit. Theo đó, mt bài toán đc chia thành các bài toán con nh hn. Mi bài toán con li đc chia nh tip, nu có th, thành các bài toán con nh hn na. Quá trình này còn đc gi là quá trình làm mn dn. Quá trình làm mn dn s dng li khi các bài toán con không cn chia nh thêm na. Ngha là khi mi bài toán con đu có th gii quyt bng mt ch ng trình con vi mt gii thut đn gin. Ví d, s dng phng pháp top-down đ gii quyt bài toán là xây mt cn nhà mi. Khi đó, ta có th phân rã bài toán theo các bc nh sau: • mc th nht, chia bài toán xây nhà thành các bài toán nh hn nh: làm móng, đ ct, đ trn, xây tng, lp mái. • mc th hai, phân rã các công vic mc th nht: vic làm móng nhà có th phân rã tip thành các công vic: đào móng, gia c nn, làm khung st, đ bê tông. Công vic đ ct đc phn rã thành … • mc th ba, phân rã các công vic ca mc th hai: vic đào móng có th phân chia tip thành các công vic: đo đc, cm mc, chng dây, đào và kim tra móng. Vic gia c nn đc phân rã thành … Quá trình phân rã có th dng mc này, bi vì các công vic con thu đc là: đo đc, cm mc, chng dây, đào… có th thc hi n đc ngay, không cn chia nh thêm na. Lu ý: • Cùng s dng phng pháp top-down vi cùng mt bài toán, nhng có th cho ra nhiu kt qu khác nhau. Nguyên nhân là do s khác nhau trong tiêu chí đ phân rã mt bài toán thành các bài toán con. Ví d, vn áp dng phng pháp top-down đ gii quyt bài toán xây nhà, nhng nu s dng mt cách khác đ phân chia bài toán, ta có th thu đc kt qu khác bit so vi phng pháp ban đu: • mc th nht, chia bài toán xây nhà thành các bài toán nh h n nh: làm phn g, làm phn st, làm phn bê tông và làm phn gch. • mc th hai, phân rã các công vic mc th nht: vic làm g có th chia thành các công vic nh: x g, gia công g, to khung, lp vào nhà. Vic làm st có th chia nh thành… Rõ ràng, vi cách làm mn th này, ta s thu đc mt kt qu khác hn vi cách thc đã thc hin phn trên. 1.2 PHNG PHÁP TIP CN HNG I TNG 1.2.1 Phng pháp lp trình hng đi tng Xut phát t hai hn ch chính ca phng pháp lp trình cu trúc: • Không qun lí đc s thay đi d liu khi có nhiu chng trình cùng thay đi mt bin chung. Vn đ này đc bit nghiêm trng khi các ng dng ngày càng ln, ngi ta không th kim soát đc s truy nhp đn các bin d liu chung. 8 • Không tit kim đc tài nguyên con ngi: Gii thut gn lin vi cu trúc d liu, nu thay đi cu trúc d liu, s phi thay đi gii thut, và do đó, phi vit li mã chng trình t đu. khc phc đc hai hn ch này khi gii quyt các bài toán ln, ngi ta xây dng mt phng pháp tip cn mi, là phng pháp lp trình h ng đi tng, vi hai mc đích chính: • óng gói d liu đ hn ch s truy nhp t do vào d liu, không qun lí đc. • Cho phép s dng li mã ngun, hn ch vic phi vit li mã t đu cho các chng trình. Vic đóng gói d liu đc thc hin theo phng pháp tru tng hoá đi tng thành lp t thp lên cao nh sau: • Thu thp các thuc tính ca mi đi tng, gn các thuc tính vào đi tng tng ng. • Nhóm các đi tng có các thuc tính tng t nhau thành nhóm, loi b bt các thuc tính cá bit, ch gi li các thuc tính chung nht. ây đc gi là quá trình tru tng hoá đi tng thành lp. • óng gói d liu ca các đi tng vào lp tng ng. Mi thu c tính ca đi tng tr thành mt thuc tính ca lp tng ng. • Vic truy nhp d liu đc thc hin thông qua các phng thc đc trang b cho lp. Không đc truy nhp t do trc tip đn d liu. • Khi có thay đi trong d liu ca đi tng, ta ch cn thay đi các phng thc truy nhp thuc tính ca lp, mà không c n phi thay đi mã ngun ca các chng trình s dng lp tng ng. Vic cho phép s dng li mã ngun đc thc hin thông qua c ch k tha trong lp trình hng đi tng. Theo đó: • Các lp có th đc k tha nhau đ tn dng các thuc tính, các phng thc ca nhau. • Trong lp dn xut (lp đc k th a) có th s dng li các phng thc ca lp c s (lp b lp khác k tha) mà không cn thit phi cài đt li mã ngun. • Ngay c khi lp dn xut đnh ngha li các phng thc cho mình, lp c s cng không b nh hng và không phi sa li bt kì mt đon mã ngun nào. Ngôn ng l p trình hng đi tng ph bin hin nay là Java và C++. Tuy nhiên, C++ mc dù cng có nhng đc trng c bn ca lp trình hng đi tng nhng vn không phi là ngôn ng lp trình thun hng đi tng. Java tht s là mt ngôn ng lp trình thun hng đi tng. c trng Lp trình hng đi tng có hai đc trng c bn: • óng gói d liu: d liu luôn đc t chc thành các thuc tính ca lp đi tng. Vic truy nhp đn d liu phi thông qua các phng thc ca đi tng lp. • S dng li mã ngun: vic s dng li mã ngun đc th hin thông qua c ch k tha. C ch này cho phép các lp đi tng có th k tha t các lp đi tng khác. Khi đó, trong các lp k tha, có th s dng các phng thc (mã ngun) ca các lp b k tha, mà không cn phi đnh ngha li. 9 u đim Lp trình hng đi tng có mt s u đim ni bt: • Không còn nguy c d liu b thay đi t do trong chng trình. Vì d liu đã đc đóng gói vào các đi tng. Nu mun truy nhp vào d liu phi thông qua các phng thc cho phép ca đi tng. • Khi thay đi cu trúc d liu ca mt đi tng, không cn thay đi các đi mã ngun ca các đi tng khác, mà ch cn thay đi mt s hàm thành phn ca đi tng b thay đi. iu này hn ch s nh hng xu ca vic thay đi d liu đn các đi tng khác trong chng trình. • Có th s dng li mã ngun, tit kim tài nguyên. Vì nguyên tc k tha cho phép các lp k tha s d ng các phng thc đc k tha t lp khác nh nhng phng thc ca chính nó, mà không cn thit phi đnh ngha li. • Phù hp vi các d án phn mm ln, phc tp. 1.2.2 Phng pháp phân tích và thit k hng đi tng Mt vn đ c bn đt ra cho phng pháp hng đi tng là t mt bài toán ban đu, làm sao đ thu đc mt tp các đi tng, vi các chc nng đc phi hp vi nhau, đáp ng đc yêu cu ca bài toán đt ra? Phng pháp phân tích thit k hng đi tng ra đi nhm tr li cho câu hi này. Mc đích là xây dng mt tp các l p đi tng tng ng vi mi bài toán, phng pháp này tin hành theo hai pha chính: Pha phân tích: Chuyn đi yêu cu bài toán t ngôn ng t nhiên sang ngôn ng mô hình. Pha thit k: Chuyn đi đc t bài toán di dng ngôn ng mô hình sang mt mô hình c th có th cài đt đc. Hai pha phân tích và thit k này bao gm nhiu bc khác nhau: • Mô t bài toán • c t yêu cu • Trích chn đi tng • Mô hình hoá lp đi tng • Thit k tng quan • Thit k chi tit. Bc 1: Mô t bài toán Bài toán ban đu đc phát biu di dng ngôn ng t nhiên, bao gm: • Mc đích, chc nng chung • Các yêu cu v thông tin d liu • Các yêu cu v chc nng thc hin 10 Bc 2: c t yêu cu Các yêu cu đc hình thc hoá lên mt mc cao hn bng cách s dng ngôn ng kiu kch bn (scenario) đ mô t. Trong mt kch bn, mi chc nng, mi hot đng đc mô t bng mt kch bn, bao gm: • Các tác nhân tham gia vào kch bn. • Vai trò ca mi tác nhân trong kch bn. • Th t các hành đng mà mi tác nhân thc hin: khi nào thc hi n, tác đng vào tác nhân nào, thông tin nào đc trao đi. Quá trình trên đc tin hành vi tt c các chc nng yêu cu ca h thng. Bc 3: Trích chn đi tng Bc này s tin hành đ xut các đi tng có th có mt trong h thng: • Da vào các kch bn đc mô t trong bc hai, chn ra các tác nhân có xut hin đ đ xut thành các đi tng. • La chn các đi tng bng cách loi b các tác nhân bên ngoài h thng, các tác nhân trùng lp. • Cui cùng, ta thu đc tp các đi tng ca h thng. Bc 4: Mô hình hoá lp đi tng Bc này tin hành tru tng hoá đi tng thành các lp: • Thu thp tt c các thuc tính ca mi đi tng va thu thp đc, da vào yêu cu v thông tin trong yêu cu h thng (t bc 1). • Thu thp các hành đng mà mi đi tng cn thc hin, da vào các kch bn mà đi tng tng ng có tham gia (trong bc 2). • Nhóm các đi tng t ng t nhau, hoc có nhiu thuc tính gn ging nhau. • Loi b mt s thuc tính cá bit, riêng t ca mt s đi tng trong nhóm. • Mô hình mi nhóm đi tng còn li thành lp: Các thuc tính chung ca các đi tng thành thuc tính ca lp, các hành đng ca các đi tng thành phng thc ca lp. Kt qu thu đc mt tp các lp đi tng ban đu ca h thng. Bc 5: Thit k tng quát Bc này s tin hành thit k v mô, ngha là thit k mi quan h gia các lp trong h thng: • Xác đnh s đ tha k, nu có, gia các lp: Nu hai lp có mt s thuc tính chung, thì tách các thuc tính chung làm thành mt lp c s, và hai lp ban đu đu dn xut t lp c s đó. Thông thng, lp các tru tng (chung nh t) s làm lp c s, lp càng c th, càng chi tit thì làm lp dn xut (lp con, cháu). • Xác đnh tng tác, nu có, gia các lp: Da vào các kch bn đc mô t trong bc 2, hai tác nhân có tng tác vi nhau thì hai lp tng ng bc này cng có tng tác vi nhau. Kt qu thu đc ca bc này là mt s đ quan h bên ngoài gia các lp trong h thng. [...]... TRÌNH H NG IT NG V I JAVA 28 CH NG 3 GI I THI U V JAVA N i dung c a ch ng này t p trung trình bày các v n L ch s ra chính v ngôn ng l p trình Java: i và phát tri n c a Java Ki n trúc t ng quát m t ch ng trình xây d ng trên Java Các toán t và các c u trúc d li u c b n trên Java Các c u trúc l nh c a Java 3.1 L CH S PHÁT TRI N C A JAVA 3.1.1 Java N m 1991, m t nhóm k s c a Sun Microsystems mu n l p trình. .. máy o Java dùng trình thông d ch Java chuy n mã bytecode thành d ng ch y c trên các n n ph n c ng t ng ng Do v y, khi thay i n n ph n c ng, không ph i biên d ch l i mã ngu n Java Hình 3.2 minh ho quá trình biên d ch và thông d ch mã ngu n Java 30 IB Trình thông d ch Java Bytecode Sparc (Java Interpreter) Trình biên d ch Macintosh cl pn n (Platform independent) Hình 3.2 D ch ch ng trình Java M nh m Java. .. s d ng trình biên d ch javac Trình biên d ch xác nh tên c a file ngu n t i dòng l nh nh mô t d i ây (gi s ang th m c ch a package vidu và bi n môi tr ng PATH ã c thi t l p úng qui cách): >javac vidu/chuong3/First .java Trình d ch javac t o ra file First.class ch a các mã “bytecodes” Nh ng mã này ch a th th c thi c ch ng trình th c thi c ta c n dùng trình thông d ch java interpreter” v i l nh java L... 2.4 M T S NGÔN NG L P TRÌNH H N i dung ph n này s trình bày m t s ngôn ng l p trình h NG ng IT it i t ng i v i môi i t ng l p NG ng thông d ng hi n nay: Ngôn ng l p trình C++ Ngôn ng l p trình ASP.NET và C#.NET 24 Ngôn ng l p trình Java 2.4.1 C++ C++, ra i vào gi a nh ng n m 1980, là m t ngôn ng l p trình h ng i t ng t ngôn ng l p trình c u trúc C Cho nên, C++ là ngôn ng l p trình n a h ng h ng c u... ng trình Java ch a r t nhi u thông tin th c thi nh m ki m soát và truy nh p i t ng lúc ch y i u này cho phép kh n ng liên k t ng mã 3.1.3 Cài t Java Quá trình cài t môi tr Copy b cài Ch y ch ng Java trên máy bao g m ba b t ng trình cài C p nh t bi n môi tr Copy b cài Có th copy t c: t ng t a CD ho c t i xu ng mi n phí t i a ch web site c a nhóm Java: http://www .java. sun.com/downloads/ Ch y ch ng trình. .. mã ngu n Java: iv im t Khai báo tên l p v i t khoá class Khái báo các thu c tính c a l p 35 Khai báo các ph ng th c c a l p Vi c khai báo l p v i các thu c tính và ph 3.2.2 Ch Ch ng trình Java ng th c s c trình bày chi ti t trong ch ng 4 u tiên ng trình sau ây cho phép hi n th m t thông i p (N m trong t p mã ngu n First .java) : Ch ng trình 3.1 package vidu.chuong3; // ây là ch ng trình “First .java class... n 25 2.4.3 Java Java là m t ngôn ng l p trình c Sun Microsystems gi i thi u vào tháng 6 n m 1995 Java c xây d ng trên n n t ng c a C và C++: Java s d ng cú pháp c a C và c tr ng h ng i t ng c a C++ M ts c i m c a Java: Java là m t ngôn ng l p trình hoàn toàn h ng i t ng: T t c các th c th u c coi là m t i t ng, là m t th hi n c th c a m t l p xác nh Không có d li u t do và hàm t do trong Java, t t c... ng c a C và C++ ngh a là Java s d ng cú pháp c a C và c tr ng h ng i t ng c a C++ Java là ngôn ng v a biên d ch v a thông d ch u tiên mã ngu n c biên d ch thành d ng bytecode Sau ó c th c thi trên t ng lo i máy nh trình thông d ch M c tiêu c a các nhà thi t k Java là cho phép ng i l p trình vi t ch ng trình m t l n nh ng có th ch y trên các n n ph n c ng khác nhau Ngày nay, Java c s d ng r ng rãi, không... ng Java là ngôn ng l p trình hoàn toàn h M i th c th trong h th ng m t l p xác nh T t c các ch ng trình ng u it ng: c coi là m t it ng, t c là m t th hi n c th c a u ph i n m trong m t class nh t nh Không th dùng Java vi t m t ch c n ng mà không thu c vào b t kì m t l p nào T c là Java không cho phép nh ngh a d li u và hàm t do trong ch ng trình c l p ph n c ng và h i u hành i v i các ngôn ng l p trình. .. nhau, có m t trình biên d ch khác nhau biên d ch mã ngu n ch ng trình cho phù h p v i n n ph n c ng y Do v y, khi ch y trên m t n n ph n c ng khác, b t bu c ph i biên d ch l i mà ngu n compiler IB compiler Sparc compiler Macintosh Hình 3.1 Cách biên d ch truy n th ng i các ch ng trình vi t b ng Java, trình biên d ch Javac s biên d ch mã ngu n thành d ng bytecode Sau ó, khi ch y ch ng trình trên các