Ch¬ng 1: LËp t×nh híng ®èi tîng - Ph¬ng ph¸p gi¶i quyÕt bµi
to¸n míi
Ch ng 1ươ
L p trình h ng đ i t ng ướ ượ
ph ng pháp gi i quy t bài toán m iươ ế
1. Ph ng pháp l p trìnhươ
T nhi u năm nay chúng ta đã nghe nhi u đ n thu t ng “L p trình ế
h ng đ i t ng” (OOP - Object Oriented Programming). V y th c ch t nó làướ ượ
gì? Đ hi u đ c v n đ này chúng ta b t đ u nhìn l i m t chút l ch s phát ượ
tri n các ph ng pháp l p trình. Vào nh ng ngày đ u phát tri n c a máy tính, ươ
khi các ph n m m còn r t đ n gi n ch c vài ch c dòng l nh, ch ng trình ơ ươ
đ c vi t tu n t v i các câu l nh th c hi n t đ u đ n cu i. Cách vi tượ ế ế ế
ch ng trình nh th này g i là ph ng pháp ươ ư ế ươ l p trình tuy n tính ế . Khoa h c
máy tính ngày càng phát tri n, các ph n m m đòi h i ngày càng ph c t p
l n h n r t nhi u. Đ n lúc này ph ng pháp l p trình tuy n tính t ra kém ơ ế ươ ế
hi u qu nh ng tr ng h p ng i l p trình không th ki m soát đ c ườ ườ ượ
ch ng trình. Th ph ng pháp ươ ế ươ l p trình c u trúc (LTCT) ra đ i. Theo
cách ti p c n này, ch ng trình đ c t ch c thành các ch ng trình con.ế ươ ượ ươ
M i ch ng trình con đ m nh n x m t công vi c nh trong toàn b h ươ
th ng. M i ch ng trình con này l i th chia nh thành các ch ng trình ươ ươ
con nh h n. Quá trình phân chia nh v y ti p t c di n ra cho đ n các ơ ư ế ế
ch ng trình con nh nh n đ c đ đ n gi n. Ng i ta g i đó quá trìnhươ ượ ơ ư
làm m n d n. Các ch ng trình con t ng đ i đ c l p v i nhau, do đó th ươ ươ
phân công cho t ng nhóm đ m nh n vi t các ch ng trình con khác nhau. ế ươ
Ngôn ng l p trình th hi n rõ nét nh t ph ng pháp l p trình c u trúc chính ươ
Pascal. Tuy nhiên, khi s d ng ph ng pháp l p trình này v n còn g p m t ươ
khó khăn l n là t ch c d li u c a h th ng nh th nào trong máy tính. B i ư ế
theo quan đi m c a LTCT thì Ch ng trình = C u trúc d li u + Gi iươ
thu t. Đ làm đ c vi c này đòi h i ng i l p trình ph i ki n r t v ng ượ ườ ế
v c u trúc d li u. M t khó khăn n a g p ph i gi i thu t c a ch ng ươ
trình ph thu c r t ch t ch vào c u trúc d li u, do v y ch c n m t s thay
đ i nh c u trúc d li u cũng th làm thay đ i gi i thu t nh v y ư
ph i vi t l i ch ng trình. Đi u này rõ ràng không th thích h p khi ph i xây ế ươ
d ng m t d án ph n m m r t l n. M t ph ng pháp l p trình m i ra đ i đ ươ
kh c ph c nh c đi m này và đó chính là ph ng pháp ượ ươ l p trình h ng đ i ướ
t ng ượ (LTHĐT). Đi m căn b n c a ph ng pháp này thi t k ch ng ươ ế ế ươ
trình xoay quanh d li u c a h th ng. Nghĩa là lúc này các thao tác x lý c a
h th ng đ c g n li n v i d li u nh v y m t s thay đ i nh c a d ượ ư
li u ch nh h ng đ n các m t s nh các hàm x liên quan. S g n k t ưở ế ế
gi a d li u các hàm x trên chúng t o ra đ i t ng. M t u đi m n a ượ ư
ph ng pháp LTHĐT cách ti p c n bài toán tr nên g n gũi v i th c ươ ế
t h n. Đ hi u h n v ph ng pháp l p trình này, không t t h n ế ơ ơ ươ ơ
- 5 -
Ch¬ng 1: LËp t×nh híng ®èi tîng - Ph¬ng ph¸p gi¶i quyÕt bµi
to¸n míi
chúng ta đi vào m t bài toán c th , ch ng h n bài toán quan h gia đình.
đây yêu c u làm th nào đ th hi n đ c các m i quan h gi a các thành ế ượ
viên trong m t gia đình trên máy tính th tr l i đ c câu h i d ng khá ượ
t ng quát: “A và B quan h nh th nào trong gia đình ?” v i A và B hai ư ế
th b t kỳ. Chúng ta s phân tích xem cách gi i quy t bài toán này nh th ế ư ế
nào.
2. Bài toán quan h gia đình
Trong h i, m i ng i đ u m t gia đình, trong đó t n t i nhi u m i ườ
quan h gia đình khá ph c t p nh ông, bà, cha, m , cô, chú, bác, v.v. Thông ư
th ng, đ th hi n các m i quan h này ng i ta bi u di n b ng m t s đườ ườ ơ
cây quan h . D i đây m t d bi u di n m t gia đình ba th h b ng ướ ế
hình 1.1.
Đ gi i quy t bài toán này theo ph ng pháp LTCT, công vi c đ u tiên là ế ươ
ph i xây d ng m t c u trúc d li u th hi n đ c cây quan h trên. Trông ượ
qua v đ n gi n nh ng n u th làm xem s th y không đ n gi n chút ơ ư ế ơ
nào, th m chí còn khó. B i đòi h i ng i l p trình ph i r t thành th o ườ
s d ng con tr , ph i xây d ng đ c gi i thu t c p nh t thông tin trên cây ượ
quan h . Các gi i thu t này t ng đ i ph c t p đ i v i m t c u trúc d li u ươ
nh trong bài toán. Yêu c u c a bài toán tr l i đ c câu h i d ng như ư ư
“H ng Mai quan h nh th nào ?”. Câu tr l i c a ch ng trình ph iư ư ế ươ
“H ng anh h c a Mai”. Đ th th c hi n đ c nh v y, ràngư ượ ư
chúng ta ph i xây d ng đ c gi i thu t tìm đ c m i quan h gi a hai nút ượ ượ
trên cây quan h . M t v n đ ph c t p t nh h n tên g i cho các m i ế ơ
quan h gia đình Vi t nam r t phong phú! M t khó khăn là ph i vét c n h t ế
các m i quan h th trên m t cây quan h . M t khó khăn n a g p ph i
- 6 -
Mr. Th ngMs. Nga
Mr. Quang
Mr. H ngư
Ms. Vân
Miss. MaiMiss. Trang
Mr. Tu nMs. H ng
Hình 1.1 y quan h trong m t
gia đình
Ch¬ng 1: LËp t×nh híng ®èi tîng - Ph¬ng ph¸p gi¶i quyÕt bµi
to¸n míi
là khi c n phát tri n, ch ng trình ph i qu n lý đ c nhi u gia đình cùng m t ươ ượ
lúc các gia đình này m i quan h thông gia v i nhau. Hình 1.2 s đ ơ
quan h đ c phát tri n t s đ ví d trên minh ho cho v n đ này. ượ ơ
M t câu h i đ t ra: “Li u v i c u trúc d li u đ m b o gi i quy t ế
đ c v n đ này không ?”. ràng câu tr l i không. S đ quan h trênượ ơ
hình v s ph i t quan h c a m t gia đình. Ch v i chút ít s thay đ i
v c u trúc d li u cũng d n đ n m t lo t v n đ đòi h i ph i vi t l i các ế ế
gi i thu t c a ch ng trình. Ph ng pháp l p trình m i h ng đ i t ng cho ươ ươ ư ượ
phép chúng ta kh c ph c đ c các v n đ đã nêu ra. Trong su t các trình bày ượ
c a cu n sách này s c g ng nêu b t đ c cách gi i quy t v n đ nh ượ ế
LTHĐT.
Theo cách ti p c n LTHĐT, bài toán quan h gia đình đ c xem xét d iế ượ ướ
góc đ qu n t p các đ i t ng ư Con ng iườ . Đ bi t m i quan h gia đình ế
c a m i th , c n th hi n m t s quan h c b n nh cha, m , anh em, ơ ư
con cái, v ch ng c a th đó. Nh v y, m i đ i t ng con ng i c a bài ư ượ ườ
toán các thu c tính riêng, nói lên r ng cha m , anh em, v.v.. c a h ai.
Ngoài ra cũng c n m t thu c tính n a cho bi t tên th gì. th ế
t m t l p các đ i t ng con ng i nh hình 1.3. ượ ườ ư
- 7 -
Con ng iườ
n ?
Cha ?
M ?
Anh em ?
Con cái ?
V / Ch ng ?
nh 1.3 Mô t m t l p c đ i t ng ượ
con ng iườ
Mr. Th ngMs. Nga
Mr. Quang
Mr. H ngư
Ms. Vân
Miss. Mai
Miss.
Trang
Mr. Tu nMs. H ng
Mr. Thành Ms. Lan
- - -
- -
- - -
- -
- - -
- -
- -
-
nh 1.2 M r ng quan h gi a
c gia đình
Ch¬ng 1: LËp t×nh híng ®èi tîng - Ph¬ng ph¸p gi¶i quyÕt bµi
to¸n míi
N u ch nh v y thì ch ng khác gì m t c u trúc hay b n ghi trong c uế ư
trúc d di u đ c s d ng ph ng pháp LTCT. V n đ đây ph ng ượ ươ ươ
pháp LTHĐT xem các m i quan h trong gia đình đ c hình thành m t cách ượ
t nhiên do các s ki n c th trong cu c s ng t o nên. Ví d , khi ng i ph ườ
n sinh con, đ a con cô ta sinh ra s có m là cô ta và cha là ch ng cô ta, đ ng
th i anh ch ng ph i đ c c p nh t đ thêm đ a con này. Nh ng đ a con ượ
tr c c a ta s thêm đ a em này đ a thêm nh ng ng i anhướ ườ
ho c ng i ch đó. D dàng th y r ng có hai s ki n chính tác đ ng đ n m i ườ ế
quan h gia đình là s sinh con c a ng i ph n hôn nhân gi a hai cá th ư
khác gi i trongh i. Các s ki n này g n li n v i t ng con ng i trong bài ườ
toán. Đi u này có nghĩa là khi nói đ n m t s ki n nào thì ph i ch ra nó đ c ế ượ
phát sinh b i ng i nào. d , khi nói s ki n sinh con thì ph i bi t ng i ườ ế ườ
nào sinh. Khi m t s ki n c a m t con ng i nào đó x y ra (ví d nh sinh ườ ư
con) thì các thu c tính c a chính anh ta s b thay đ i, đ ng th i thu c tính
c a m t s đ i t ng liên quan cũng th thay đ i theo. Quá trình đóng gói ượ
gi a các s ki n thu c tính s t o ra Đ i t ng, ượ khái ni m c b n c a ơ
ph ng pháp LTHĐT. M t mô t chung cho các đ i t ng con ng i c a bàiươ ượ ườ
toán đ c g i là m t ượ L p. Hình 1.4 minh ho m t l p Con ng i có thêm các ườ
s ki n c a bài toán.
Sau khi đã g n k t các s ki n vào đ i t ng nh trên, v n đ t o m t ế ượ ư
s đ quan h gia đình nh th nào. D i đây là m t ví d minh ho vi c t oơ ư ế ướ
ra m t quan h gia đình d a trên các s ki n cu c s ng. Gi thi tđã có hai ế
đ i t ng là ông Th ng và bà Mai. ượ
- 8 -
Con ng iườ
n ?
Cha ?
M ?
Anh em ?
Con cái ?
V / Ch ng ?
Sinh con
C iướ
nh 1.4 Các s ki n b sung g n v i
con ng i.ườ
Ch¬ng 1: LËp t×nh híng ®èi tîng - Ph¬ng ph¸p gi¶i quyÕt bµi
to¸n míi
Các s ki n đ t o ra cây quan h trên có th vi t theo tr t t nh sau: ế ư
Th ng.C i (Mai) ướ
Mai.Sinh con (gái, Nga)
Mai.Sinh con (trai,Tu n)
Các s ki n vi t theo cú pháp: ế
Nh v y các b n đã th y r ng chúng ta không c n ph i quan tâm đ nư ế
cách t o m t c u trúc cây quan h nh th o bên trong d li u c a ch ng ư ế ươ
trình mà v nth cung c p d li u bài toán cho ch ng trình thông qua các ươ
s ki n nh trên. Chúng ta quay l i v n đ chính c a bài tn tr l i các ư
câu h i v m i quan h gia đình nh th nào khi ti p c n bài toán theo ư ế ế
ph ng pháp này. Đ tr l i đ c câu h i t ng quát “X Y quan h giaươ ượ
đình nh th nào ?” ta c n ph i tr l i các câu h i nh nh “X có ph i là anhư ế ư
c a Y không ?”, “X ph i ông n i c a Y không ?”, v.v.. Câu h i th
nhìn t góc đ đ i t ng X nh : “Đ i t ng ph i anh c a Y không ?”, ượ ư ượ
“có ph i ông n i c a Y không ?”, v.v.. Nh v y câu h i lúc này đã giao v ư
cho đ i t ng đ tr l i. Các đ i t ng lúc này c n ph i có các ph ng th c ượ ượ ươ
đ tr l i các câu h i nh v y. bây gi m t l p đ i t ng Con ng i ư ượ ườ
đ c minh ho nh hình 1.5.ượ ư
- 9 -
Ms. MaiMr. Th ng
Mr. Tu nMiss. Nga
Đ i t ng t o s ki n . S ki n ( tng s kèm ượ