Đ 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: )ả ế ạ
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