1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình hướng đối tượng Java PTIT

173 372 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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 HNG I TNG PGS.TS. Trn ình Qu KS. Nguyn Mnh Hùng Các khái nim c bn ca Lp trình hng đi tng Lp trình hng đi tng vi Java 2 GII THIU Trong nhng nm gn đây, lp trình hng đi tng đã tr nên gn gi nh s ra đi liên tip ca các ngôn ng lp trình hng đi tng. Sc mnh ca phng pháp lp trình hng đi tng th hin  ch kh nng mô hình hoá h thng da trên các đi tng thc t, kh nng đóng gói và bo v an toàn d liu, kh nng s dng li mã ngun đ tit kim chi phí và tài nguyên; đc bit là kh nng chia s mã ngun trong cng đng lp trình viên chuyên nghip. Nhng đim mnh này ha hn s thúc đy phát trin mt môi trng lp trình tiên tin cùng vi nn công nghip lp ráp phn mm vi các th vin thành phn có sn. Tài liu này nhm gii thiu cho các sinh viên m t cái nhìn tng quan v phng pháp lp trình hng đi tng cùng cung cp nhng kin thc, các k thut c bn cho phát trin các ng dng ca mình da trên ngôn ng lp trình Java - mt trong nhng ngôn ng lp trình hng đi tng thông dng nht hin nay. Ni dung ca tài liu này bao gm hai phn chính: • Phn th nht trình bày nhng khái nim và các vn đ c bn c a lp trình hng đi tng bao gm tng quan v cách tip cn hng đi tng và các khái nim đi tng, lp, k tha, đóng gói, đa hình… • Phn th hai trình bày chi tit phng pháp lp trình hng đi tng vi ngôn ng lp trình Java. Ni dung ca tài liu bao gm 6 chng: Chng 1: Tng quan v cách tip cn hng đi tng. Trình bày s ti n hoá ca cách tip cn t lp trình truyn thng đn cách tip cn ca lp trình hng đi tng và xu hng phát trin ca lp trình hng đi tng hin nay. Chng 2: Nhng khái nim c bn ca lp trình hng đi tng. Trình bày các khái nim c bn nh: đi tng, lp đi tng vi các thuc tính và phng thc, tính k th a và đa hình, tính đóng gói ca lp trình hng đi tng. Chng này cng gii thiu tng quan mt s ngôn ng lp trình hng đi tng thông dng hin nay. Chng 3: Ngôn ng Java. Gii thiu nhng khái nim và nhng quy c ban đu ca ngôn ng lp trình Java: Cu trúc chng trình, cách biên dch, cách đt tên bin, kiu d liu, các toán t và cu trúc lnh ca ngôn ng Java. Ch ng 4: K tha và đa hình trên Java. Trình bày các k thut lp trình hng đi tng da trên ngôn ng Java: Khai báo lp, các thuc tính và phng thc ca lp; k thut tha k, các lp tru tng, cài đt np chng và đa hình trên Java. Chng 5: Biu din và cài đt các cu trúc d liu tru tng trên Java. Trình bày k thut cài đt và s dng mt s cu trúc d li u quen thuc trong Java: ngn xp, hàng đi, danh sách liên kt, cây nh phân và đ th. Chng 6: Lp trình giao din trên Java. Trình bày các k thut lp trình giao din trên Java: Lp trình vi các giao din c bn trong th vin AWT, lp trình giao din vi Applet và HTML, lp trình giao din nâng cao vi th vin SWING. Tài liu này đc vit nhm phc v môn hc “Lp trình hng đi tng” ging dy tip theo sau môn hc Ngôn ng lp trình C++ và nh vy khi hc môn hc này sinh viên s d nm bt đc nhng đc trng khác bit ca ngôn ng Java so vi C++. 3 Cun sách này còn có kèm theo mt đa CD cha toàn b mã các chng trình cài đt làm ví d và bài tp trong cun sách. Mc dù các tác gi đã có nhiu c gng trong quá trình biên son tài liu này, song không th tránh khi nhng thiu sót. Rt mong nhn đc s đóng góp ý kin ca sinh viên và các bn đng nghip. 4 PHN 1 NHNG KHÁI NIM C BN CA LP TRÌNH HNG I TNG 5 CHNG 1 TNG QUAN V CÁCH TIP CN HNG I TNG Ni dung chng này nhm gii thiu mt cách tng quan v cách tip cn hng đi tng. Ni dung trình bày bao gm: • Gii thiu v cách tip cn ca lp trình truyn thng. • Gii thiu cách tip cn ca lp trình hng đi tng. • So sánh s khác bit gia hai cách tip cn này. • Xu hng hin nay ca lp trình hng đi tng 1.1 PHNG PHÁP TIP CN CA LP TRÌNH TRUYN THNG Lp trình truyn thng đã tri qua hai giai đon: • Giai đon s khai, khi khái nim lp trình mi ra đi, là lp trình tuyn tính. • Giai đon tip theo, là lp trình hng cu trúc. 1.1.1 Lp trình tuyn tính c trng c bn ca lp trình tuyn tính là t duy theo li tun t. Chng trình s đc thc hin tun t t đu đn cui, lnh này k tip lnh kia cho đn khi kt thúc chng trình. c trng Lp trình tuyn tính có hai đc trng: • n gin: chng trình đc tin hành đn gin theo li tun t, không phc tp. • n lung: ch có mt lung công vic duy nht, và các công vic đc thc hin tun t trong lung đó. Tính cht • u đim: Do tính đn gin, lp trình tuyn tính có u đim là chng trình đn gin, d hiu. Lp trình tuyn tính đc ng dng cho các chng trình đn gin. • Nhc đim: Vi các ng dng phc tp, ngi ta không th dùng lp trình tuyn tính đ gii quyt. Ngày nay, lp trình tuyn tính ch tn ti trong phm vi các modul nh nh t ca các phng pháp lp trình khác. Ví d trong mt chng trình con ca lp trình cu trúc, các lnh cng đc thc hin theo tun t t đu đn cui chng trình con. 1.1.2 Lp trình cu trúc Trong lp trình hng cu trúc, chng trình chính đc chia nh thành các chng trình con và mi chng trình con thc hin mt công vic xác đnh. Chng trình chính s gi đn chng trình con theo mt gii thut, hoc mt cu trúc đc xác đnh trong chng trình chính. 6 Các ngôn ng lp trình cu trúc ph bin là Pascal, C và C++. Riêng C++ ngoài vic có đc trng ca lp trình cu trúc do k tha t C, còn có đc trng ca lp trình hng đi tng. Cho nên C++ còn đc gi là ngôn ng lp trình na cu trúc, na hng đi tng. c trng c trng c bn nht ca lp trình cu trúc th hin  mi quan h: Chng trình = Cu trúc d liu + Gii thut Trong đó: • Cu trúc d liu là cách t chc d liu, cách mô t bài toán di dng ngôn ng lp trình • Gii thut là mt quy trình đ thc hin mt công vic xác đnh Trong chng trình, gii thut có quan h ph thuc vào cu trúc d liu: • Mt cu trúc d liu ch phù hp vi mt s hn ch các gii thut. • Nu thay đi cu trúc d liu thì phi thay đi gii thut cho phù hp. • Mt gii thut thng phi đi kèm vi mt cu trúc d liu nht đnh. Tính cht • Mi chng trình con có th đc gi thc hin nhiu ln trong mt chng trình chính. • Các chng trình con có th đc gi đn đ thc hin theo mt th t bt kì, tu thuc vào gii thut trong chng trình chính mà không ph thuc vào th t khai báo ca các chng trình con. • Các ngôn ng lp trình cu trúc cung cp mt s cu trúc lnh điu khin ch ng trình. u đim • Chng trình sáng sa, d hiu, d theo dõi. • T duy gii thut rõ ràng. Nhc đim • Lp trình cu trúc không h tr vic s dng li mã ngun: Gii thut luôn ph thuc cht ch vào cu trúc d liu, do đó, khi thay đi cu trúc d liu, phi thay đi gii thut, ngha là phi vit li chng trình. • Không phù hp vi các phn mm ln: t duy cu trúc vi các gii thut ch phù hp vi các bài toán nh, n m trong phm vi mt modul ca chng trình. Vi d án phn mm ln, lp trình cu trúc t ra không hiu qu trong vic gii quyt mi quan h v mô gia các modul ca phn mm. Vn đ Vn đ c bn ca lp trình cu trúc là bng cách nào đ phân chia chng trình chính thành các chng trình con cho phù hp vi yêu cu, chc nng và mc đích ca mi bài toán. Thông thng, đ phân rã bài toán trong lp trình cu trúc, ngi ta s dng phng pháp thit k trên xung (top-down). 7 Phng pháp thit k trên xung (top-down) Phng pháp thit k top-down tip cn bài toán theo hng t trên xung di, t tng quan đn chi tit. Theo đó, mt bài toán đc chia thành các bài toán con nh hn. Mi bài toán con li đc chia nh tip, nu có th, thành các bài toán con nh hn na. Quá trình này còn đc gi là quá trình làm mn dn. Quá trình làm mn dn s dng li khi các bài toán con không cn chia nh thêm na. Ngha là khi mi bài toán con đu có th gii quyt bng mt ch ng trình con vi mt gii thut đn gin. Ví d, s dng phng pháp top-down đ gii quyt bài toán là xây mt cn nhà mi. Khi đó, ta có th phân rã bài toán theo các bc nh sau: •  mc th nht, chia bài toán xây nhà thành các bài toán nh hn nh: làm móng, đ ct, đ trn, xây tng, lp mái. •  mc th hai, phân rã các công vic  mc th nht: vic làm móng nhà có th phân rã tip thành các công vic: đào móng, gia c  nn, làm khung st, đ bê tông. Công vic đ ct đc phn rã thành … •  mc th ba, phân rã các công vic ca mc th hai: vic đào móng có th phân chia tip thành các công vic: đo đc, cm mc, chng dây, đào và kim tra móng. Vic gia c nn đc phân rã thành … Quá trình phân rã có th dng  mc này, bi vì các công vic con thu đc là: đo đc, cm mc, chng dây, đào… có th thc hi n đc ngay, không cn chia nh thêm na. Lu ý: • Cùng s dng phng pháp top-down vi cùng mt bài toán, nhng có th cho ra nhiu kt qu khác nhau. Nguyên nhân là do s khác nhau trong tiêu chí đ phân rã mt bài toán thành các bài toán con. Ví d, vn áp dng phng pháp top-down đ gii quyt bài toán xây nhà, nhng nu s dng mt cách khác đ phân chia bài toán, ta có th thu đc kt qu khác bit so vi phng pháp ban đu: •  mc th nht, chia bài toán xây nhà thành các bài toán nh h n nh: làm phn g, làm phn st, làm phn bê tông và làm phn gch. •  mc th hai, phân rã các công vic  mc th nht: vic làm g có th chia thành các công vic nh: x g, gia công g, to khung, lp vào nhà. Vic làm st có th chia nh thành… Rõ ràng, vi cách làm mn th này, ta s thu đc mt kt qu khác hn vi cách thc đã thc hin  phn trên. 1.2 PHNG PHÁP TIP CN HNG I TNG 1.2.1 Phng pháp lp trình hng đi tng Xut phát t hai hn ch chính ca phng pháp lp trình cu trúc: • Không qun lí đc s thay đi d liu khi có nhiu chng trình cùng thay đi mt bin chung. Vn đ này đc bit nghiêm trng khi các ng dng ngày càng ln, ngi ta không th kim soát đc s truy nhp đn các bin d liu chung. 8 • Không tit kim đc tài nguyên con ngi: Gii thut gn lin vi cu trúc d liu, nu thay đi cu trúc d liu, s phi thay đi gii thut, và do đó, phi vit li mã chng trình t đu.  khc phc đc hai hn ch này khi gii quyt các bài toán ln, ngi ta xây dng mt phng pháp tip cn mi, là phng pháp lp trình h ng đi tng, vi hai mc đích chính: • óng gói d liu đ hn ch s truy nhp t do vào d liu, không qun lí đc. • Cho phép s dng li mã ngun, hn ch vic phi vit li mã t đu cho các chng trình. Vic đóng gói d liu đc thc hin theo phng pháp tru tng hoá đi tng thành lp t thp lên cao nh  sau: • Thu thp các thuc tính ca mi đi tng, gn các thuc tính vào đi tng tng ng. • Nhóm các đi tng có các thuc tính tng t nhau thành nhóm, loi b bt các thuc tính cá bit, ch gi li các thuc tính chung nht. ây đc gi là quá trình tru tng hoá đi tng thành lp. • óng gói d liu ca các đi tng vào lp tng ng. Mi thu c tính ca đi tng tr thành mt thuc tính ca lp tng ng. • Vic truy nhp d liu đc thc hin thông qua các phng thc đc trang b cho lp. Không đc truy nhp t do trc tip đn d liu. • Khi có thay đi trong d liu ca đi tng, ta ch cn thay đi các phng thc truy nhp thuc tính ca lp, mà không c n phi thay đi mã ngun ca các chng trình s dng lp tng ng. Vic cho phép s dng li mã ngun đc thc hin thông qua c ch k tha trong lp trình hng đi tng. Theo đó: • Các lp có th đc k tha nhau đ tn dng các thuc tính, các phng thc ca nhau. • Trong lp dn xut (lp đc k th a) có th s dng li các phng thc ca lp c s (lp b lp khác k tha) mà không cn thit phi cài đt li mã ngun. • Ngay c khi lp dn xut đnh ngha li các phng thc cho mình, lp c s cng không b nh hng và không phi sa li bt kì mt đon mã ngun nào. Ngôn ng l p trình hng đi tng ph bin hin nay là Java và C++. Tuy nhiên, C++ mc dù cng có nhng đc trng c bn ca lp trình hng đi tng nhng vn không phi là ngôn ng lp trình thun hng đi tng. Java tht s là mt ngôn ng lp trình thun hng đi tng. c trng Lp trình hng đi tng có hai đc trng c bn: • óng gói d liu: d liu luôn đc t chc thành các thuc tính ca lp đi tng. Vic truy nhp đn d liu phi thông qua các phng thc ca đi tng lp. • S dng li mã ngun: vic s dng li mã ngun đc th hin thông qua c ch  k tha. C ch này cho phép các lp đi tng có th k tha t các lp đi tng khác. Khi đó, trong các lp k tha, có th s dng các phng thc (mã ngun) ca các lp b k tha, mà không cn phi đnh ngha li. 9 u đim Lp trình hng đi tng có mt s u đim ni bt: • Không còn nguy c d liu b thay đi t do trong chng trình. Vì d liu đã đc đóng gói vào các đi tng. Nu mun truy nhp vào d liu phi thông qua các phng thc cho phép ca đi tng. • Khi thay đi cu trúc d liu ca mt đi tng, không cn thay đi các đi mã ngun ca các đi tng khác, mà ch cn thay đi mt s hàm thành phn ca đi tng b thay đi. iu này hn ch s nh hng xu ca vic thay đi d liu đn các đi tng khác trong chng trình. • Có th s dng li mã ngun, tit kim tài nguyên. Vì nguyên tc k tha cho phép các lp k tha s d ng các phng thc đc k tha t lp khác nh nhng phng thc ca chính nó, mà không cn thit phi đnh ngha li. • Phù hp vi các d án phn mm ln, phc tp. 1.2.2 Phng pháp phân tích và thit k hng đi tng Mt vn đ c bn đt ra cho phng pháp hng đi tng là t mt bài toán ban đu, làm sao đ thu đc mt tp các đi tng, vi các chc nng đc phi hp vi nhau, đáp ng đc yêu cu ca bài toán đt ra? Phng pháp phân tích thit k hng đi tng ra đi nhm tr li cho câu hi này. Mc đích là xây dng mt tp các l p đi tng tng ng vi mi bài toán, phng pháp này tin hành theo hai pha chính: Pha phân tích: Chuyn đi yêu cu bài toán t ngôn ng t nhiên sang ngôn ng mô hình. Pha thit k: Chuyn đi đc t bài toán di dng ngôn ng mô hình sang mt mô hình c th có th cài đt đc. Hai pha phân tích và thit k này bao gm nhiu bc khác nhau: • Mô t bài toán • c t yêu cu • Trích chn đi tng • Mô hình hoá lp đi tng • Thit k tng quan • Thit k chi tit. Bc 1: Mô t bài toán Bài toán ban đu đc phát biu di dng ngôn ng t nhiên, bao gm: • Mc đích, chc nng chung • Các yêu cu v thông tin d liu • Các yêu cu v chc nng thc hin 10 Bc 2: c t yêu cu Các yêu cu đc hình thc hoá lên mt mc cao hn bng cách s dng ngôn ng kiu kch bn (scenario) đ mô t. Trong mt kch bn, mi chc nng, mi hot đng đc mô t bng mt kch bn, bao gm: • Các tác nhân tham gia vào kch bn. • Vai trò ca mi tác nhân trong kch bn. • Th t các hành đng mà mi tác nhân thc hin: khi nào thc 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 tin hành vi tt c các chc nng yêu cu ca h thng. Bc 3: Trích chn đi tng Bc này s tin hành đ xut các đi tng có th có mt trong h thng: • Da vào các kch bn đc mô t trong bc hai, chn ra các tác nhân có xut hin đ đ xut thành các đi tng. • La chn các đi tng bng cách loi b các tác nhân bên ngoài h thng, các tác nhân trùng lp. • Cui cùng, ta thu đc tp các đi tng ca h thng. Bc 4: Mô hình hoá lp đi tng Bc này tin hành tru tng hoá đi tng thành các lp: • Thu thp tt c các thuc tính ca mi đi tng va thu thp đc, da vào yêu cu v thông tin trong yêu cu h thng (t bc 1). • Thu thp các hành đng mà mi đi tng cn thc hin, da vào các kch bn mà đi tng tng ng có tham gia (trong bc 2). • Nhóm các đi tng t ng t nhau, hoc có nhiu thuc tính gn ging nhau. • Loi b mt s thuc tính cá bit, riêng t ca mt s đi tng trong nhóm. • Mô hình mi nhóm đi tng còn li thành lp: Các thuc tính chung ca các đi tng thành thuc tính ca lp, các hành đng ca các đi tng thành phng thc ca lp. Kt qu thu đc mt tp các lp đi tng ban đu ca h thng. Bc 5: Thit k tng quát Bc này s tin hành thit k v mô, ngha là thit k mi quan h gia các lp trong h thng: • Xác đnh s đ tha k, nu có, gia các lp: Nu hai lp có mt s thuc tính chung, thì tách các thuc tính chung làm thành mt lp c s, và hai lp ban đu đu dn xut t lp c s đó. Thông thng, lp các tru tng (chung nh t) s làm lp c s, lp càng c th, càng chi tit thì làm lp dn xut (lp con, cháu). • Xác đnh tng tác, nu có, gia các lp: Da vào các kch bn đc mô t trong bc 2, hai tác nhân có tng tác vi nhau thì hai lp tng ng  bc này cng có tng tác vi nhau. Kt qu thu đc ca bc này là mt s đ quan h bên ngoài gia các lp trong h thng. [...]... 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

Ngày đăng: 03/02/2015, 23:21

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w