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

21 508 0
Lập trình hướng đối tượng trong Java

Đ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

Đ tài 3. L p trình h ng đ i t ng trong Javaề ậ ướ ố ượ I. Khái ni m l p trình h ng đ i t ng (Object-Oriented Programming - OOP)ệ ậ ướ ố ượ I.1. Khái ni m OOPệ L p trình h ng đ i t ng là s cài đ t m t ch ng trình theo h ng đ i t ng b ngậ ướ ố ượ ự ặ ộ ươ ướ ố ượ ằ các ngôn ng l p trình, th ng là ngôn ng OOP.ữ ậ ườ ữ Nh v y, n u dùng m t ngôn ng OOP mà ch ng trình không theo h ng đ i t ngư ậ ế ộ ữ ươ ướ ố ượ thì cũng không ph i là l p trình OOP. Trong khi n u dùng m t ngôn ng không h ng đ iả ậ ế ộ ữ ướ ố t ng đ vi t m t ch ng trình OOP (r t khó khăn) thì cũng có th g i là l p trình OOP.ượ ể ế ộ ươ ấ ể ọ ậ Th c t thì ta không th vi t ch ng trình h ng đ i t ng b ng các ngôn ng c u trúc (nhự ế ể ế ươ ướ ố ượ ằ ữ ấ ư Pascal ch ng h n) vì các ngôn ng này không h tr cú pháp cài đ t và k thu t biên d ch cácẳ ạ ữ ỗ ợ ặ ỹ ậ ị đ c tính c a h ng đ i t ng.ặ ủ ướ ố ượ Nh ng ngôn ng OOP không ch bao g m cú pháp và m t trình biên d ch (compiler) màữ ữ ỉ ồ ộ ị còn có m t môi tr ng phát tri n toàn di n. Môi tr ng này bao g m m t th vi n đ c thi tộ ườ ể ệ ườ ồ ộ ư ệ ượ ế k t t, thu n l i cho vi c s d ng k th a các đ i t ng – tính tái s d ng. Đây là m t đi mế ố ậ ợ ệ ử ụ ế ừ ố ượ ử ụ ộ ể m nh c a OOP và ph ng pháp tr c đây không có đ c.ạ ủ ươ ướ ượ Đ i v i m t ngôn ng l p trình h tr OOP thì vi c tri n khai k thu t l p trìnhố ớ ộ ữ ậ ỗ ợ ệ ể ỹ ậ ậ h ng đ i t ng s d dàng h n. H n n a, các d án ph n m m phân tích và thi t k theoướ ố ượ ẽ ễ ơ ơ ữ ự ầ ề ế ế UML b t bu c ph i s d ng k thu t OOP đ cài đ t thì m i phát huy hi u qu . ắ ộ ả ử ụ ỹ ậ ể ặ ớ ệ ả I.2 C s lý lu n c a OOPơ ở ậ ủ Chúng ta th y r ng thu t ng “h ng đ i t ng” có nghĩa là l y đ i t ng làm trungấ ằ ậ ữ ướ ố ượ ấ ố ượ tâm và t t c n m trong đ i t ng. Quan sát th gi i th c, ta th y m i v t đ u có v trí riêngấ ả ằ ố ượ ế ớ ự ấ ọ ậ ề ị c a nó, chúng s h u các tính ch t và thu c tính riêng, cách th c v n đ ng riêng. Chúng ta g iủ ở ữ ấ ộ ứ ậ ộ ọ chúng là nh ng đ i t ng. Theo cách hi u nh v y thì m i nghi p v th c t suy cho cùngữ ố ượ ể ư ậ ọ ệ ụ ự ế ch là vi c qu n lý các đ i t ng, khai thác thông tin cũng nh các m i quan h t chúng ho cỉ ệ ả ố ượ ư ố ệ ừ ặ thay đ i tr ng thái c a chúng.ổ ạ ủ OOP là ph ng th c t duy m i đ gi i quy t v n đ b ng máy tính. Đ đ t k t qu ,ươ ứ ư ớ ể ả ế ấ ề ằ ể ạ ế ả l p trình viên ph i n m đ c s t ng ng gi a các các đ i t ng th c t , m i quan h gi aậ ả ắ ượ ự ươ ứ ữ ố ượ ự ế ố ệ ữ chúng và s h tr c a ngôn ng đ cài đ t chúng vào máy tính. Ngôn ng OOP cung c p đ yự ỗ ợ ủ ữ ể ặ ữ ấ ầ đ ph ng ti n đ th c hi n đi u này. Chúng ta s d ng k thu t h ng đ i t ng đ ánhủ ươ ệ ể ự ệ ề ử ụ ỹ ậ ướ ố ượ ể x nh ng th c th chúng ta g p ph i trong đ i s ng th c thành nh ng th c th t ng t trongạ ữ ự ể ặ ả ờ ố ự ữ ự ể ươ ự máy tính. Do đó, phát tri n ph n m m theo k thu t l p trình h ng đ i t ng có kh năngể ầ ề ỹ ậ ậ ướ ố ượ ả gi m thi u s l n l n th ng x y ra gi a h th ng và lĩnh v c ng d ng.ả ể ự ẫ ộ ườ ả ữ ệ ố ự ứ ụ Tuy nhiên, t nghi p v th c t chúng ta không th ngay l p t c đem vào cài đ t trongừ ệ ụ ự ế ể ậ ứ ặ ngôn ng OOP mà ph i qua m t quy trình phân tích và thi t k theo h ng đ i t ng nhữ ả ộ ế ế ướ ố ượ ư chúng ta đã th y qua vi c nghiên c u ngôn ng mô hình hóa UML – m t ngôn ng giúp chúngấ ệ ứ ữ ộ ữ ta tr u t ng hóa th gi i th c. ừ ượ ế ớ ự I.3 Tr u t ng hóaừ ượ Qu n lý thông tin, các hành vi, các m i quan h c a các đ i t ng là nhi m v mà l pả ố ệ ủ ố ượ ệ ụ ậ trình OOP ph i làm. Thông tin v đ i t ng và m i quan h gi a chúng th c t là vô cùng.ả ề ố ượ ố ệ ữ ự ế V y làm th nào đ đ a chúng vào máy tính? Câu tr l i là chúng ta c n m t quá trình tr uậ ế ể ư ả ờ ầ ộ ừ t ng hóa.ượ 46 Gi s đ i tả ử ố ng qu n lý là m t sinh viên. M t h th ng qu n lý sinh viên có th chượ ả ộ ộ ệ ố ả ể ỉ c n quan tâm t i: H và tên, ngày sinh, l p h c, đ a ch n i , đi m các môn h c. Trong khiầ ớ ọ ớ ọ ị ỉ ơ ở ể ọ đó, các thông tin khác v sinh viên – cũng là m t con ng i – nh chi u cao, cân n ng, nhómề ộ ườ ư ề ặ máu,…chúng ta không c n quan tâm. M t quá trình suy lu n nh v y là m t quá trình tr uầ ộ ậ ư ậ ộ ừ t ng hóa d li u. đây ta không quan tâm t i giá tr c th c a các thu c tính này.ượ ữ ệ Ở ớ ị ụ ể ủ ộ Khi quan tâm t i giá tr c a các thu c tính, chúng ta có m tớ ị ủ ộ ộ câu h i: Cái gì làm cho dỏ ữ li u này bi n đ i? Câu tr l i là chính hành vi c a đ i t ng làm cho thu c tính c a chúng bệ ế ố ả ờ ủ ố ượ ộ ủ ị thay đ i. Trong ví d trên, m t anh sinh viên b t kỳ có th có hành vi “xin đ i l p h c” ho cổ ụ ộ ấ ể ổ ớ ọ ặ “đ i đ a ch n i ” làm cho giá tr các thu c tính “l p h c”, “đ a ch n i ” b thay đ i. Quáổ ị ỉ ơ ở ị ộ ớ ọ ị ỉ ơ ở ị ổ trình xác đ nh các hành vi c a đ i t ng ph c v cho nghi p v qu n lý cũng là m t quá trìnhị ủ ố ượ ụ ụ ệ ụ ả ộ tr u t ng hóa hành vi.ừ ượ Tóm l i, chúng ta có m t mô hình tr u t ng hóa c a m t sinh viên:ạ ộ ừ ượ ủ ộ Sinh viên H và tênọ Ngày sinh Tên l pớ Đ a chị ỉ Đi m môn h cể ọ Thay đ i l pổ ớ Thay đ i n i ổ ơ ở Đi m quan tr ng là sau khi tr u t ng hóa t m t l p các sinh viên (t t c các sinhể ọ ừ ượ ừ ộ ớ ấ ả viên trong ph m vi qu n lý), mô hình này đ i di n cho t t c sinh viên và là khuôn m u đ t oạ ả ạ ệ ấ ả ẫ ể ạ ra b t kỳ sinh viên nào khác.ấ Qua đây, ta cũng rút ra nh n xét r ng quá trình tr u t ng hóa tùy theo yêu c u nghi pậ ằ ừ ượ ầ ệ v s cho k t qu khác nhau. Cũng là m t sinh viên nh ng n u ch ng may anh ta b m n mụ ẽ ế ả ộ ư ế ẳ ị ố ằ vi n, anh ta đ c qu n lý nh m t b nh nhân. M t h th ng qu n lý b nh nhân t t nhiênệ ượ ả ư ộ ệ ộ ệ ố ả ệ ấ không th b qua các thông tin v nhóm máu, cân n ng, huy t áp,…và t t nhiên là cũng có cácể ỏ ề ặ ế ấ mô hình hành vi khác. Tóm l i:ạ • Các th c th t n t i trong th gi i th c đ c mô hình hóa thành các l p đ i t ng.ự ể ồ ạ ế ớ ự ượ ớ ố ượ • Các m i quan h gi a các th c th trong th gi i th c đ c mô hình hóa b ng các m iố ệ ữ ự ể ế ớ ự ượ ằ ố quan h gi a các l p đ i t ng.ệ ữ ớ ố ượ Th gi i th c = Các đ i ế ớ ự ố t ng + Các m i quan ượ ố hệ Các l p đ i t ng trong ớ ố ượ ch ng trình - Classesươ Tr u t ng ừ ượ hóa 47 II. Tính đóng gói trong Java II.1 Khái ni m tính đóng góiệ Tính đóng gói th hi n b i vi c thu c tính mô t đ i t ng và hành vi c a đ i t ngể ệ ở ệ ộ ả ố ượ ủ ố ượ đ c g n ch t v i nhau. Thu c tính th hi n tr ng thái đ i t ng, hành vi làm thay đ i tr ngượ ắ ặ ớ ộ ể ệ ạ ố ượ ổ ạ thái đ i t ng thông qua vi c thay đ i giá tr các thu c tính.ố ượ ệ ổ ị ộ Thu c tính đ c cài đ t thông qua mã l nh Java b ng các bi n thành ph n trong l p.ộ ượ ặ ệ ằ ế ầ ớ Hành vi đ c cài đ t thông qua mã l nh Java b i các ph ng th c.ượ ặ ệ ở ươ ứ Thông tin và hành vi đ i t ng đ c b o v b ng các c p đ truy c p: public, private.ố ượ ượ ả ệ ằ ấ ộ ậ C p đ public cho phép s truy c p t bên ngoài l p trong khi private ch cho phép n i b l pấ ộ ự ậ ừ ớ ỉ ộ ộ ớ truy c p.ậ Đ i t ng đ c sinh ra b i class - m t s mô hình hóa m t l p đ i t ng trong th cố ượ ượ ở ộ ự ộ ớ ố ượ ự t .ế object = attributes (các thu c tính) + operations(các hành vi) + name (tên đ nh danh)ộ ị Nh v y tính đóng gói th hi n vi c chuy n mô hình đ i t ng th c t thành các l pư ậ ể ệ ệ ể ố ượ ự ế ớ trong Java. II.2 M i quan h gi a các classố ệ ữ Các class trong ch ng trình có th quan h v i nhau theo 1 trong 3 d ng:ươ ể ệ ớ ạ • Ph thu c (Dependence): Class A có quan h ph thu c v i class B n u ph ngụ ộ ệ ụ ộ ớ ế ươ th c c a class A có s d ng đ i t ng thu c class B.ứ ủ ử ụ ố ượ ộ • Bao g m (Aggregation): Class A có quan h bao g m v i class B n u đ i t ngồ ệ ồ ớ ế ố ượ c a class A ch a đ i t ng c a class B.ủ ứ ố ượ ủ • Th a k (inheritance): Class B g i là th a k class A n u class B có các ph ngừ ế ọ ừ ế ế ươ th c và thu c tính c a class A, ngoài ra class B còn đ nh nghĩa các ph ng th cứ ộ ủ ị ươ ứ và thu c tính khác c a riêng nó.ộ ủ Ví d :ụ Trong h th ng bán hàng chúng ta có:ệ ố • class DanhMucMatHang • class TaiKhoan • class HoaDon • class HoaDonThanhToanNhanh M i HoaDon bao g m 1 DanhMucMatHang: Quan h aggregation.ỗ ồ ệ Khi m t HoaDon đ c t o ra, nó c n truy c p đ n class TaiKhoan đ ki m tra tìnhộ ượ ạ ầ ậ ế ể ể tr ng th tín d ng: Quan h dependence.ạ ẻ ụ ệ M i HoaDonThanhToanNhanh th a k các thu c tính và ph ng th c c a HoaDon vàỗ ừ ế ộ ươ ứ ủ có thêm các thu c tính, ph ng th c khác: Quan h inheritance.ộ ươ ứ ệ II.3 M t s g i ý khi thi t k classộ ố ợ ế ế Khai báo d li u private: Đi u này tránh vi c truy c p tùy ý t bên ngoài l pữ ệ ề ệ ậ ừ ớ Kh i t o cho d li u: Các thu c tính nên đ c kh i t o b ng các ph ng th cở ạ ữ ệ ộ ượ ở ạ ằ ươ ứ constructor khi m t đ i t ng m i đ c t o ra.ộ ố ượ ớ ượ ạ Không s d ng quá nhi u ki u d li u c b n trong 1 l pử ụ ề ể ữ ệ ơ ả ớ Không ph i thu c tính nào cũng c n mutator và accesor: M i thu c tính bao gi cũng cóả ộ ầ ỗ ộ ờ m t ph ng th c thi t đ t giá tr cho nó g i là mutator (ti n t set) và m t ph ng th c l y raộ ươ ứ ế ặ ị ọ ề ố ộ ươ ứ ấ giá tr c a nó g i là accesor (ti n t get).ị ủ ọ ề ố 48 Tách các class ph c t pứ ạ Đ t tên ph ng th c và thu c tính ph n ánh theo tính ch t và nghi p v c a nó. ặ ươ ứ ộ ả ấ ệ ụ ủ IV. S d ng các Class xây d ng s n trong th vi nử ụ ự ẵ ư ệ Java h tr cho l p trình viên m t th vi n phong phú các l p đ i t ng đã đ c xâyỗ ợ ậ ộ ư ệ ớ ố ượ ượ d ng và thi t k c n th n. L p trình viên ch c n bi t cách l y chúng ra và s d ng chúngự ế ế ẩ ậ ậ ỉ ầ ế ấ ử ụ theo k ch b n c a ng d ng.ị ả ủ ứ ụ Các gói th vi n quan tr ng c a Java 2 bao g m:ư ệ ọ ủ ồ (tham kh o chi ti t t i: http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html )ả ế ạ Các gói th ng dùng trong Java 2 SEườ java.applet H tr các class c n thi t cho vi c t o ra các Applet và giao ti p gi aỗ ợ ầ ế ệ ạ ế ữ Applet v i môi tr ng ng c nh c a nó.ớ ườ ữ ả ủ java.awt Ch a các l p dùng đ t o ra các giao di n ng i dùng và cho các thao tácứ ớ ể ạ ệ ườ v các hình đ h a và nh.ẽ ồ ọ ả java.awt.color Cung c p các l p cho không gian màu.ấ ớ java.awt.event Cung c p các giao di n và các l p cho vi c gi i quy t các v n đ v xấ ệ ớ ệ ả ế ấ ề ề ử lý các s ki n trên các thành ph n giao di n AWT.ự ệ ầ ệ java.awt.font H tr các giao di n và l p liên quan đ n font ch .ỗ ợ ệ ớ ế ữ java.awt.image Cung c p các l p t o và hi u ch nh hình nh.ấ ớ ạ ệ ỉ ả java.awt.print Cung c p các l p và giao di n cho m c đích in n.ấ ớ ệ ụ ấ java.beans Ch a các l p liên quan t i vi c phát tri n các thành ph n (beans) d a trênứ ớ ớ ệ ể ầ ự ki n trúc c a Java.ế ủ java.io H tr cho các thao tác vào / ra d li u trên h th ng file.ỗ ợ ữ ệ ệ ố java.lang Cung c p các l p n n t ng đ thi t k ngôn ng l p trình Java.ấ ớ ề ả ể ế ế ữ ậ java.math H tr các l p đ thao tác và thu t toán v i các s nguyên l n BigIntegerỗ ợ ớ ể ậ ớ ố ớ và BigDecimal. java.net Cung c p các l p cho vi c cài đ t các ng d ng m ng.ấ ớ ệ ặ ứ ụ ạ java.rmi Cung c p các gói cho l p trình RMI – Remote Method Invocation.ấ ậ java.security Cung c p các l p và giao di n cho vi c x lý các v n đ an ninh và b oấ ớ ệ ệ ử ấ ề ả m t trong Java.ậ java.sql Cung c p các hàm API cho vi c truy c p vào d li u trong m t ngu n dấ ệ ậ ữ ệ ộ ồ ữ li u – th ng là các CSDL quan h .ệ ườ ệ java.text Cung c p các l p và giao di n cho vi c qu n lý text, dates, numbers và cácấ ớ ệ ệ ả thông đi p.ệ java.util Ch a đ ng các l p ti n ích thu c nhi u lo i khác nhau nh sinh s ng uứ ự ớ ệ ộ ề ạ ư ố ẫ nhiên, ngày tháng,…. javax.crypto H tr các l p và giao di n cho các thao tác mã hóa d li u.ỗ ợ ớ ệ ữ ệ javax.net Cung c p các l p cho l p trình m ng.ấ ớ ậ ạ javax.print Cung c p các l p c b n cho các d ch v in n qua m ng.ấ ớ ơ ả ị ụ ấ ạ 49 javax.sql Cung c p các hàm API cho vi c truy c p d li u phía server.ấ ệ ậ ữ ệ javax.swing Cung c p m t t p các thành ph n đ c ch p nh n trên h u h t các hấ ộ ậ ầ ượ ấ ậ ầ ế ệ th ng máy tính.ố javax.swing.event H tr cho các s ki n kích ho t b i các thành ph n c a Swing.ỗ ợ ự ệ ạ ở ầ ủ javax.swing.table Cung c p các l p và giao di n làm vi c v i b ng.ấ ớ ệ ệ ớ ả javax.swing.tree Cung c p các l p và giao di n làm vi c v i cây ấ ớ ệ ệ ớ javax.swing.JTree. javax.xml.parsers H tr các l p cho vi c x lý các tài li u XML.ỗ ợ ớ ệ ử ệ Sau đây là h ng d n ví d v s d ng l p Date có s n trong th vi n c a Java:ướ ẫ ụ ề ử ụ ớ ẵ ư ệ ủ Khai báo bi n đ i t ng v i toán t newế ố ượ ớ ử Date myDate = new Date(); Date() là ph ng th c contructor c a class Date. M t đ i t ng luôn đ c t o ra tươ ứ ủ ộ ố ượ ượ ạ ừ m t constructor c a l p đó.ộ ủ ớ Khai báo: Date myDate; Xác đ nh cho ta m t bi n đ i t ng Date nh ng không cho ta m t đ i t ng Dateị ộ ế ố ượ ư ộ ố ượ th c s vì trong th c t , myDate ch a đ c c p phát vùng nh .ự ự ự ế ư ượ ấ ớ Câu l nh:ệ myDate = new Date(); Xác đ nh r ng myDate là m t đ i t ng th c s thu c class Date, ta có th áp d ngị ằ ộ ố ượ ự ự ộ ể ụ các ph ng th c và thu c tính c a class Date cho myDate.ươ ứ ộ ủ System.out.println(myDate.getMonth()); // In ra tháng hi n t iệ ạ V. Xây d ng Class trong Javaự Cài đ t các class là công vi c th ng xuyên c a l p trình viên Java. Các v n đ c aặ ệ ườ ủ ậ ấ ề ủ công vi c thi t k m t l p b ng ngôn ng Java s đ c đ c p d i đây.ệ ế ế ộ ớ ằ ữ ẽ ượ ề ậ ướ V.1 C u trúc c a classấ ủ [<Cách truy xu t>] class <tên l p> [extends <tên l p cha>] [implements <tên giaoấ ớ ớ di n>]{ệ <các thành ph n c a l p>;ầ ủ ớ } Ta s l n l t xem xét t ng thành ph n:ẽ ầ ượ ừ ầ <Cách truy xu t>: ấ public: Có th truy c p l p t các l p khác.ể ậ ớ ừ ớ abstract: L p tr u t ng, không đ c kh i t o đ i t ng c a l p này. Các l p tr uớ ừ ượ ượ ở ạ ố ượ ủ ớ ớ ừ t ng đ c thi t k ch cho m c đích k th a.ượ ượ ế ế ỉ ụ ế ừ final: Không cho phép k th a.ế ừ N u <cách truy xu t> không đ c xác đ nh, m c đ nh là public.ế ấ ượ ị ặ ị <tên l p>:ớ Tên c a l p, n u <cách truy xu t > là public thì tên l p ph i trùng v i tênủ ớ ế ấ ớ ả ớ file ch a l p.ứ ớ <tên l p cha>:ớ Tên c a l p cha mà l p hi n t i th a k .ủ ớ ớ ệ ạ ừ ế 50 <tên giao di n>:ệ Tên c a giao di n đ c cài đ t t i l p. Đây có th là m t danh sáchủ ệ ượ ặ ạ ớ ể ộ các giao di n phân tách b i d u “,”.ệ ở ấ <các thành ph n c a l p>:ầ ủ ớ đây là ph n thân c a l p ch a các đ nh nghĩa cho cácầ ủ ớ ứ ị thu c tính và các ph ng th c thành ph n. Ta s l n l t xem xét t i các thành ph n này.ộ ươ ứ ầ ẽ ầ ượ ớ ầ V.2 Các thu c tính thành ph n:ộ ầ Khai báo thu c tính chính là vi c khai báo các bi n. Khi khai báo trong l p chúngộ ệ ế ớ th ng đ c xác đ nh ph m vi ho t đ ng là m t trong các d ng:ườ ượ ị ạ ạ ộ ộ ạ • public: Bi n có th truy c p b t c l p nào.ế ể ậ ở ấ ứ ớ • private: Ch đ c truy c p trong chính l p đó.ỉ ượ ậ ớ • protected: Ch đ c truy c p trong l p đó và các l p k th a.ỉ ượ ậ ớ ớ ế ừ M c đ nh thì ph m vi truy c p c a bi n là public, các bi n thông th ng có ph m viặ ị ạ ậ ủ ế ế ườ ạ private. Ví d : ụ public int Tuoi; private String HoVaTen; Cách truy c p bi n r t đ n gi n, ph thu c vào bi n thu c d ng nào trong 2 d ng sau:ậ ế ấ ơ ả ụ ộ ế ộ ạ ạ 1. Bi n có ph m vi đ i t ng: Đây là bi n t n t i cùng v i s t n t i c a đ i t ng.ế ạ ố ượ ế ồ ạ ớ ự ồ ạ ủ ố ượ Mu n truy c p vào bi n, tr c h t ph i kh i t o m t đ i t ng thu c l p.ố ậ ế ướ ế ả ở ạ ộ ố ượ ộ ớ SinhVien sv = new SinhVien(20,”Nguyen Van A”); Truy c p vào bi n Tuoi nh sau: sv.Tuoi, ví d gán Tuoi c a sinh viên này b ng 21:ậ ế ư ụ ủ ằ Sv.Tuoi=21; 2. Bi n có ph m vi l p (bi n tĩnh): Đây là bi n có ph m vi t n t i trong m i đ i t ngế ạ ớ ế ế ạ ồ ạ ọ ố ượ c a l p đ c t o ra trong ch ng trình đang ch y. Giá tr c a bi n đ c dùng chung gi a cácủ ớ ượ ạ ươ ạ ị ủ ế ượ ữ đ i t ng.ố ượ Khi khai báo m t bi n có ph m vi l p, ta c n thêm t khóa static nh ví d sau:ộ ế ạ ớ ầ ừ ư ụ public static int MaSo; Khi truy c p, ta có th không c n kh i t o đ i t ng mà tr c ti p thông qua tên l p:ậ ể ầ ở ạ ố ượ ự ế ớ SinhVien.MaSo = 10; Các bi n có ph m vi l p r t ít khi đ c s d ng, trong khi các h ng static l i r t hayế ạ ớ ấ ượ ử ụ ằ ạ ấ đ c dùng. Lý do là trong th c t , các l p đ i t ng th ng có các thu c tính chung, c đ nhượ ự ế ớ ố ượ ườ ộ ố ị có m i đ i t ng. H n n a, khi chúng đã không ph thu c vào m t đ i t ng c th nào thìở ọ ố ượ ơ ữ ụ ộ ộ ố ượ ụ ể ta cũng không c n kh i t o m t đ i t ng đ truy c p. Do đó, ta s cài đ t chúng nh là cácầ ở ạ ộ ố ượ ể ậ ẽ ặ ư h ng static.ằ Ví d :ụ public static final String MauDa = “Vang”; // M i sinh viên đ u có màu da là “Vang” ọ ề ho c khái báo h ng s PI:ặ ằ ố public static final double PI = 3.14159265358979323846; Là h ng s c a l p Math. Khi truy c p ta ch c n g i: Math.PIằ ố ủ ớ ậ ỉ ầ ọ Chú ý: Các bi n r t ít khi đ c khai báo là public vì có th thay đ i giá tr c a nó bênế ấ ượ ể ổ ị ủ ngoài l p nên khó qu n lý. Trong khi đó các h ng th ng luôn đ c khai báo là public vìớ ả ằ ườ ượ chúng đ c dùng chung và không th b thay đ i do t khóa final (h ng).ượ ể ị ổ ừ ằ Bi n thisế Bi n this là bi n đ i t ng c a l p t n t i ng m trong m i l p.ế ế ố ượ ủ ớ ồ ạ ầ ỗ ớ Th ng dùng bi n this đ truy c p đ n các thu c tính c a l p b khai báo trùng trongườ ế ể ậ ế ộ ủ ớ ị ph m vi các ph ng th c c a l p.ạ ươ ứ ủ ớ 51 Ví d :ụ public class TestThis { private int number = 10; public void PrintNumber() { int number =20; // khai báo trùng v i bi n c a l pớ ế ủ ớ System.out.println(number); //in bien number = 20 System.out.println(this.number);//in bien number =10 } } V.3 Các ph ng th c thành ph nươ ứ ầ Ph ng th c thành ph n là s cài đ t các hành vi c a đ i t ng. Cú pháp khai báo m tươ ứ ầ ự ặ ủ ố ượ ộ ph ng th c trong l p nh sau:ươ ứ ớ ư [<Cách truy xu t> <cách c p nh t>] <Ki u giá tr tr v > <Tên ph ng th c>([<danhấ ậ ậ ể ị ả ề ươ ứ sách bi n hình th c>]) [<m nh đ throws>]ế ứ ệ ề { <N i dung c a ph ng th c>;ộ ủ ươ ứ } <Cách truy xu t>:ấ • private: ph ng th c này ch đ c truy xu t bên trong l p ch a nó.ươ ứ ỉ ượ ấ ớ ứ • public: có th truy xu t t b t kỳ l p bên ngoài nào.ể ấ ừ ấ ớ • protected: ch các l p là d n xu t c a l p ch a ph ng này m i truy xu t đ cỉ ớ ẫ ấ ủ ớ ứ ươ ớ ấ ượ nó. • N u không khai rõ cách truy xu t, các ph ng th c s có cách truy xu t m cế ấ ươ ứ ẽ ấ ặ đ nh là public.ị Các ph ng th c khai báo ch ng l p d n xu t ph i có m c đ truy c p m nh h nươ ứ ồ ở ớ ẫ ấ ả ứ ộ ậ ạ ơ ho c gi ng v i m c đ truy c p l p cha.ặ ố ớ ứ ộ ậ ở ớ < Cách c p nh t>ậ ậ • static: ph ng th c tác đ ng không ph thu c vào các đ i t ng c th , nó cóươ ứ ộ ụ ộ ố ượ ụ ể th đ c g i mà không c n kh i t o đ i t ng c a l p. ể ượ ọ ầ ở ạ ố ượ ủ ớ • abstract: ph ng th c đ n gi n nh t, không cài đ t gì trong l p khai báo nó,ươ ứ ơ ả ấ ặ ở ớ t c là nó không có ph n thân. Ph ng th c này s đ c phát tri n trong các l pứ ầ ươ ứ ẽ ượ ể ớ là d n xu t c a l p ch a nó. L p có ch a ph ng th c abstract cũng ph i đ cẫ ấ ủ ớ ứ ớ ứ ươ ứ ả ượ khai báo abstract. • final: ph ng th c này đ c b o v không cho các l p d n xu t khai báo và càiươ ứ ượ ả ệ ớ ẫ ấ đ t l i.ặ ạ • native: là ph ng th c đ c vi t b ng ngôn ng khác java.ươ ứ ượ ế ằ ữ • synchronyzed: đ m b o d li u không b sai l c khi cùng m t lúc 2 ph ngả ả ữ ệ ị ạ ộ ươ th c truy c p cùng m t d li u.ứ ậ ộ ữ ệ <Ki u giá tr tr v >:ể ị ả ề integer, String, char, float, .: là các ki u d li u mà ph ng th c tr v .ể ữ ệ ươ ứ ả ề void: ph ng th c không tr v giá tr .ươ ứ ả ề ị Khi xác đ nh ki u giá tr tr v , khi k t thúc các lu ng x lý trong ph ng th c nh tị ể ị ả ề ế ồ ử ươ ứ ấ thi t ph i có câu l nh return đ tr v m t giá tr thu c ki u đó.ế ả ệ ể ả ề ộ ị ộ ể public static int max(int num1, int num2) 52 { if(num1>num2) return num1; else return num2; } V <m nh đ throws> chúng ta s xem xét k trong ph n x lý ngo i l .ề ệ ề ẽ ỹ ầ ử ạ ệ V.4 G i và truy n tham s cho ph ng th cọ ề ố ươ ứ • Các tham s ki u c b n đ c truy n theo ki u tham tr .ố ể ơ ả ượ ề ể ị • Các tham s có ki u đ i t ng đ c truy n theo ki u tham chi u.ố ể ố ượ ượ ề ể ế Các chú ý khi truy n tham s cho ph ng th c:ề ố ươ ứ • Các ph ng th c không th làm thay đ i giá tr c a các tham s có ki u nguyênươ ứ ể ổ ị ủ ố ể th yủ • Ph ng th c có th làm thay đ i tr ng thái c a tham s ki u đ i t ng ươ ứ ể ổ ạ ủ ố ể ố ượ • Ph ng th c không th làm cho tham s đ i t ng tham chi u t i m t đ iươ ứ ể ố ố ượ ế ớ ộ ố t ng m i. ượ ớ G i m t ph ng th c:ọ ộ ươ ứ Có 2 cách g i ph ng th c:ọ ươ ứ N u ph ng th c tr v giá tr , vi c g i ph ng th c th ng đ c x lý nh m t giáế ươ ứ ả ề ị ệ ọ ươ ứ ườ ượ ử ư ộ tr .ị Ví d : int larger = max(3, 5);ụ ho c ta có th in giá tr tr v c a cu c g i ph ng th c: System.out.println(max(3,ặ ể ị ả ề ủ ộ ọ ươ ứ 5)); N u ph ng th c tr v void, vi c g i ph ng th c là câu l nh.ế ươ ứ ả ề ệ ọ ươ ứ ệ Ví d ph ng th c println() tr v void: System.out.println("Hello!");ụ ươ ứ ả ề V.6 Các hàm và ph ng th c đ c bi tươ ứ ặ ệ Ph ng th c kh i t o: ươ ứ ở ạ Ph ng th c kh i t o (constructor) dùng đ kh i t o m t đ i t ng c a l p và đ tươ ứ ở ạ ể ở ạ ộ ố ượ ủ ớ ặ tr ng thái ban đ u cho đ i t ng b ng cách xác đ nh giá tr cho các thu c tính c a l p. ạ ầ ố ượ ằ ị ị ộ ủ ớ M i l p có th có 1 ho c nhi u ph ng th c kh i t o.ỗ ớ ể ặ ề ươ ứ ở ạ Ph ng th c kh i t o có cùng tên v i tên l p và không có ki u d li u tr v .ươ ứ ở ạ ớ ớ ể ữ ệ ả ề Khi không khai báo ph ng th c kh i t o, đ i t ng đ c t o ra b ng ph ng th cươ ứ ở ạ ố ượ ượ ạ ằ ươ ứ kh i t o m c đ nh v i các giá tr m c đ nh c a các thu c tính.ở ạ ặ ị ớ ị ặ ị ủ ộ Constructor không đ c k th a, nó ch đ c đ nh nghĩa cho chính l p cha. V n đ sượ ế ừ ỉ ượ ị ớ ấ ề ử d ng ph ng th c kh i t o c a l p cha trong các l p d n xu t s bàn trong ph n “Tính th aụ ươ ứ ở ạ ủ ớ ớ ẫ ấ ẽ ầ ừ k ”ế Ph ng th c h y:ươ ứ ủ Trái v i ph ng th c kh i t o, ph ng th c h y đ c g i khi đ i t ng đ c gi iớ ươ ứ ở ạ ươ ứ ủ ượ ọ ố ượ ượ ả phóng. Tuy nhiên, trong Java công vi c này đ c làm t đ ng, l p trình viên không c n quanệ ượ ự ộ ậ ầ tâm. Trong tr ng h p c n thi t ta có th khai báo ph ng th c h y theo cú pháp:ườ ợ ầ ế ể ươ ứ ủ protected void finalize() { // Body of Method } Hàm main() 53 Đây là m t hàm đ c bi t đ c cài đ t trong l p đ c g i th c thi đ u tiên trongộ ặ ệ ượ ặ ớ ượ ọ ự ầ ch ng trình. Vì nó đ c g i khi ch a có đ i t ng nào đ c t o ra nên nó luôn đ c khaiươ ượ ọ ư ố ượ ượ ạ ượ báo là static. H n n a, vi c g i hàm main() đ ng nhiên là di n ra bên ngoài l p nên nó cũngơ ữ ệ ọ ươ ễ ớ c n có m c đ truy c p là public. ầ ứ ộ ậ Hàm main() th ng không tr v giá tr nào nên ki u giá tr tr v c a nó là void.ườ ả ề ị ể ị ả ề ủ Hàm main() có m t tham s là m t m ng các chu i ch a n i dung các tham s dòngộ ố ộ ả ỗ ứ ộ ố l nh.ệ V.7 Khai báo ch ng các ph ng th cồ ươ ứ Các ph ng th c trong cùng m t l p có th có cùng tên nh ng nh t đ nh s l ng cácươ ứ ộ ớ ể ư ấ ị ố ượ tham s ho c ki u c a chúng ph i khác nhau. Đi u này g i là khai báo ch ng ph ng th c.ố ặ ể ủ ả ề ọ ồ ươ ứ T phiên b n Java 1.5, ki u giá tr tr v cũng đ c xem nh m t y u t đ phân bi từ ả ể ị ả ề ượ ư ộ ế ố ể ệ các ph ng th c.ươ ứ Sau đây là ch ng trình ví d v xây d ng các class trong Java:ươ ụ ề ự abstract class People // L p tr u t ng ớ ừ ượ { protected int Tuoi; protected String HoVaTen; public static final String MauDa=”Vang”; //h ng sằ ố // Ph ng th c kh i t o ươ ứ ở ạ public People(int t,String ht) { Tuoi=t; HoVaTen=ht; } // Ph ng th c hi n th tên và tu i c a m t ng iươ ứ ể ị ổ ủ ộ ườ public String toString(){ return HoVaTen + "," + String.valueOf(Tuoi); };} Sau đó, ta có m t l p SinhVien k th a t l p People trên:ộ ớ ế ừ ừ ớ public class SinhVien extends People { private String Lop; private double DiemTongKet; public static int MaSo; // bi n l pế ớ // Ph ng th c kh i t oươ ứ ở ạ public SinhVien(int t,String ht,String l,double dtk) { super(t,ht); // G i ph ng th c kh i t o c a l p cha cho các thu c tính kọ ươ ứ ở ạ ủ ớ ộ ế th aừ // Các thu c tính không k th a đ c gán t ng minhộ ế ừ ượ ườ Lop = l; DiemTongKet=dtk; } // Hàm main 54 public static void main(String[] argvs) { // Truy c p vào bi n l p không c n kh i t o đ i t ngậ ế ớ ầ ở ạ ố ượ SinhVien.MaSo=10; // Kh i t o m t đ i t ng sinh viên, MaSo c a sinh viên này s là 10ở ạ ộ ố ượ ủ ẽ SinhVien k = new SinhVien(23,"Nguyen Thi Mai","Letio3",7.15); System.out.print(k.MaSo); SinhVien.MaSo=11; // Kh i t o m t đ i t ng sinh viên, MaSo c a sinh viên này s là 11ở ạ ộ ố ượ ủ ẽ SinhVien k1 = new SinhVien(20,"Pham Anh Thu","Letio3",8.15); System.out.print(k.toString()); People p = new People(20,"Pham Anh Hoa"); // Báo l i dòng nàyỗ } } Trong ch ng trình trên, vi c kh i t o m t đ i t ng thu c l p People s b báo l i doươ ệ ở ạ ộ ố ượ ộ ớ ẽ ị ỗ l p này là l p tr u t ng. Chúng ta s tr l i v n đ này trong ph n “Tính k th a”.ớ ớ ừ ượ ẽ ở ạ ấ ề ầ ế ừ V.8 L p l ng nhau – l p n iớ ồ ớ ộ Co thê đinh nghia môt l p bên trong môt l p khac. L p nh vây goi la l p lông (́ ̉ ̣ ̃ ̣ ớ ̣ ớ ́ ớ ư ̣ ̣ ̀ ớ ̀ Nested Class) va đ c cai đăt nh sau ̀ ượ ̀ ̣ ư : class EnclosingClass{ // L p bao bên ngoaiớ ̀ . . . static class StaticNestedClass { // L p lông tinhớ ̀ ̃ . . . } class InnerClass { // L p lông phi tinh hay l p nôi bôớ ̀ ̃ ớ ̣ ̣ . . . } } L p lông chi đ c biêt bên trong ớ ̀ ̉ ượ ́ ph m vi cua l p bao bên ngoai. Trình biên dich Java seạ ̉ ớ ̀ ̣ ̃ bao lôi nêu môt đoan ma bât ky c a l p bên ngoài truy c p tr c tiêp l p lông.́ ̃ ́ ̣ ̣ ̃ ́ ̀ ủ ớ ậ ự ́ ớ ̀ Môt l p lông c̣ ớ ̀ o quyên truy câp đên cac thanh viên cua l p bao bên ngoai, thâm chi nêú ̀ ̣ ́ ́ ̀ ̉ ớ ̀ ̣ ́ ́ chung đ c khai bao private. Tuy nhiên, l p bao không thê truy xuât cac thanh phân cua l ṕ ượ ́ ớ ̉ ́ ́ ̀ ̀ ̉ ớ lông. ̀ Co hai kiêu l p lông : tinh va phi tinh. ́ ̉ ớ ̀ ̃ ̀ ̃ L p lông tinhớ ̀ ̃ (static nested class) đ c bô sung t khoa staticượ ̉ ừ ́ . No không thê tham chiêú ̉ ́ tr c tiêp đên biên hay ph ng th c đôi t ng đ c đinh nghia trong l p bao, ma chi dungự ́ ́ ́ ươ ứ ́ ượ ượ ̣ ̃ ớ ̀ ̉ ̀ chung thông qua đôi t ng. Vi gi i han nay nên l p lông tinh it đ c dung. H́ ́ ượ ̀ ớ ̣ ̀ ớ ̀ ̃ ́ ượ ̀ âu hêt cac l p̀ ́ ́ ớ lông la l p nôi bồ ̀ ớ ̣ ̣. L p lông phi tinhớ ̀ ̃ (nonstatic nested class) không bô sung t khoa static, con ̉ ừ ́ ̀ đ c goi laượ ̣ ̀ l p nôi bô ớ ̣ ̣ (inner class). No co thê truy câp tr c tiêp đên cac biên va ph ng th c đôi t ng. ́ ́ ̉ ̣ ự ́ ́ ́ ́ ̀ ươ ứ ́ ượ class Outer { int outer_x = 100; void test() { 55 [...]... hình trong Java Để kết thúc phần này ta sẽ xem xét cơ chế của việc gọi phương th ức c ủa m ột đ ối tượng trong Java được thực hiện như thế nào: 1 Trình biên dịch kiểm tra kiểu của đối tượng và tên c ủa ph ương th ức, gi ả s ử là x.f(param) Trong đó x được khai báo là đối tượng của lớp C Trong l ớp C có th ể có nhi ều phương thức có cùng tên f nhưng khác nhau ở tham số, ví dụ f(int) và f(String) Trình. .. import java. util.*; import java. sql.*; Trong cả hai gói này đều có lớp Date nên trong dòng lệnh: Date myDate = new Date(); Thì trình biên dịch báo lỗi vì không bi ết Date của gói nào Khi này ta ph ải khai báo rõ ràng cho Date ở gói nào: import java. util.Date; import java. sql.*; Nếu muốn sử dụng cả hai Date trong chương trình ta phải khai báo trực tiếp: java. util.Date deadline = new java. util.Date(); java. sql.Date... là một đối tượng Employee, nó không có phương thức setTienLuong() VII.2 Sự ràng buộc động –Dynamic Binding Xét ví dụ sau: // Khai báo một đối tượng Manager Manager boss = new Manager("Phan Thanh Ha", 80000, 1987, 12, 15); boss.setTienThuong(5000); // Khai báo một mảng 3 đối tượng Employee Employee[] staff = new Employee[3]; // Gán boss cho đối tượng thứ 0 staff[0] = boss; // Khởi tạo cho 2 đối tượng. .. chúng ta sẽ xem nó được gọi như thế nào VII.1 Sự ép kiểu và gán tham chiếu đối tượng Trong quan hệ thừa kế, đôi khi có sự chuyển đổi vai trò c ủa các lớp cha và con Ta có thể gán tham chiếu một đối tượng của lớp con cho một đối tượng của l ớp cha Tr ường h ợp ngược lại là không thể Đây chính là thể hiện tính đa hình c ủa đối tượng M ột đ ối t ượng c ủa lớp cha có thể được gán tham chiếu tới bất kỳ lớp... chương trình t ừ c ửa s ổ dòng l ệnh CommandLine, ta phải có đường dẫn đầy đủ: Javac com\horstmann\corejava\Employee .java Bài tập 1 Thực hành cài đặt các ví dụ trong đề tài trên 2 Xây dựng các class trong java để cài đặt các lớp đối t ượng: Khách hàng, s ản ph ẩm, hóa đơn, giỏ hàng trong một hệ thống quản lý bán hàng ở siêu thị 3 Trong hệ thống đồ họa: a Hãy xây dựng các class điểm, đoạn thẳng, hình vuông,... mọi lớp trong Java Tuy nhiên chúng ta không bao gi ờ ph ải khai báo: class Employee extends Object Mọi lớp đều là hậu duệ của Object, do đó, đối tượng thuộc lớp Object có th ể đ ược tham chiếu tới bất kỳ đối tượng nào khác Object obj = new Employee("AAA", 35000); Employee[] staff = new Employee[10]; obj = staff; // OK obj = new int[10]; // OK IX Giao diện IX.1 Cấu trúc của giao diện Trong Java không... không có gì đặc bi ệt N ếu ta có m ột đối tượng Manager có tên boss, ta có thể gọi: boss.setTienThuong(10000); Tất nhiên là đối tượng của lớp Emplyee không thể gọi phương th ức setTienThuong() vì nó không phải là phương thức được định nghĩa trong lớp Employee Tuy nhiên, chúng ta có thể sử dụng các phương thức getHoVaTen(), getLuong(), getNgayBatDau() đối với các đối tượng của lớp Manager vì chúng được... VI Tính kế thừa trong Java Để theo dõi tính kế thừa trong Java được cài đặt như thế nào, trong phần này chúng ta sẽ xem xét một ví dụ về quản lý nhân sự tại một công ty VI.1 Sự kế thừa các thuộc tính và phương thức Giả sử trong công ty, đội ngũ quản lý (managers) được đ ối xử khác v ới nhân viên (employees) bình thường Lớp Employee được định nghĩa như sau: import java. util.Date; import java. util.GregorianCalendar;... giá trị tất cả các thuộc tính của một đối tượng 4 Xây dựng một lớp PhuongTrinhBac1 để giải phương trình bậc 1 5 Xây dựng một lớp đối tượng phương trình bậc 2 sao cho ta có th ể kh ởi t ạo m ột phương trình bậc 2 và biết ngay các tình trạng của nó nh ư có nghi ệm hay không và giá tr ị nghiệm 5 Xây dựng một giao diện GiaiPhuongTrinh dùng cho vi ệc gi ải các ph ương trình bậc 1 và bậc 2 sau đó xây dựng... một mảng các đối tượng Employee có thể được gán cho m ột m ảng các đ ối tượng Manager mà không cần chuyển kiểu: Manager[] managers = new Manager[10]; Employee[] staff = managers; // OK Tuy vậy, sự chuyển đổi này chỉ diễn ra trong thời gian chạy chương trình N ếu khi l ập trình ta viết: you = boss; // OK you.setTienThuong(2000);// Không được 60 Lý do là việc chuyển kiểu chỉ xảy ra lúc chương trình chạy . ườ ẫ ầ ủ Javac comhorstmanncorejavaEmployee .java Bài t pậ 1. Th c hành cài đ t các ví d trong đ tài trên.ự ặ ụ ề 2. Xây d ng các class trong java đ cài. pư ậ ể ệ ệ ể ố ượ ự ế ớ trong Java. II.2 M i quan h gi a các classố ệ ữ Các class trong ch ng trình có th quan h v i nhau theo 1 trong 3 d ng:ươ ể ệ ớ ạ

Ngày đăng: 10/10/2013, 13:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan