Đ 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ể ầ ề ỹ ậ ậ ướ ố ượ ả
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.ố ượ ượ ả ệ ằ ấ ộ ậ
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ứ ớ ớ ệ ể ầ ự
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.ượ ượ ế ế ỉ ụ ế ừ
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
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,ặ ể ị ả ề ủ ộ ọ ươ ứ